diff --git a/DEPS b/DEPS index 621492a..3207e8b3 100644 --- a/DEPS +++ b/DEPS
@@ -40,11 +40,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'f86d37be5b539e8b318d4449713e13f2cfc94da8', + 'skia_revision': '6ecc911070add386dc9ffeb8b131d21035672fb6', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '6f0ca10e3fb536d902700a1ef92d6e45ce91b47c', + 'v8_revision': '326a8fdf23e2ba9faf35a5e200ffb50f847a06d9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -72,7 +72,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. - 'boringssl_revision': 'c07635f8699e99b6af06e401beccd934f6bce53b', + 'boringssl_revision': '24e5886c0edfc409c8083d10f9f1120111efd6f5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling google-toolbox-for-mac # and whatever else without interference from each other. @@ -205,7 +205,7 @@ Var('chromium_git') + '/external/selenium/py.git' + '@' + '5fd78261a75fe08d27ca4835fb6c5ce4b42275bd', 'src/third_party/libvpx/source/libvpx': - Var('chromium_git') + '/webm/libvpx.git' + '@' + '4f9d852759ceca15c16f9ffed96c08d4b427f40b', + Var('chromium_git') + '/webm/libvpx.git' + '@' + '8d391a111a4830f946f6fe8b0cf51be8661224d9', 'src/third_party/ffmpeg': Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + '06ac9ea361fa8d48916b83783bb7f36872388cc2',
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 7f0422635..bf39a8e 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -220,6 +220,8 @@ "login/ui/lock_window.h", "login/ui/login_password_view.cc", "login/ui/login_password_view.h", + "login/ui/login_pin_view.cc", + "login/ui/login_pin_view.h", "login_status.h", "magnifier/magnification_controller.cc", "magnifier/magnification_controller.h", @@ -1178,6 +1180,7 @@ "login/mock_lock_screen_client.cc", "login/mock_lock_screen_client.h", "login/ui/login_password_view_test.cc", + "login/ui/login_pin_view_unittest.cc", "login/ui/login_test_base.cc", "login/ui/login_test_base.h", "metrics/desktop_task_switch_metric_recorder_unittest.cc",
diff --git a/ash/ash_switches.cc b/ash/ash_switches.cc index 30fc6c4..3db6f13 100644 --- a/ash/ash_switches.cc +++ b/ash/ash_switches.cc
@@ -30,6 +30,9 @@ // Enable keyboard shortcuts used by developers only. const char kAshDeveloperShortcuts[] = "ash-dev-shortcuts"; +// Disable the Night Light feature. +const char kAshDisableNightLight[] = "ash-disable-night-light"; + // Disable the Touch Exploration Mode. Touch Exploration Mode will no longer be // turned on automatically when spoken feedback is enabled when this flag is // set. @@ -40,9 +43,6 @@ const char kAshEnableMagnifierKeyScroller[] = "ash-enable-magnifier-key-scroller"; -// Enables the NightLight feature. -const char kAshEnableNightLight[] = "ash-enable-night-light"; - // Enables the palette on every display, instead of only the internal one. const char kAshEnablePaletteOnAllDisplays[] = "ash-enable-palette-on-all-displays";
diff --git a/ash/ash_switches.h b/ash/ash_switches.h index 5aecb7b5..e3e7337 100644 --- a/ash/ash_switches.h +++ b/ash/ash_switches.h
@@ -20,10 +20,10 @@ ASH_EXPORT extern const char kAshCopyHostBackgroundAtBoot[]; ASH_EXPORT extern const char kAshDebugShortcuts[]; ASH_EXPORT extern const char kAshDeveloperShortcuts[]; +ASH_EXPORT extern const char kAshDisableNightLight[]; ASH_EXPORT extern const char kAshDisableSmoothScreenRotation[]; ASH_EXPORT extern const char kAshDisableTouchExplorationMode[]; ASH_EXPORT extern const char kAshEnableMagnifierKeyScroller[]; -ASH_EXPORT extern const char kAshEnableNightLight[]; ASH_EXPORT extern const char kAshEnablePaletteOnAllDisplays[]; ASH_EXPORT extern const char kAshEnableScaleSettingsTray[]; ASH_EXPORT extern const char kAshEnableTouchView[];
diff --git a/ash/display/display_color_manager_chromeos.cc b/ash/display/display_color_manager_chromeos.cc index 074043f..02a7f5c 100644 --- a/ash/display/display_color_manager_chromeos.cc +++ b/ash/display/display_color_manager_chromeos.cc
@@ -11,8 +11,10 @@ #include "base/bind.h" #include "base/files/file_util.h" #include "base/logging.h" +#include "base/sequenced_task_runner.h" #include "base/task_runner_util.h" -#include "base/threading/sequenced_worker_pool.h" +#include "base/task_scheduler/post_task.h" +#include "base/threading/thread_restrictions.h" #include "components/quirks/quirks_manager.h" #include "third_party/qcms/src/qcms.h" #include "ui/display/display.h" @@ -24,12 +26,15 @@ namespace { +// Runs on a background thread because it does file IO. std::unique_ptr<DisplayColorManager::ColorCalibrationData> ParseDisplayProfile( const base::FilePath& path, bool has_color_correction_matrix) { VLOG(1) << "Trying ICC file " << path.value() << " has_color_correction_matrix: " << (has_color_correction_matrix ? "true" : "false"); + base::ThreadRestrictions::AssertIOAllowed(); + // Reads from a file. qcms_profile* display_profile = qcms_profile_from_path(path.value().c_str()); if (!display_profile) { LOG(WARNING) << "Unable to load ICC file: " << path.value(); @@ -150,10 +155,11 @@ } // namespace DisplayColorManager::DisplayColorManager( - display::DisplayConfigurator* configurator, - base::SequencedWorkerPool* blocking_pool) + display::DisplayConfigurator* configurator) : configurator_(configurator), - blocking_pool_(blocking_pool), + sequenced_task_runner_(base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock(), base::TaskPriority::USER_VISIBLE, + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})), weak_ptr_factory_(this) { configurator_->AddObserver(this); } @@ -192,7 +198,7 @@ void DisplayColorManager::LoadCalibrationForDisplay( const display::DisplaySnapshot* display) { - DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (display->display_id() == display::kInvalidDisplayId) { LOG(WARNING) << "Trying to load calibration data for invalid display id"; return; @@ -219,7 +225,7 @@ display::DisplayConnectionType type, const base::FilePath& path, bool file_downloaded) { - DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); std::string product_string = quirks::IdToHexString(product_id); if (path.empty()) { VLOG(1) << "No ICC file found with product id: " << product_string @@ -239,7 +245,7 @@ << " with product id: " << product_string; base::PostTaskAndReplyWithResult( - blocking_pool_, FROM_HERE, + sequenced_task_runner_.get(), FROM_HERE, base::Bind(&ParseDisplayProfile, path, has_color_correction_matrix), base::Bind(&DisplayColorManager::UpdateCalibrationData, weak_ptr_factory_.GetWeakPtr(), display_id, product_id)); @@ -249,7 +255,7 @@ int64_t display_id, int64_t product_id, std::unique_ptr<ColorCalibrationData> data) { - DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (data) { calibration_map_[product_id] = std::move(data); ApplyDisplayColorCalibration(display_id, product_id);
diff --git a/ash/display/display_color_manager_chromeos.h b/ash/display/display_color_manager_chromeos.h index c87c727..60c217a 100644 --- a/ash/display/display_color_manager_chromeos.h +++ b/ash/display/display_color_manager_chromeos.h
@@ -15,12 +15,12 @@ #include "base/files/file_path.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" -#include "base/threading/thread_checker.h" +#include "base/sequence_checker.h" #include "ui/display/manager/chromeos/display_configurator.h" #include "ui/display/types/display_constants.h" namespace base { -class SequencedWorkerPool; +class SequencedTaskRunner; } namespace display { @@ -35,8 +35,7 @@ class ASH_EXPORT DisplayColorManager : public display::DisplayConfigurator::Observer { public: - DisplayColorManager(display::DisplayConfigurator* configurator, - base::SequencedWorkerPool* blocking_pool); + explicit DisplayColorManager(display::DisplayConfigurator* configurator); ~DisplayColorManager() override; // display::DisplayConfigurator::Observer @@ -69,13 +68,15 @@ std::unique_ptr<ColorCalibrationData> data); private: + friend class DisplayColorManagerTest; + void ApplyDisplayColorCalibration(int64_t display_id, int64_t product_id); void LoadCalibrationForDisplay(const display::DisplaySnapshot* display); display::DisplayConfigurator* configurator_; std::map<int64_t, std::unique_ptr<ColorCalibrationData>> calibration_map_; - base::ThreadChecker thread_checker_; - base::SequencedWorkerPool* blocking_pool_; + SEQUENCE_CHECKER(sequence_checker_); + scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_; // Factory for callbacks. base::WeakPtrFactory<DisplayColorManager> weak_ptr_factory_;
diff --git a/ash/display/display_color_manager_chromeos_unittest.cc b/ash/display/display_color_manager_chromeos_unittest.cc index a5ef152..dc62624 100644 --- a/ash/display/display_color_manager_chromeos_unittest.cc +++ b/ash/display/display_color_manager_chromeos_unittest.cc
@@ -5,12 +5,13 @@ #include "ash/display/display_color_manager_chromeos.h" #include "base/files/file_util.h" +#include "base/memory/ptr_util.h" #include "base/memory/scoped_vector.h" -#include "base/message_loop/message_loop.h" #include "base/path_service.h" #include "base/run_loop.h" #include "base/strings/pattern.h" #include "base/test/scoped_path_override.h" +#include "base/test/scoped_task_environment.h" #include "base/test/sequenced_worker_pool_owner.h" #include "chromeos/chromeos_paths.h" #include "components/quirks/quirks_manager.h" @@ -33,9 +34,9 @@ class DisplayColorManagerForTest : public DisplayColorManager { public: - DisplayColorManagerForTest(display::DisplayConfigurator* configurator, - base::SequencedWorkerPool* blocking_pool) - : DisplayColorManager(configurator, blocking_pool) {} + explicit DisplayColorManagerForTest( + display::DisplayConfigurator* configurator) + : DisplayColorManager(configurator) {} void SetOnFinishedForTest(base::Closure on_finished_for_test) { on_finished_for_test_ = on_finished_for_test; @@ -113,8 +114,8 @@ std::unique_ptr<display::NativeDisplayDelegate>( native_display_delegate_)); - color_manager_.reset(new DisplayColorManagerForTest( - &configurator_, pool_owner_->pool().get())); + color_manager_ = + base::MakeUnique<DisplayColorManagerForTest>(&configurator_); EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &color_path_)); @@ -145,6 +146,8 @@ ~DisplayColorManagerTest() override {} protected: + base::test::ScopedTaskEnvironment scoped_task_environment_; + std::unique_ptr<base::SequencedWorkerPoolOwner> pool_owner_; std::unique_ptr<base::ScopedPathOverride> path_override_; base::FilePath color_path_; std::unique_ptr<display::test::ActionLogger> log_; @@ -154,9 +157,6 @@ native_display_delegate_; // not owned std::unique_ptr<DisplayColorManagerForTest> color_manager_; - base::MessageLoopForUI ui_message_loop_; - std::unique_ptr<base::SequencedWorkerPoolOwner> pool_owner_; - private: DISALLOW_COPY_AND_ASSIGN(DisplayColorManagerTest); };
diff --git a/ash/login/ui/login_password_view.cc b/ash/login/ui/login_password_view.cc index 35326c8..7b37497 100644 --- a/ash/login/ui/login_password_view.cc +++ b/ash/login/ui/login_password_view.cc
@@ -7,7 +7,10 @@ #include "ash/resources/vector_icons/vector_icons.h" #include "ash/system/tray/size_range_layout.h" #include "ash/system/user/button_from_view.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" +#include "ui/events/event_constants.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/border.h" #include "ui/views/controls/image_view.h" @@ -99,6 +102,24 @@ LoginPasswordView::~LoginPasswordView() = default; +void LoginPasswordView::AppendNumber(int value) { + textfield_->SetText(textfield_->text() + base::IntToString16(value)); +} + +void LoginPasswordView::Backspace() { + // Instead of just adjusting textfield_ text directly, fire a backspace key + // event as this handles the various edge cases (ie, selected text). + + // views::Textfield::OnKeyPressed is private, so we call it via views::View. + auto* view = static_cast<views::View*>(textfield_); + view->OnKeyPressed(ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_BACK, + ui::DomCode::BACKSPACE, ui::EF_NONE)); + view->OnKeyPressed(ui::KeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_BACK, + ui::DomCode::BACKSPACE, ui::EF_NONE)); +} + +void LoginPasswordView::Submit() {} + const char* LoginPasswordView::GetClassName() const { return kLoginPasswordViewName; }
diff --git a/ash/login/ui/login_password_view.h b/ash/login/ui/login_password_view.h index 6f0d5ed7..772014b 100644 --- a/ash/login/ui/login_password_view.h +++ b/ash/login/ui/login_password_view.h
@@ -48,6 +48,15 @@ explicit LoginPasswordView(const OnPasswordSubmit& on_submit); ~LoginPasswordView() override; + // Add the given numeric value to the textfield. + void AppendNumber(int value); + + // Erase the last entered value. + void Backspace(); + + // Dispatch a submit event. + void Submit(); + // views::View: const char* GetClassName() const override; gfx::Size CalculatePreferredSize() const override;
diff --git a/ash/login/ui/login_pin_view.cc b/ash/login/ui/login_pin_view.cc new file mode 100644 index 0000000..9e214d3 --- /dev/null +++ b/ash/login/ui/login_pin_view.cc
@@ -0,0 +1,160 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/login/ui/login_pin_view.h" + +#include "base/callback.h" +#include "base/strings/utf_string_conversions.h" +#include "ui/views/controls/button/label_button.h" +#include "ui/views/layout/box_layout.h" + +namespace ash { +namespace { + +const char* kPinLabels[] = { + "+", // 0 + " ABC", // 1 + " DEF", // 2 + " GHI", // 3 + " JKL", // 4 + " MNO", // 5 + " PQRS", // 6 + " TUV", // 7 + " WXYZ", // 8 + " MNO", // 9 +}; + +const char* kLoginPinViewClassName = "LoginPinView"; + +// View ids. Useful for the test api. +const int kBackspaceButtonId = -1; + +base::string16 GetButtonLabelForNumber(int value) { + DCHECK(value >= 0 && value < int{arraysize(kPinLabels)}); + return base::ASCIIToUTF16(std::to_string(value) + kPinLabels[value]); +} + +// Returns the view id for the given pin number. +int GetViewIdForPinNumber(int number) { + // 0 is a valid pin number but it is also the default view id. Shift all ids + // over so 0 can be found. + return number + 1; +} + +// TODO(jdufault): Get pin button visuals to spec. +class PinButton : public views::LabelButton, public views::ButtonListener { + public: + PinButton(const base::string16& label, const base::Closure& on_press) + : views::LabelButton(this, label), on_press_(on_press) { + SetFocusBehavior(FocusBehavior::ALWAYS); + + SetEnabledTextColors(SK_ColorWHITE); + SetPreferredSize( + gfx::Size(LoginPinView::kButtonSizeDp, LoginPinView::kButtonSizeDp)); + } + + PinButton(int value, const LoginPinView::OnPinKey& on_key) + : PinButton(GetButtonLabelForNumber(value), base::Bind(on_key, value)) { + set_id(GetViewIdForPinNumber(value)); + } + ~PinButton() override = default; + + // views::ButtonListener: + void ButtonPressed(Button* sender, const ui::Event& event) override { + DCHECK(sender == this); + + if (on_press_) + on_press_.Run(); + } + + private: + base::Closure on_press_; + + DISALLOW_COPY_AND_ASSIGN(PinButton); +}; + +} // namespace + +// static +const int LoginPinView::kButtonSeparatorSizeDp = 30; +// static +const int LoginPinView::kButtonSizeDp = 48; + +LoginPinView::TestApi::TestApi(LoginPinView* view) : view_(view) {} + +LoginPinView::TestApi::~TestApi() = default; + +views::View* LoginPinView::TestApi::GetButton(int number) const { + return view_->GetViewByID(GetViewIdForPinNumber(number)); +} + +views::View* LoginPinView::TestApi::GetBackspaceButton() const { + return view_->GetViewByID(kBackspaceButtonId); +} + +LoginPinView::LoginPinView(const OnPinKey& on_key, + const OnPinBackspace& on_backspace) + : on_key_(on_key), on_backspace_(on_backspace) { + DCHECK(on_key_); + DCHECK(on_backspace_); + + // Builds and returns a new view which contains a row of the PIN keyboard. + auto build_and_add_row = [this]() { + auto* row = new views::View(); + row->SetLayoutManager(new views::BoxLayout( + views::BoxLayout::kHorizontal, gfx::Insets(), kButtonSeparatorSizeDp)); + AddChildView(row); + return row; + }; + + SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, + gfx::Insets(), kButtonSeparatorSizeDp)); + + // 1-2-3 + auto* row = build_and_add_row(); + row->AddChildView(new PinButton(1, on_key_)); + row->AddChildView(new PinButton(2, on_key_)); + row->AddChildView(new PinButton(3, on_key_)); + + // 4-5-6 + row = build_and_add_row(); + row->AddChildView(new PinButton(4, on_key_)); + row->AddChildView(new PinButton(5, on_key_)); + row->AddChildView(new PinButton(6, on_key_)); + + // 7-8-9 + row = build_and_add_row(); + row->AddChildView(new PinButton(7, on_key_)); + row->AddChildView(new PinButton(8, on_key_)); + row->AddChildView(new PinButton(9, on_key_)); + + // 0-backspace + row = build_and_add_row(); + auto* spacer = new views::View(); + spacer->SetPreferredSize(gfx::Size(kButtonSizeDp, kButtonSizeDp)); + row->AddChildView(spacer); + row->AddChildView(new PinButton(0, on_key_)); + auto* backspace = new PinButton(base::ASCIIToUTF16("x"), on_backspace_); + backspace->set_id(kBackspaceButtonId); + row->AddChildView(backspace); +} + +LoginPinView::~LoginPinView() = default; + +const char* LoginPinView::GetClassName() const { + return kLoginPinViewClassName; +} + +bool LoginPinView::OnKeyPressed(const ui::KeyEvent& event) { + // TODO: figure out what to do here. + if (event.key_code() == ui::KeyboardCode::VKEY_RETURN) { + // TODO: Real pin. + // on_submit_.Run(base::ASCIIToUTF16("1111")); + return true; + } + + return false; +} + +} // namespace ash \ No newline at end of file
diff --git a/ash/login/ui/login_pin_view.h b/ash/login/ui/login_pin_view.h new file mode 100644 index 0000000..4c8c3d20 --- /dev/null +++ b/ash/login/ui/login_pin_view.h
@@ -0,0 +1,79 @@ +// 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 ASH_LOGIN_UI_LOGIN_PIN_VIEW_H_ +#define ASH_LOGIN_UI_LOGIN_PIN_VIEW_H_ + +#include "ash/ash_export.h" +#include "base/callback.h" +#include "base/macros.h" +#include "ui/views/view.h" + +namespace ash { + +// Implements a PIN keyboard. The class emits high-level events that can be used +// by the embedder. The PIN keyboard, while displaying letters, only emits +// numbers. +// +// The UI looks a little like this: +// _______ _______ _______ +// | 1 | | 2 | | 3 | +// | | | A B C | | D E F | +// ------- ------- ------- +// _______ _______ _______ +// | 1 | | 2 | | 3 | +// | G H I | | J K L | | M N O | +// ------- ------- ------- +// _______ _______ _______ +// | 1 | | 2 | | 3 | +// |P Q R S| | T U V | |W X Y Z| +// ------- ------- ------- +// _______ _______ +// | 0 | | <- | +// | + | | | +// ------- ------- +// +class ASH_EXPORT LoginPinView : public views::View { + public: + // Spacing between each pin button. + static const int kButtonSeparatorSizeDp; + // Size of each button. + static const int kButtonSizeDp; + + class ASH_EXPORT TestApi { + public: + explicit TestApi(LoginPinView* view); + ~TestApi(); + + views::View* GetButton(int number) const; + views::View* GetBackspaceButton() const; + + private: + LoginPinView* const view_; + }; + + using OnPinKey = base::RepeatingCallback<void(int value)>; + using OnPinBackspace = base::RepeatingClosure; + + // |on_key| is called whenever the user taps one of the pin buttons. + // |on_backspace| is called when the user wants to erase the most recently + // tapped key. Neither callback can be null. + explicit LoginPinView(const OnPinKey& on_key, + const OnPinBackspace& on_backspace); + ~LoginPinView() override; + + // views::View: + const char* GetClassName() const override; + bool OnKeyPressed(const ui::KeyEvent& event) override; + + private: + OnPinKey on_key_; + OnPinBackspace on_backspace_; + + DISALLOW_COPY_AND_ASSIGN(LoginPinView); +}; + +} // namespace ash + +#endif // ASH_LOGIN_UI_LOGIN_PIN_VIEW_H_
diff --git a/ash/login/ui/login_pin_view_unittest.cc b/ash/login/ui/login_pin_view_unittest.cc new file mode 100644 index 0000000..2c17d29 --- /dev/null +++ b/ash/login/ui/login_pin_view_unittest.cc
@@ -0,0 +1,118 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/login/ui/login_password_view.h" + +#include "ash/login/ui/login_pin_view.h" +#include "ash/login/ui/login_test_base.h" +#include "ui/events/test/event_generator.h" + +namespace ash { + +namespace { + +class LoginPinViewTest : public LoginTestBase { + protected: + LoginPinViewTest() = default; + ~LoginPinViewTest() override = default; + + // LoginScreenTest: + void SetUp() override { + LoginTestBase::SetUp(); + + view_ = new LoginPinView( + base::Bind(&LoginPinViewTest::OnPinKey, base::Unretained(this)), + base::Bind(&LoginPinViewTest::OnPinBackspace, base::Unretained(this))); + + ShowWidgetWithContent(view_); + } + + // Called when a password is submitted. + void OnPinKey(int value) { value_ = value; } + void OnPinBackspace() { backspace_ = true; } + + LoginPinView* view_ = nullptr; // Owned by test widget view hierarchy. + base::Optional<int> value_; + bool backspace_ = false; + + private: + DISALLOW_COPY_AND_ASSIGN(LoginPinViewTest); +}; + +} // namespace + +// Verifies that PIN submit works with 'Enter'. +TEST_F(LoginPinViewTest, ButtonsFireEvents) { + ui::test::EventGenerator& generator = GetEventGenerator(); + LoginPinView::TestApi test_api(view_); + + // Verify pin button events are emitted with the correct value. + for (int i = 0; i <= 9; ++i) { + test_api.GetButton(i)->RequestFocus(); + generator.PressKey(ui::KeyboardCode::VKEY_RETURN, ui::EF_NONE); + EXPECT_TRUE(value_.has_value()); + EXPECT_EQ(*value_, i); + value_.reset(); + } + + // Verify backspace events are emitted. + EXPECT_FALSE(backspace_); + test_api.GetBackspaceButton()->RequestFocus(); + generator.PressKey(ui::KeyboardCode::VKEY_RETURN, ui::EF_NONE); + EXPECT_TRUE(backspace_); +} + +// Validates buttons have the correct spacing. +TEST_F(LoginPinViewTest, ButtonSpacingAndSize) { + LoginPinView::TestApi test_api(view_); + + // Validate pin button size. + for (int i = 0; i <= 9; ++i) { + DCHECK_EQ(test_api.GetButton(i)->size().width(), + LoginPinView::kButtonSizeDp); + DCHECK_EQ(test_api.GetButton(i)->size().height(), + LoginPinView::kButtonSizeDp); + } + + // Validate backspace button size. + DCHECK_EQ(test_api.GetBackspaceButton()->size().width(), + LoginPinView::kButtonSizeDp); + DCHECK_EQ(test_api.GetBackspaceButton()->size().height(), + LoginPinView::kButtonSizeDp); + + // Record all the x/y coordinates of the buttons. + std::set<int> seen_x; + std::set<int> seen_y; + for (int i = 0; i <= 9; ++i) { + gfx::Rect screen_bounds = test_api.GetButton(i)->GetBoundsInScreen(); + seen_x.insert(screen_bounds.x()); + seen_y.insert(screen_bounds.y()); + } + seen_x.insert(test_api.GetBackspaceButton()->GetBoundsInScreen().x()); + seen_y.insert(test_api.GetBackspaceButton()->GetBoundsInScreen().y()); + + // Sort the coordinates so we can easily check the distance between them. + std::vector<int> sorted_x(seen_x.begin(), seen_x.end()); + std::vector<int> sorted_y(seen_y.begin(), seen_y.end()); + std::sort(sorted_x.begin(), sorted_x.end()); + std::sort(sorted_y.begin(), sorted_y.end()); + + // Validate each x or y coordinate has the correct distance between it and the + // next one. This is correct because we have already validated button size. + EXPECT_EQ(3u, sorted_x.size()); + for (size_t i = 0; i < sorted_x.size() - 1; ++i) { + EXPECT_EQ(sorted_x[i] + LoginPinView::kButtonSizeDp + + LoginPinView::kButtonSeparatorSizeDp, + sorted_x[i + 1]); + } + + EXPECT_EQ(4u, sorted_y.size()); + for (size_t i = 0; i < sorted_y.size() - 1; ++i) { + EXPECT_EQ(sorted_y[i] + LoginPinView::kButtonSizeDp + + LoginPinView::kButtonSeparatorSizeDp, + sorted_y[i + 1]); + } +} + +} // namespace ash \ No newline at end of file
diff --git a/ash/mus/window_manager.cc b/ash/mus/window_manager.cc index c2f1501..f05fd39 100644 --- a/ash/mus/window_manager.cc +++ b/ash/mus/window_manager.cc
@@ -34,7 +34,6 @@ #include "ash/wm/container_finder.h" #include "ash/wm/window_state.h" #include "base/memory/ptr_util.h" -#include "base/threading/sequenced_worker_pool.h" #include "services/service_manager/public/cpp/connector.h" #include "services/ui/common/accelerator_util.h" #include "services/ui/common/types.h" @@ -111,14 +110,12 @@ void WindowManager::Init( std::unique_ptr<aura::WindowTreeClient> window_tree_client, - const scoped_refptr<base::SequencedWorkerPool>& blocking_pool, std::unique_ptr<ShellDelegate> shell_delegate) { // Only create InputDeviceClient in MASH mode. For MUS mode WindowManager is // created by chrome, which creates InputDeviceClient. if (config_ == Config::MASH) input_device_client_ = base::MakeUnique<ui::InputDeviceClient>(); - blocking_pool_ = blocking_pool; DCHECK(window_manager_client_); DCHECK(!window_tree_client_); window_tree_client_ = std::move(window_tree_client); @@ -233,7 +230,6 @@ : new ShellDelegateMus(connector_); init_params.primary_window_tree_host = window_tree_host.release(); init_params.shell_port = shell_port; - init_params.blocking_pool = blocking_pool_.get(); Shell::CreateInstance(init_params); }
diff --git a/ash/mus/window_manager.h b/ash/mus/window_manager.h index ab1c560..2c3c5b3 100644 --- a/ash/mus/window_manager.h +++ b/ash/mus/window_manager.h
@@ -17,17 +17,12 @@ #include "ash/shell_delegate.h" #include "base/callback_forward.h" #include "base/macros.h" -#include "base/memory/ref_counted.h" #include "services/ui/common/types.h" #include "services/ui/public/interfaces/display/display_controller.mojom.h" #include "services/ui/public/interfaces/window_manager.mojom.h" #include "ui/aura/mus/window_manager_delegate.h" #include "ui/aura/mus/window_tree_client_delegate.h" -namespace base { -class SequencedWorkerPool; -} - namespace display { class Display; } @@ -78,7 +73,6 @@ ~WindowManager() override; void Init(std::unique_ptr<aura::WindowTreeClient> window_tree_client, - const scoped_refptr<base::SequencedWorkerPool>& blocking_pool, std::unique_ptr<ash::ShellDelegate> shell_delegate = nullptr); // Sets the callback that is run once the connection to mus is lost. If not @@ -231,8 +225,6 @@ std::map<uint16_t, AcceleratorHandler*> accelerator_handlers_; uint16_t next_accelerator_namespace_id_ = 0u; - scoped_refptr<base::SequencedWorkerPool> blocking_pool_; - // The ShellDelegate to install. This may be null, in which case // ShellDelegateMus is used. std::unique_ptr<ShellDelegate> shell_delegate_;
diff --git a/ash/mus/window_manager_application.cc b/ash/mus/window_manager_application.cc index b2148bf..5ab8e75 100644 --- a/ash/mus/window_manager_application.cc +++ b/ash/mus/window_manager_application.cc
@@ -55,15 +55,6 @@ // OnWillDestroyRootWindowController() is called (if it hasn't been already). window_manager_.reset(); - if (blocking_pool_) { - // Like BrowserThreadImpl, the goal is to make it impossible for ash to - // 'infinite loop' during shutdown, but to reasonably expect that all - // BLOCKING_SHUTDOWN tasks queued during shutdown get run. There's nothing - // particularly scientific about the number chosen. - const int kMaxNewShutdownBlockingTasks = 1000; - blocking_pool_->Shutdown(kMaxNewShutdownBlockingTasks); - } - statistics_provider_.reset(); ShutdownComponents(); } @@ -74,7 +65,6 @@ void WindowManagerApplication::InitWindowManager( std::unique_ptr<aura::WindowTreeClient> window_tree_client, - const scoped_refptr<base::SequencedWorkerPool>& blocking_pool, bool init_network_handler) { // Tests may have already set the WindowTreeClient. if (!aura::Env::GetInstance()->HasWindowTreeClient()) @@ -89,7 +79,7 @@ statistics_provider_->SetMachineStatistic("initial_locale", "en-US"); statistics_provider_->SetMachineStatistic("keyboard_layout", ""); - window_manager_->Init(std::move(window_tree_client), blocking_pool, + window_manager_->Init(std::move(window_tree_client), std::move(shell_delegate_)); } @@ -155,13 +145,8 @@ window_tree_client->ConnectAsWindowManager( automatically_create_display_roots); - const size_t kMaxNumberThreads = 3u; // Matches that of content. - const char kThreadNamePrefix[] = "MashBlocking"; - blocking_pool_ = new base::SequencedWorkerPool( - kMaxNumberThreads, kThreadNamePrefix, base::TaskPriority::USER_VISIBLE); const bool init_network_handler = true; - InitWindowManager(std::move(window_tree_client), blocking_pool_, - init_network_handler); + InitWindowManager(std::move(window_tree_client), init_network_handler); } void WindowManagerApplication::OnBindInterface(
diff --git a/ash/mus/window_manager_application.h b/ash/mus/window_manager_application.h index c9f45656..ca8a6b7 100644 --- a/ash/mus/window_manager_application.h +++ b/ash/mus/window_manager_application.h
@@ -14,7 +14,6 @@ #include "ash/public/interfaces/wallpaper.mojom.h" #include "ash/shell_delegate.h" #include "base/macros.h" -#include "base/memory/ref_counted.h" #include "mojo/public/cpp/bindings/binding.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/service.h" @@ -24,10 +23,6 @@ class WindowTreeClient; } -namespace base { -class SequencedWorkerPool; -} - namespace chromeos { namespace system { class ScopedFakeStatisticsProvider; @@ -74,7 +69,6 @@ // If |init_network_handler| is true, chromeos::NetworkHandler is initialized. void InitWindowManager( std::unique_ptr<aura::WindowTreeClient> window_tree_client, - const scoped_refptr<base::SequencedWorkerPool>& blocking_pool, bool init_network_handler); // Initializes lower-level OS-specific components (e.g. D-Bus services). @@ -93,9 +87,6 @@ std::unique_ptr<WindowManager> window_manager_; - // A blocking pool used by the WindowManager's shell; not used in tests. - scoped_refptr<base::SequencedWorkerPool> blocking_pool_; - std::unique_ptr<NetworkConnectDelegateMus> network_connect_delegate_; std::unique_ptr<chromeos::system::ScopedFakeStatisticsProvider> statistics_provider_;
diff --git a/ash/shell.cc b/ash/shell.cc index f12e6f4..fdc5bff 100644 --- a/ash/shell.cc +++ b/ash/shell.cc
@@ -816,8 +816,6 @@ base::MakeUnique<NightLightController>(session_controller_.get()); } - blocking_pool_ = init_params.blocking_pool; - wallpaper_delegate_ = shell_delegate_->CreateWallpaperDelegate(); // Can be null in tests. @@ -918,8 +916,8 @@ : 0); display_initialized = true; } - display_color_manager_.reset(new DisplayColorManager( - display_configurator_.get(), init_params.blocking_pool)); + display_color_manager_ = + base::MakeUnique<DisplayColorManager>(display_configurator_.get()); if (!display_initialized) display_manager_->InitDefaultDisplay();
diff --git a/ash/shell.h b/ash/shell.h index 08bb804c..749e17e 100644 --- a/ash/shell.h +++ b/ash/shell.h
@@ -39,10 +39,6 @@ class WindowTreeClient; } -namespace base { -class SequencedWorkerPool; -} - namespace chromeos { class AudioA11yController; } @@ -833,8 +829,6 @@ base::ObserverList<ShellObserver> shell_observers_; - scoped_refptr<base::SequencedWorkerPool> blocking_pool_; - DISALLOW_COPY_AND_ASSIGN(Shell); };
diff --git a/ash/shell/content/client/shell_browser_main_parts.cc b/ash/shell/content/client/shell_browser_main_parts.cc index e3ec2f4..fae6a9f 100644 --- a/ash/shell/content/client/shell_browser_main_parts.cc +++ b/ash/shell/content/client/shell_browser_main_parts.cc
@@ -24,7 +24,6 @@ #include "base/threading/thread_restrictions.h" #include "chromeos/audio/cras_audio_handler.h" #include "chromeos/dbus/dbus_thread_manager.h" -#include "content/public/browser/browser_thread.h" #include "content/public/browser/context_factory.h" #include "content/public/common/content_switches.h" #include "content/shell/browser/shell_browser_context.h" @@ -130,7 +129,6 @@ init_params.delegate = delegate_; init_params.context_factory = content::GetContextFactory(); init_params.context_factory_private = content::GetContextFactoryPrivate(); - init_params.blocking_pool = content::BrowserThread::GetBlockingPool(); ash::Shell::CreateInstance(init_params); // Initialize session controller client and create fake user sessions. The
diff --git a/ash/shell_init_params.h b/ash/shell_init_params.h index 1495d29..e69834c 100644 --- a/ash/shell_init_params.h +++ b/ash/shell_init_params.h
@@ -11,10 +11,6 @@ class WindowTreeHostMus; } -namespace base { -class SequencedWorkerPool; -} - namespace ui { class ContextFactory; class ContextFactoryPrivate; @@ -36,7 +32,6 @@ ShellDelegate* delegate = nullptr; ui::ContextFactory* context_factory = nullptr; ui::ContextFactoryPrivate* context_factory_private = nullptr; - base::SequencedWorkerPool* blocking_pool = nullptr; }; } // namespace ash
diff --git a/ash/system/night_light/night_light_controller.cc b/ash/system/night_light/night_light_controller.cc index e5f68eaa..e84b5ce 100644 --- a/ash/system/night_light/night_light_controller.cc +++ b/ash/system/night_light/night_light_controller.cc
@@ -110,8 +110,8 @@ // static bool NightLightController::IsFeatureEnabled() { - return base::CommandLine::ForCurrentProcess()->HasSwitch( - ash::switches::kAshEnableNightLight); + return !base::CommandLine::ForCurrentProcess()->HasSwitch( + ash::switches::kAshDisableNightLight); } // static
diff --git a/ash/system/night_light/night_light_controller_unittest.cc b/ash/system/night_light/night_light_controller_unittest.cc index 3745641..c3427a1f 100644 --- a/ash/system/night_light/night_light_controller_unittest.cc +++ b/ash/system/night_light/night_light_controller_unittest.cc
@@ -7,7 +7,6 @@ #include <cmath> #include <limits> -#include "ash/ash_switches.h" #include "ash/public/cpp/ash_pref_names.h" #include "ash/public/cpp/config.h" #include "ash/public/cpp/session_types.h" @@ -18,7 +17,6 @@ #include "ash/test/test_shell_delegate.h" #include "base/bind.h" #include "base/callback_forward.h" -#include "base/command_line.h" #include "base/macros.h" #include "components/prefs/testing_pref_service.h" #include "ui/compositor/layer.h" @@ -127,10 +125,6 @@ // ash::test::AshTestBase: void SetUp() override { - // Explicitly enable the NightLight feature for the tests. - base::CommandLine::ForCurrentProcess()->AppendSwitch( - ash::switches::kAshEnableNightLight); - test::AshTestBase::SetUp(); CreateTestUserSessions(); Shell::RegisterPrefs(user1_pref_service_.registry());
diff --git a/ash/system/night_light/tray_night_light_unittest.cc b/ash/system/night_light/tray_night_light_unittest.cc index 1491771c..3a8ca56 100644 --- a/ash/system/night_light/tray_night_light_unittest.cc +++ b/ash/system/night_light/tray_night_light_unittest.cc
@@ -4,7 +4,6 @@ #include "ash/system/night_light/tray_night_light.h" -#include "ash/ash_switches.h" #include "ash/public/cpp/config.h" #include "ash/shell.h" #include "ash/system/night_light/night_light_controller.h" @@ -12,7 +11,6 @@ #include "ash/test/ash_test_base.h" #include "ash/test/ash_test_helper.h" #include "ash/test/test_shell_delegate.h" -#include "base/command_line.h" #include "base/macros.h" #include "components/prefs/testing_pref_service.h" @@ -29,10 +27,6 @@ // ash::test::AshTestBase: void SetUp() override { - // Explicitly enable the NightLight feature for the tests. - base::CommandLine::ForCurrentProcess()->AppendSwitch( - ash::switches::kAshEnableNightLight); - test::AshTestBase::SetUp(); GetSessionControllerClient()->Reset(); GetSessionControllerClient()->AddUserSession(kFakeUserEmail);
diff --git a/ash/system/tiles/tray_tiles_unittest.cc b/ash/system/tiles/tray_tiles_unittest.cc index 6599f48..50a4920 100644 --- a/ash/system/tiles/tray_tiles_unittest.cc +++ b/ash/system/tiles/tray_tiles_unittest.cc
@@ -4,14 +4,12 @@ #include "ash/system/tiles/tray_tiles.h" -#include "ash/ash_switches.h" #include "ash/system/night_light/night_light_controller.h" #include "ash/system/night_light/night_light_toggle_button.h" #include "ash/system/tiles/tiles_default_view.h" #include "ash/system/tray/system_menu_button.h" #include "ash/test/ash_test_base.h" #include "ash/test/test_session_controller_client.h" -#include "base/command_line.h" #include "components/user_manager/user_type.h" #include "ui/views/view.h" @@ -26,10 +24,6 @@ ~TrayTilesTest() override {} void SetUp() override { - // Explicitly enable the NightLight feature for the tests. - base::CommandLine::ForCurrentProcess()->AppendSwitch( - ash::switches::kAshEnableNightLight); - test::NoSessionAshTestBase::SetUp(); tray_tiles_.reset(new TrayTiles(GetPrimarySystemTray())); }
diff --git a/ash/test/ash_test_environment.h b/ash/test/ash_test_environment.h index 55b03c8..7f5621f 100644 --- a/ash/test/ash_test_environment.h +++ b/ash/test/ash_test_environment.h
@@ -8,10 +8,6 @@ #include <memory> #include <string> -namespace base { -class SequencedWorkerPool; -} - namespace ash { namespace test { @@ -40,8 +36,6 @@ virtual void SetUp() {} virtual void TearDown() {} - virtual base::SequencedWorkerPool* GetBlockingPool() = 0; - virtual std::unique_ptr<AshTestViewsDelegate> CreateViewsDelegate() = 0; protected:
diff --git a/ash/test/ash_test_environment_content.cc b/ash/test/ash_test_environment_content.cc index 6b48982..9e484a3a 100644 --- a/ash/test/ash_test_environment_content.cc +++ b/ash/test/ash_test_environment_content.cc
@@ -7,7 +7,6 @@ #include "ash/test/ash_test_views_delegate.h" #include "ash/test/content/test_shell_content_state.h" #include "base/memory/ptr_util.h" -#include "content/public/browser/browser_thread.h" #include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/web_contents_tester.h" @@ -62,10 +61,6 @@ ShellContentState::DestroyInstance(); } -base::SequencedWorkerPool* AshTestEnvironmentContent::GetBlockingPool() { - return content::BrowserThread::GetBlockingPool(); -} - std::unique_ptr<AshTestViewsDelegate> AshTestEnvironmentContent::CreateViewsDelegate() { return base::MakeUnique<AshTestViewsDelegateContent>();
diff --git a/ash/test/ash_test_environment_content.h b/ash/test/ash_test_environment_content.h index 742444e..dc4ff6b6 100644 --- a/ash/test/ash_test_environment_content.h +++ b/ash/test/ash_test_environment_content.h
@@ -36,7 +36,6 @@ // AshTestEnvironment: void SetUp() override; void TearDown() override; - base::SequencedWorkerPool* GetBlockingPool() override; std::unique_ptr<AshTestViewsDelegate> CreateViewsDelegate() override; private:
diff --git a/ash/test/ash_test_environment_default.cc b/ash/test/ash_test_environment_default.cc index 1d2ddb3b..225b6def 100644 --- a/ash/test/ash_test_environment_default.cc +++ b/ash/test/ash_test_environment_default.cc
@@ -8,8 +8,6 @@ #include "base/memory/ptr_util.h" #include "base/run_loop.h" #include "base/test/scoped_task_environment.h" -#include "base/test/sequenced_worker_pool_owner.h" -#include "base/threading/sequenced_worker_pool.h" namespace ash { namespace test { @@ -23,27 +21,15 @@ ~AshTestEnvironmentDefault() override { base::RunLoop().RunUntilIdle(); - blocking_pool_owner_.reset(); - base::RunLoop().RunUntilIdle(); } // AshTestEnvironment: - base::SequencedWorkerPool* GetBlockingPool() override { - if (!blocking_pool_owner_) { - const size_t kMaxNumberThreads = 3u; // Matches that of content. - const char kThreadNamePrefix[] = "AshBlocking"; - blocking_pool_owner_ = base::MakeUnique<base::SequencedWorkerPoolOwner>( - kMaxNumberThreads, kThreadNamePrefix); - } - return blocking_pool_owner_->pool().get(); - } std::unique_ptr<AshTestViewsDelegate> CreateViewsDelegate() override { return base::MakeUnique<AshTestViewsDelegate>(); } private: base::test::ScopedTaskEnvironment scoped_task_environment_; - std::unique_ptr<base::SequencedWorkerPoolOwner> blocking_pool_owner_; DISALLOW_COPY_AND_ASSIGN(AshTestEnvironmentDefault); };
diff --git a/ash/test/ash_test_helper.cc b/ash/test/ash_test_helper.cc index b5b6f5d..ba4fc787 100644 --- a/ash/test/ash_test_helper.cc +++ b/ash/test/ash_test_helper.cc
@@ -342,8 +342,7 @@ // additional tray items) that can make for flaky tests. const bool init_network_handler = false; window_manager_app_->InitWindowManager( - window_tree_client_setup_.OwnWindowTreeClient(), - ash_test_environment_->GetBlockingPool(), init_network_handler); + window_tree_client_setup_.OwnWindowTreeClient(), init_network_handler); aura::WindowTreeClient* window_tree_client = window_manager_app_->window_manager()->window_tree_client(); @@ -368,7 +367,6 @@ init_params.delegate = test_shell_delegate_; init_params.context_factory = context_factory; init_params.context_factory_private = context_factory_private; - init_params.blocking_pool = ash_test_environment_->GetBlockingPool(); Shell::CreateInstance(init_params); }
diff --git a/base/trace_event/memory_infra_background_whitelist.cc b/base/trace_event/memory_infra_background_whitelist.cc index a6685f92..576f0a0 100644 --- a/base/trace_event/memory_infra_background_whitelist.cc +++ b/base/trace_event/memory_infra_background_whitelist.cc
@@ -26,9 +26,11 @@ "JavaHeap", "LevelDB", "LeveldbValueStore", + "LocalStorage", "Malloc", "MemoryCache", "MojoHandleTable", + "MojoLevelDB", "PartitionAlloc", "ProcessMemoryMetrics", "Skia", @@ -55,11 +57,14 @@ "discardable", "discardable/child_0x?", "dom_storage/0x?/cache_size", + "dom_storage/localstorage_0x?/cache_size", + "dom_storage/localstorage_0x?/leveldb", "dom_storage/session_storage_0x?", "java_heap", "java_heap/allocated_objects", "leveldb/index_db/0x?", "leveldb/leveldb_proto/0x?", + "leveldb/mojo/0x?", "leveldb/value_store/Extensions.Database.Open.Settings/0x?", "leveldb/value_store/Extensions.Database.Open.Rules/0x?", "leveldb/value_store/Extensions.Database.Open.State/0x?",
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py index 4d84acf4..168f513 100755 --- a/build/fuchsia/test_runner.py +++ b/build/fuchsia/test_runner.py
@@ -133,6 +133,11 @@ autorun_file.write('#!/bin/sh\n') autorun_file.write('/system/' + os.path.basename(test_name)) autorun_file.write(' --test-launcher-retry-limit=0') + if int(os.environ.get('CHROME_HEADLESS', 0)) != 0: + # When running on bots (without KVM) execution is quite slow. The test + # launcher times out a subprocess after 45s which can be too short. Make the + # timeout 10x longer. + autorun_file.write(' --test-launcher-timeout=450000') if test_launcher_filter_file: test_launcher_filter_file = os.path.normpath( os.path.join(output_directory, test_launcher_filter_file))
diff --git a/build/toolchain/toolchain.gni b/build/toolchain/toolchain.gni index 70e0fa9..63ecdbd 100644 --- a/build/toolchain/toolchain.gni +++ b/build/toolchain/toolchain.gni
@@ -16,12 +16,14 @@ allow_posix_link_time_opt = is_clang && target_os == "linux" && !is_chromeos && target_cpu == "x64" && is_official_build +} - # If used with allow_posix_link_time_opt, it enables the experimental support - # of ThinLTO that links 3x-10x faster but (as of now) does not have all the - # important optimizations such us devirtualization implemented. See also +declare_args() { + # If used with allow_posix_link_time_opt, it enables support for ThinLTO, + # which links 3x-10x faster than full LTO. See also # http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html - use_thin_lto = false + use_thin_lto = allow_posix_link_time_opt && target_os == "linux" && + !is_chromeos && target_cpu == "x64" # If this is set to true, or if LLVM_FORCE_HEAD_REVISION is set to 1 # in the environment, we use the revision in the llvm repo to determine
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc index 8e36f02..a1d5a33 100644 --- a/cc/output/gl_renderer.cc +++ b/cc/output/gl_renderer.cc
@@ -561,6 +561,8 @@ // TODO(enne): Do we need to reinitialize all of this state per frame? ReinitializeGLState(); + + num_triangles_drawn_ = 0; } void GLRenderer::DoDrawQuad(const DrawQuad* quad, @@ -1811,6 +1813,7 @@ SetShaderMatrix(current_frame()->projection_matrix * quad->shared_quad_state->quad_to_target_transform); gl_->DrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0); + num_triangles_drawn_ += 2; } } @@ -2052,6 +2055,7 @@ quad->shared_quad_state->quad_to_target_transform); gl_->DrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0); + num_triangles_drawn_ += 2; } void GLRenderer::DrawYUVVideoQuad(const YUVVideoDrawQuad* quad, @@ -2318,6 +2322,7 @@ gl_->DrawElements(GL_TRIANGLES, 6 * static_cast<int>(draw_cache_.matrix_data.size()), GL_UNSIGNED_SHORT, 0); + num_triangles_drawn_ += 2 * static_cast<int>(draw_cache_.matrix_data.size()); // Draw the border if requested. if (gl_composited_texture_quad_border_) { @@ -2475,6 +2480,9 @@ ScheduleCALayers(); ScheduleDCLayers(); ScheduleOverlays(); + + TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("cc.debug.triangles"), + "Triangles Drawn", num_triangles_drawn_); } void GLRenderer::FinishDrawingQuadList() { @@ -2606,6 +2614,7 @@ gl_->DrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, reinterpret_cast<const void*>(0)); + num_triangles_drawn_ += 2; } void GLRenderer::DrawQuadGeometry(const gfx::Transform& projection_matrix, @@ -2617,6 +2626,7 @@ SetShaderMatrix(projection_matrix * quad_rect_matrix); gl_->DrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0); + num_triangles_drawn_ += 2; } void GLRenderer::SwapBuffers(std::vector<ui::LatencyInfo> latency_info) {
diff --git a/cc/output/gl_renderer.h b/cc/output/gl_renderer.h index e00b475f..ca853e3 100644 --- a/cc/output/gl_renderer.h +++ b/cc/output/gl_renderer.h
@@ -364,6 +364,8 @@ unsigned offscreen_stencil_renderbuffer_id_ = 0; gfx::Size offscreen_stencil_renderbuffer_size_; + unsigned num_triangles_drawn_ = 0; + base::WeakPtrFactory<GLRenderer> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(GLRenderer);
diff --git a/cc/paint/display_item_list.cc b/cc/paint/display_item_list.cc index 1e4b6c0..8714fb5 100644 --- a/cc/paint/display_item_list.cc +++ b/cc/paint/display_item_list.cc
@@ -39,7 +39,10 @@ } // namespace -DisplayItemList::DisplayItemList() = default; +DisplayItemList::DisplayItemList() { + visual_rects_.reserve(1024); + begin_paired_indices_.reserve(32); +} DisplayItemList::~DisplayItemList() = default; @@ -50,16 +53,13 @@ return; std::vector<size_t> indices = rtree_.Search(canvas_playback_rect); - if (!indices.empty()) { - paint_op_buffer_.PlaybackRanges(visual_rects_range_starts_, indices, canvas, - callback); - } + paint_op_buffer_.Playback(canvas, callback, &indices); } void DisplayItemList::GrowCurrentBeginItemVisualRect( const gfx::Rect& visual_rect) { if (!begin_paired_indices_.empty()) - visual_rects_[begin_paired_indices_.back()].Union(visual_rect); + visual_rects_[begin_paired_indices_.back().first].Union(visual_rect); } void DisplayItemList::Finalize() { @@ -74,9 +74,9 @@ rtree_.Build(visual_rects_); if (!retain_visual_rects_) - // This clears both the vector and the vector's capacity, since - // visual_rects won't be used anymore. - std::vector<gfx::Rect>().swap(visual_rects_); + visual_rects_.clear(); + visual_rects_.shrink_to_fit(); + begin_paired_indices_.shrink_to_fit(); } size_t DisplayItemList::BytesUsed() const { @@ -109,15 +109,10 @@ if (include_items) { state->BeginArray("items"); - DCHECK_EQ(visual_rects_.size(), visual_rects_range_starts_.size()); - for (size_t i = 0; i < visual_rects_range_starts_.size(); ++i) { - size_t range_start = visual_rects_range_starts_[i]; + for (size_t i = 0; i < paint_op_buffer_.size(); ++i) { gfx::Rect visual_rect = visual_rects_[i]; state->BeginDictionary(); - state->SetString("name", "PaintOpBufferRange"); - state->SetInteger("rangeStart", base::saturated_cast<int>(range_start)); - state->BeginArray("visualRect"); state->AppendInteger(visual_rect.x()); state->AppendInteger(visual_rect.y()); @@ -125,16 +120,11 @@ state->AppendInteger(visual_rect.height()); state->EndArray(); - // The RTree bounds are expanded a bunch so that when we look at the items - // in traces we can see if they are having an impact outside the visual - // rect which would be wrong. - gfx::Rect expanded_rect = rtree_.GetBounds(); - expanded_rect.Inset(-1000, -1000); - SkPictureRecorder recorder; SkCanvas* canvas = - recorder.beginRecording(gfx::RectToSkRect(expanded_rect)); - paint_op_buffer_.PlaybackRanges(visual_rects_range_starts_, {i}, canvas); + recorder.beginRecording(gfx::RectToSkRect(rtree_.GetBounds())); + std::vector<size_t> indices{i}; + paint_op_buffer_.Playback(canvas, nullptr, &indices); sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); std::string b64_picture; @@ -162,7 +152,6 @@ PictureDebugUtil::SerializeAsBase64(picture.get(), &b64_picture); state->SetString("skp64", b64_picture); } - return state; } @@ -204,7 +193,6 @@ image_map_.Reset(); paint_op_buffer_.Reset(); visual_rects_.clear(); - visual_rects_range_starts_.clear(); begin_paired_indices_.clear(); current_range_start_ = 0; in_paired_begin_count_ = 0;
diff --git a/cc/paint/display_item_list.h b/cc/paint/display_item_list.h index f74456e..a115c90 100644 --- a/cc/paint/display_item_list.h +++ b/cc/paint/display_item_list.h
@@ -45,26 +45,28 @@ PaintOpBuffer* StartPaint() { DCHECK(!in_painting_); in_painting_ = true; - current_range_start_ = paint_op_buffer_.size(); return &paint_op_buffer_; } void EndPaintOfUnpaired(const gfx::Rect& visual_rect) { - if (paint_op_buffer_.size() != current_range_start_) { - visual_rects_.push_back(visual_rect); - visual_rects_range_starts_.push_back(current_range_start_); - GrowCurrentBeginItemVisualRect(visual_rect); - } - in_painting_ = false; + + // Empty paint item. + if (visual_rects_.size() == paint_op_buffer_.size()) + return; + + while (visual_rects_.size() < paint_op_buffer_.size()) + visual_rects_.push_back(visual_rect); + GrowCurrentBeginItemVisualRect(visual_rect); } void EndPaintOfPairedBegin(const gfx::Rect& visual_rect = gfx::Rect()) { - DCHECK_NE(current_range_start_, paint_op_buffer_.size()); - size_t visual_rect_index = visual_rects_.size(); - visual_rects_.push_back(visual_rect); - visual_rects_range_starts_.push_back(current_range_start_); - begin_paired_indices_.push_back(visual_rect_index); + DCHECK_NE(visual_rects_.size(), paint_op_buffer_.size()); + size_t count = paint_op_buffer_.size() - visual_rects_.size(); + for (size_t i = 0; i < count; ++i) + visual_rects_.push_back(visual_rect); + begin_paired_indices_.push_back( + std::make_pair(visual_rects_.size() - 1, count)); in_painting_ = false; in_paired_begin_count_++; @@ -74,15 +76,29 @@ DCHECK_NE(current_range_start_, paint_op_buffer_.size()); DCHECK(in_paired_begin_count_); - // Copy the visual rect of the matching kPairStart. - size_t last_begin_index = begin_paired_indices_.back(); + size_t last_begin_index = begin_paired_indices_.back().first; + size_t last_begin_count = begin_paired_indices_.back().second; + DCHECK_GT(last_begin_count, 0u); + DCHECK_GE(last_begin_index, last_begin_count - 1); + + // Copy the visual rect at |last_begin_index| to all indices that constitute + // the begin item. Note that because we possibly reallocate the + // |visual_rects_| buffer below, we need an actual copy instead of a const + // reference which can become dangling. + auto visual_rect = visual_rects_[last_begin_index]; + for (size_t i = last_begin_index - last_begin_count + 1; + i < last_begin_index; ++i) { + visual_rects_[i] = visual_rect; + } begin_paired_indices_.pop_back(); - visual_rects_.push_back(visual_rects_[last_begin_index]); - visual_rects_range_starts_.push_back(current_range_start_); + + // Copy the visual rect of the matching begin item to the end item(s). + while (visual_rects_.size() < paint_op_buffer_.size()) + visual_rects_.push_back(visual_rect); // The block that ended needs to be included in the bounds of the enclosing // block. - GrowCurrentBeginItemVisualRect(visual_rects_[last_begin_index]); + GrowCurrentBeginItemVisualRect(visual_rect); in_painting_ = false; in_paired_begin_count_--; @@ -93,9 +109,6 @@ int NumSlowPaths() const { return paint_op_buffer_.numSlowPaths(); } - // This gives the number of visual rect ranges, which is the number of - // discrete sets of PaintOps which could be rastered from. - size_t size() const { return visual_rects_range_starts_.size(); } // This gives the total number of PaintOps. size_t op_count() const { return paint_op_buffer_.size(); } size_t BytesUsed() const; @@ -149,17 +162,14 @@ PaintOpBuffer paint_op_buffer_; // The visual rects associated with each of the display items in the - // display item list. There is one rect per range in - // visual_rects_range_starts_. These rects are intentionally kept separate - // because they are used to decide which ops to walk for raster. + // display item list. These rects are intentionally kept separate because they + // are used to decide which ops to walk for raster. std::vector<gfx::Rect> visual_rects_; - // For each Rect in visual_rects_, this is the start of the range of - // PaintOps in the PaintOpBuffer that the Rect describes. The range ends - // at the start of the next index in the array. - std::vector<size_t> visual_rects_range_starts_; - // A stack of indices into the |visual_rects_| for each paired begin range - // that hasn't been closed. - std::vector<size_t> begin_paired_indices_; + // A stack of pairs of indices and counts. The indices are into the + // |visual_rects_| for each paired begin range that hasn't been closed. The + // counts refer to the number of visual rects in that begin sequence that end + // with the index. + std::vector<std::pair<size_t, size_t>> begin_paired_indices_; // While recording a range of ops, this is the position in the PaintOpBuffer // where the recording started. size_t current_range_start_ = 0;
diff --git a/cc/paint/display_item_list_unittest.cc b/cc/paint/display_item_list_unittest.cc index 7d71786d..6250247 100644 --- a/cc/paint/display_item_list_unittest.cc +++ b/cc/paint/display_item_list_unittest.cc
@@ -115,9 +115,8 @@ list->StartPaint(); list->EndPaintOfUnpaired(layer_rect); } - // No ops, no visual rect. + // No ops. EXPECT_EQ(0u, list->op_count()); - EXPECT_EQ(0u, list->size()); { PaintOpBuffer* buffer = list->StartPaint(); @@ -127,8 +126,6 @@ } // Two ops. EXPECT_EQ(2u, list->op_count()); - // One visual rect. - EXPECT_EQ(1u, list->size()); } TEST(DisplayItemListTest, ClipPairedRange) { @@ -504,22 +501,14 @@ // The items list has 3 things in it since we built 3 visual rects. ASSERT_TRUE(params_dict->GetList("items", &list)); - EXPECT_EQ(3u, list->GetSize()); + EXPECT_EQ(6u, list->GetSize()); - // This is determined by the number of ops we pushed in each range above. - // Ex. we pushed 2 ops in the first range, so the 2nd range starts at 2. - size_t range_starts[] = {0, 2, 5}; - - for (int i = 0; i < 3; ++i) { + for (int i = 0; i < 6; ++i) { const base::DictionaryValue* item_dict; const base::ListValue* visual_rect_list; ASSERT_TRUE(list->GetDictionary(i, &item_dict)); - // The first visual rect range starts at the beginning of the buffer. - EXPECT_TRUE(item_dict->GetDouble("rangeStart", &d) && - d == range_starts[i]) - << d; // The SkPicture for each item exists. EXPECT_TRUE( item_dict->GetString("skp64", static_cast<std::string*>(nullptr))); @@ -563,7 +552,6 @@ TEST(DisplayItemListTest, SizeEmpty) { auto list = make_scoped_refptr(new DisplayItemList); - EXPECT_EQ(0u, list->size()); EXPECT_EQ(0u, list->op_count()); } @@ -575,7 +563,6 @@ buffer->push<DrawRectOp>(gfx::RectToSkRect(drawing_bounds), PaintFlags()); list->EndPaintOfUnpaired(drawing_bounds); } - EXPECT_EQ(1u, list->size()); EXPECT_EQ(1u, list->op_count()); } @@ -594,7 +581,6 @@ buffer->push<RestoreOp>(); list->EndPaintOfPairedEnd(); } - EXPECT_EQ(2u, list->size()); EXPECT_EQ(3u, list->op_count()); } @@ -610,7 +596,6 @@ list->EndPaintOfUnpaired(drawing_bounds); } - EXPECT_EQ(1u, list->size()); EXPECT_EQ(1u, list->op_count()); EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(0)); } @@ -634,10 +619,10 @@ list->EndPaintOfPairedEnd(); } - EXPECT_EQ(2u, list->size()); EXPECT_EQ(3u, list->op_count()); EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(0)); EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(1)); + EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(2)); } TEST(DisplayItemListTest, AppendVisualRectEmptyBlockContainingEmptyBlock) { @@ -671,12 +656,12 @@ list->EndPaintOfPairedEnd(); } - EXPECT_EQ(4u, list->size()); EXPECT_EQ(5u, list->op_count()); EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(0)); EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(1)); EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(2)); EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(3)); + EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(4)); } TEST(DisplayItemListTest, AppendVisualRectBlockContainingDrawing) { @@ -706,11 +691,11 @@ list->EndPaintOfPairedEnd(); } - EXPECT_EQ(3u, list->size()); EXPECT_EQ(4u, list->op_count()); EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(0)); EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(1)); EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(2)); + EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(3)); } TEST(DisplayItemListTest, AppendVisualRectBlockContainingEscapedDrawing) { @@ -740,11 +725,11 @@ list->EndPaintOfPairedEnd(); } - EXPECT_EQ(3u, list->size()); EXPECT_EQ(4u, list->op_count()); EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(0)); EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(1)); EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(2)); + EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(3)); } TEST(DisplayItemListTest, @@ -783,12 +768,12 @@ list->EndPaintOfPairedEnd(); } - EXPECT_EQ(4u, list->size()); EXPECT_EQ(5u, list->op_count()); EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(0)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(1)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(2)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(3)); + EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(4)); } TEST(DisplayItemListTest, AppendVisualRectTwoBlocksTwoDrawings) { @@ -839,16 +824,17 @@ list->EndPaintOfPairedEnd(); } - EXPECT_EQ(6u, list->size()); EXPECT_EQ(8u, list->op_count()); gfx::Rect merged_drawing_bounds = gfx::Rect(drawing_a_bounds); merged_drawing_bounds.Union(drawing_b_bounds); EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(0)); - EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(1)); - EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(2)); + EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(1)); + EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(2)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(3)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(4)); - EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(5)); + EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(5)); + EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(6)); + EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(7)); } TEST(DisplayItemListTest, @@ -901,16 +887,17 @@ list->EndPaintOfPairedEnd(); } - EXPECT_EQ(6u, list->size()); EXPECT_EQ(8u, list->op_count()); gfx::Rect merged_drawing_bounds = gfx::Rect(drawing_a_bounds); merged_drawing_bounds.Union(drawing_b_bounds); EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(0)); - EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(1)); - EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(2)); + EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(1)); + EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(2)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(3)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(4)); - EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(5)); + EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(5)); + EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(6)); + EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(7)); } TEST(DisplayItemListTest, @@ -963,16 +950,17 @@ list->EndPaintOfPairedEnd(); } - EXPECT_EQ(6u, list->size()); EXPECT_EQ(8u, list->op_count()); gfx::Rect merged_drawing_bounds = gfx::Rect(drawing_a_bounds); merged_drawing_bounds.Union(drawing_b_bounds); EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(0)); - EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(1)); - EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(2)); + EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(1)); + EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(2)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(3)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(4)); - EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(5)); + EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(5)); + EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(6)); + EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(7)); } TEST(DisplayItemListTest, @@ -1025,16 +1013,17 @@ list->EndPaintOfPairedEnd(); } - EXPECT_EQ(6u, list->size()); EXPECT_EQ(8u, list->op_count()); gfx::Rect merged_drawing_bounds = gfx::Rect(drawing_a_bounds); merged_drawing_bounds.Union(drawing_b_bounds); EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(0)); - EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(1)); - EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(2)); + EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(1)); + EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(2)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(3)); EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(4)); - EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(5)); + EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(5)); + EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(6)); + EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(7)); } } // namespace cc
diff --git a/cc/paint/paint_op_buffer.cc b/cc/paint/paint_op_buffer.cc index 5f08b50..c7daf0a 100644 --- a/cc/paint/paint_op_buffer.cc +++ b/cc/paint/paint_op_buffer.cc
@@ -334,7 +334,7 @@ const SkMatrix& original_ctm) { // Don't use drawPicture here, as it adds an implicit clip. auto* op = static_cast<const DrawRecordOp*>(base_op); - op->record->playback(canvas); + op->record->Playback(canvas); } void DrawRectOp::RasterWithFlags(const PaintOpWithFlags* base_op, @@ -600,57 +600,6 @@ num_slow_paths_ = 0; } -static const PaintOp* NextOp(const std::vector<size_t>& range_starts, - const std::vector<size_t>& range_indices, - base::StackVector<const PaintOp*, 3>* stack_ptr, - PaintOpBuffer::Iterator* iter, - size_t* range_index) { - auto& stack = *stack_ptr; - if (stack->size()) { - const PaintOp* op = stack->front(); - // Shift paintops forward - stack->erase(stack->begin()); - return op; - } - if (!*iter) - return nullptr; - - const size_t active_range = range_indices[*range_index]; - DCHECK_GE(iter->op_idx(), range_starts[active_range]); - - // This grabs the PaintOp from the current iterator position, and advances it - // to the next position immediately. We'll see we reached the end of the - // buffer on the next call to this method. - const PaintOp* op = **iter; - ++*iter; - - if (active_range + 1 == range_starts.size()) { - // In the last possible range, so let the iter go right to the end of the - // buffer. - return op; - } - - const size_t range_end = range_starts[active_range + 1]; - DCHECK_LE(iter->op_idx(), range_end); - if (iter->op_idx() < range_end) { - // Still inside the range, so let the iter be. - return op; - } - - if (*range_index + 1 == range_indices.size()) { - // We're now past the last range that we want to iterate. - *iter = iter->end(); - return op; - } - - // Move to the next range. - ++(*range_index); - size_t next_range_start = range_starts[range_indices[*range_index]]; - while (iter->op_idx() < next_range_start) - ++(*iter); - return op; -} - // When |op| is a nested PaintOpBuffer, this returns the PaintOp inside // that buffer if the buffer contains a single drawing op, otherwise it // returns null. This searches recursively if the PaintOpBuffer contains only @@ -677,34 +626,13 @@ return op; } -void PaintOpBuffer::playback(SkCanvas* canvas, - SkPicture::AbortCallback* callback) const { - static auto* zero = new std::vector<size_t>({0}); - // Treats the entire PaintOpBuffer as a single range. - PlaybackRanges(*zero, *zero, canvas, callback); -} - -void PaintOpBuffer::PlaybackRanges(const std::vector<size_t>& range_starts, - const std::vector<size_t>& range_indices, - SkCanvas* canvas, - SkPicture::AbortCallback* callback) const { +void PaintOpBuffer::Playback(SkCanvas* canvas, + SkPicture::AbortCallback* callback, + const std::vector<size_t>* indices) const { if (!op_count_) return; - -#if DCHECK_IS_ON() - DCHECK(!range_starts.empty()); // Don't call this then. - DCHECK(!range_indices.empty()); // Don't call this then. - DCHECK_EQ(0u, range_starts[0]); - for (size_t i = 1; i < range_starts.size(); ++i) { - DCHECK_GT(range_starts[i], range_starts[i - 1]); - DCHECK_LT(range_starts[i], op_count_); - } - DCHECK_LT(range_indices[0], range_starts.size()); - for (size_t i = 1; i < range_indices.size(); ++i) { - DCHECK_GT(range_indices[i], range_indices[i - 1]); - DCHECK_LT(range_indices[i], range_starts.size()); - } -#endif + if (indices && indices->empty()) + return; // Prevent PaintOpBuffers from having side effects back into the canvas. SkAutoCanvasRestore save_restore(canvas, true); @@ -718,16 +646,22 @@ // FIFO queue of paint ops that have been peeked at. base::StackVector<const PaintOp*, 3> stack; - - // The current offset into range_indices. range_indices[range_index] is the - // current offset into range_starts. - size_t range_index = 0; - - Iterator iter(this); - while (iter.op_idx() < range_starts[range_indices[range_index]]) + Iterator iter(this, indices); + auto next_op = [&stack, &iter]() -> const PaintOp* { + if (stack->size()) { + const PaintOp* op = stack->front(); + // Shift paintops forward. + stack->erase(stack->begin()); + return op; + } + if (!iter) + return nullptr; + const PaintOp* op = *iter; ++iter; - while (const PaintOp* op = - NextOp(range_starts, range_indices, &stack, &iter, &range_index)) { + return op; + }; + + while (const PaintOp* op = next_op()) { // Check if we should abort. This should happen at the start of loop since // there are a couple of raster branches below, and we need to ensure that // we do this check after every one of them. @@ -739,8 +673,7 @@ // TODO(enne): consider making this recursive? // TODO(enne): should we avoid this if the SaveLayerAlphaOp has bounds? if (op->GetType() == PaintOpType::SaveLayerAlpha) { - const PaintOp* second = - NextOp(range_starts, range_indices, &stack, &iter, &range_index); + const PaintOp* second = next_op(); const PaintOp* third = nullptr; if (second) { if (second->GetType() == PaintOpType::Restore) { @@ -753,8 +686,7 @@ const PaintOp* draw_op = GetNestedSingleDrawingOp(second); if (draw_op) { - third = - NextOp(range_starts, range_indices, &stack, &iter, &range_index); + third = next_op(); if (third && third->GetType() == PaintOpType::Restore) { auto* save_op = static_cast<const SaveLayerAlphaOp*>(op); draw_op->RasterWithAlpha(canvas, save_op->bounds, save_op->alpha);
diff --git a/cc/paint/paint_op_buffer.h b/cc/paint/paint_op_buffer.h index abda0c6..465381a 100644 --- a/cc/paint/paint_op_buffer.h +++ b/cc/paint/paint_op_buffer.h
@@ -766,32 +766,12 @@ void Reset(); - void playback(SkCanvas* canvas, - SkPicture::AbortCallback* callback = nullptr) const; - // This can be used to play back a subset of the PaintOpBuffer. - // The |range_starts| array is an increasing set of positions in the - // PaintOpBuffer that break the buffer up into arbitrary consecutive chunks - // that together cover the entire buffer. The first value in |range_starts| - // must be 0. Each value after defines the end of the previous range - // (exclusive) and the beginning of the next range (inclusive). The last value - // in the array defines the last range which includes all ops to the end of - // the buffer. For example, given a PaintOpBuffer with the following ops: - // { A, B, C, D, E, F, G, H, I } - // And a |range_starts| with the following values: - // { 0, 4, 5 } - // This defines the following ranges in PaintOpBuffer: - // { A, B, C, D }, { E }, { F, G, H, I }. - // The |range_indices| is an increasing set of indices into the |range_starts| - // array. This defines the set of ranges that will be played back. - // Given the above example, if range_indices contains: - // { 1, 2 } - // Then the 1th and 2th (starting from base 0) ranges as defined in - // |range_starts| would be played back, which would be: - // { E, F, G, H, I }. - void PlaybackRanges(const std::vector<size_t>& range_starts, - const std::vector<size_t>& range_indices, - SkCanvas* canvas, - SkPicture::AbortCallback* callback = nullptr) const; + // Replays the paint op buffer into the canvas. If |indices| is specified, it + // contains indices in an increasing order and only the indices specified in + // the vector will be replayed. + void Playback(SkCanvas* canvas, + SkPicture::AbortCallback* callback = nullptr, + const std::vector<size_t>* indices = nullptr) const; // Returns the size of the paint op buffer. That is, the number of ops // contained in it. @@ -873,12 +853,22 @@ class Iterator { public: - explicit Iterator(const PaintOpBuffer* buffer) - : buffer_(buffer), ptr_(buffer_->data_.get()) {} + explicit Iterator(const PaintOpBuffer* buffer, + const std::vector<size_t>* indices = nullptr) + : buffer_(buffer), ptr_(buffer_->data_.get()), indices_(indices) { + if (indices) { + if (indices->empty()) { + *this = end(); + return; + } + target_idx_ = (*indices)[0]; + } + ++(*this); + } PaintOp* operator->() const { return reinterpret_cast<PaintOp*>(ptr_); } PaintOp* operator*() const { return operator->(); } - Iterator begin() { return Iterator(buffer_, buffer_->data_.get(), 0); } + Iterator begin() { return Iterator(buffer_, indices_); } Iterator end() { return Iterator(buffer_, buffer_->data_.get() + buffer_->used_, buffer_->size()); @@ -889,11 +879,27 @@ return other.op_idx_ != op_idx_; } Iterator& operator++() { - PaintOp* op = **this; - uint32_t type = op->type; - CHECK_LE(type, static_cast<uint32_t>(PaintOpType::LastPaintOpType)); - ptr_ += op->skip; - op_idx_++; + if (target_idx_ == std::numeric_limits<size_t>::max()) { + *this = end(); + return *this; + } + + while (*this && target_idx_ != op_idx_) { + PaintOp* op = **this; + uint32_t type = op->type; + CHECK_LE(type, static_cast<uint32_t>(PaintOpType::LastPaintOpType)); + ptr_ += op->skip; + op_idx_++; + } + + if (indices_) { + if (++indices_index_ >= indices_->size()) + target_idx_ = std::numeric_limits<size_t>::max(); + else + target_idx_ = (*indices_)[indices_index_]; + } else { + ++target_idx_; + } return *this; } operator bool() const { return op_idx_ < buffer_->size(); } @@ -905,7 +911,10 @@ const PaintOpBuffer* buffer_ = nullptr; char* ptr_ = nullptr; + const std::vector<size_t>* indices_ = nullptr; size_t op_idx_ = 0; + size_t target_idx_ = 0; + size_t indices_index_ = 0; }; private:
diff --git a/cc/paint/paint_op_buffer_unittest.cc b/cc/paint/paint_op_buffer_unittest.cc index 1e6e18cb..5d9c122 100644 --- a/cc/paint/paint_op_buffer_unittest.cc +++ b/cc/paint/paint_op_buffer_unittest.cc
@@ -15,6 +15,13 @@ using testing::Mock; namespace cc { +namespace { +void Playback(PaintOpBuffer* buffer, + SkCanvas* canvas, + const std::vector<size_t>& indices) { + buffer->Playback(canvas, nullptr, &indices); +} +} // namespace TEST(PaintOpBufferTest, Empty) { PaintOpBuffer buffer; @@ -251,7 +258,7 @@ buffer.push<RestoreOp>(); SaveCountingCanvas canvas; - buffer.playback(&canvas); + buffer.Playback(&canvas); EXPECT_EQ(0, canvas.save_count_); EXPECT_EQ(0, canvas.restore_count_); @@ -282,7 +289,7 @@ buffer.push<RestoreOp>(); SaveCountingCanvas canvas; - buffer.playback(&canvas); + buffer.Playback(&canvas); EXPECT_EQ(1, canvas.save_count_); EXPECT_EQ(1, canvas.restore_count_); @@ -309,7 +316,7 @@ buffer.push<RestoreOp>(); SaveCountingCanvas canvas; - buffer.playback(&canvas); + buffer.Playback(&canvas); EXPECT_EQ(1, canvas.save_count_); EXPECT_EQ(1, canvas.restore_count_); @@ -329,7 +336,7 @@ buffer.push<RestoreOp>(); SaveCountingCanvas canvas; - buffer.playback(&canvas); + buffer.Playback(&canvas); EXPECT_EQ(1, canvas.save_count_); EXPECT_EQ(1, canvas.restore_count_); @@ -356,7 +363,7 @@ buffer.push<RestoreOp>(); SaveCountingCanvas canvas; - buffer.playback(&canvas); + buffer.Playback(&canvas); EXPECT_EQ(0, canvas.save_count_); EXPECT_EQ(0, canvas.restore_count_); @@ -384,7 +391,7 @@ buffer.push<RestoreOp>(); SaveCountingCanvas canvas; - buffer.playback(&canvas); + buffer.Playback(&canvas); EXPECT_EQ(1, canvas.save_count_); EXPECT_EQ(1, canvas.restore_count_); @@ -483,7 +490,7 @@ EXPECT_EQ(4, buffer2->numSlowPaths()); } -TEST(PaintOpBufferTest, ContiguousRanges) { +TEST(PaintOpBufferTest, ContiguousIndices) { PaintOpBuffer buffer; MockCanvas canvas; @@ -493,20 +500,17 @@ buffer.push<DrawColorOp>(3u, SkBlendMode::kClear); buffer.push<DrawColorOp>(4u, SkBlendMode::kClear); - // Ranges are {0, 1}, {2}, {3, 4}. - std::vector<size_t> ranges = {0, 2, 3}; - - // Plays all 3 ranges. + // Plays all items. testing::Sequence s; EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(2u)).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(3u)).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2}, &canvas); + Playback(&buffer, &canvas, {0, 1, 2, 3, 4}); } -TEST(PaintOpBufferTest, NonContiguousRanges) { +TEST(PaintOpBufferTest, NonContiguousIndices) { PaintOpBuffer buffer; MockCanvas canvas; @@ -516,19 +520,16 @@ buffer.push<DrawColorOp>(3u, SkBlendMode::kClear); buffer.push<DrawColorOp>(4u, SkBlendMode::kClear); - // Ranges are {0, 1}, {2}, {3, 4}. - std::vector<size_t> ranges = {0, 2, 3}; - - // Plays first and third ranges. + // Plays 0, 1, 3, 4 indices. testing::Sequence s; EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(3u)).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 2}, &canvas); + Playback(&buffer, &canvas, {0, 1, 3, 4}); } -TEST(PaintOpBufferTest, FirstRange) { +TEST(PaintOpBufferTest, FirstTwoIndices) { PaintOpBuffer buffer; MockCanvas canvas; @@ -538,17 +539,14 @@ buffer.push<DrawColorOp>(3u, SkBlendMode::kClear); buffer.push<DrawColorOp>(4u, SkBlendMode::kClear); - // Ranges are {0, 1}, {2}, {3, 4}. - std::vector<size_t> ranges = {0, 2, 3}; - - // Plays first range. + // Plays first two indices. testing::Sequence s; EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0}, &canvas); + Playback(&buffer, &canvas, {0, 1}); } -TEST(PaintOpBufferTest, MiddleRange) { +TEST(PaintOpBufferTest, MiddleIndex) { PaintOpBuffer buffer; MockCanvas canvas; @@ -558,16 +556,13 @@ buffer.push<DrawColorOp>(3u, SkBlendMode::kClear); buffer.push<DrawColorOp>(4u, SkBlendMode::kClear); - // Ranges are {0, 1}, {2}, {3, 4}. - std::vector<size_t> ranges = {0, 2, 3}; - - // Plays second range. + // Plays index 2. testing::Sequence s; EXPECT_CALL(canvas, OnDrawPaintWithColor(2u)).InSequence(s); - buffer.PlaybackRanges(ranges, {1}, &canvas); + Playback(&buffer, &canvas, {2}); } -TEST(PaintOpBufferTest, LastRange) { +TEST(PaintOpBufferTest, LastTwoElements) { PaintOpBuffer buffer; MockCanvas canvas; @@ -577,17 +572,14 @@ buffer.push<DrawColorOp>(3u, SkBlendMode::kClear); buffer.push<DrawColorOp>(4u, SkBlendMode::kClear); - // Ranges are {0, 1}, {2}, {3, 4}. - std::vector<size_t> ranges = {0, 2, 3}; - - // Plays third range. + // Plays last two elements. testing::Sequence s; EXPECT_CALL(canvas, OnDrawPaintWithColor(3u)).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {2}, &canvas); + Playback(&buffer, &canvas, {3, 4}); } -TEST(PaintOpBufferTest, ContiguousRangeWithSaveLayerAlphaRestore) { +TEST(PaintOpBufferTest, ContiguousIndicesWithSaveLayerAlphaRestore) { PaintOpBuffer buffer; MockCanvas canvas; @@ -600,67 +592,20 @@ buffer.push<DrawColorOp>(3u, SkBlendMode::kClear); buffer.push<DrawColorOp>(4u, SkBlendMode::kClear); - { - // Ranges are {0, 1, save, restore}, {2}, {3, 4}. - std::vector<size_t> ranges = {0, 4, 5}; + // Items are {0, 1, save, restore, 2, 3, 4}. - testing::Sequence s; - EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); - // The empty SaveLayerAlpha/Restore is dropped. - EXPECT_CALL(canvas, OnDrawPaintWithColor(2u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(3u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2}, &canvas); - } + testing::Sequence s; + EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); + EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); + // The empty SaveLayerAlpha/Restore is dropped. + EXPECT_CALL(canvas, OnDrawPaintWithColor(2u)).InSequence(s); + EXPECT_CALL(canvas, OnDrawPaintWithColor(3u)).InSequence(s); + EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); + Playback(&buffer, &canvas, {0, 1, 2, 3, 4, 5, 6}); Mock::VerifyAndClearExpectations(&canvas); - - { - // Ranges are {0, 1}, {save, restore}, {2}, {3, 4}. - std::vector<size_t> ranges = {0, 2, 4, 5}; - - testing::Sequence s; - EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); - // The empty SaveLayerAlpha/Restore is dropped. - EXPECT_CALL(canvas, OnDrawPaintWithColor(2u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(3u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2, 3}, &canvas); - } - Mock::VerifyAndClearExpectations(&canvas); - - { - // Ranges are {0, 1}, {save, restore, 2}, {3, 4}. - std::vector<size_t> ranges = {0, 2, 5}; - - testing::Sequence s; - EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); - // The empty SaveLayerAlpha/Restore is dropped. - EXPECT_CALL(canvas, OnDrawPaintWithColor(2u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(3u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2}, &canvas); - } - Mock::VerifyAndClearExpectations(&canvas); - - { - // Ranges are {0, 1, save}, {restore, 2}, {3, 4}. - std::vector<size_t> ranges = {0, 3, 5}; - - testing::Sequence s; - EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); - // The empty SaveLayerAlpha/Restore is dropped. - EXPECT_CALL(canvas, OnDrawPaintWithColor(2u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(3u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2}, &canvas); - } } -TEST(PaintOpBufferTest, NonContiguousRangeWithSaveLayerAlphaRestore) { +TEST(PaintOpBufferTest, NonContiguousIndicesWithSaveLayerAlphaRestore) { PaintOpBuffer buffer; MockCanvas canvas; @@ -673,10 +618,9 @@ buffer.push<RestoreOp>(); buffer.push<DrawColorOp>(4u, SkBlendMode::kClear); - // Ranges are {0, 1, save}, {2, 3}, {restore, 4}. - std::vector<size_t> ranges = {0, 3, 5}; + // Items are {0, 1, save, 2, 3, restore, 4}. - // Plays back all ranges. + // Plays back all indices. { testing::Sequence s; EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); @@ -689,53 +633,23 @@ EXPECT_CALL(canvas, OnDrawPaintWithColor(3u)).InSequence(s); EXPECT_CALL(canvas, willRestore()).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2}, &canvas); + Playback(&buffer, &canvas, {0, 1, 2, 3, 4, 5, 6}); } Mock::VerifyAndClearExpectations(&canvas); - // Skips the middle range. + // Skips the middle indices. { testing::Sequence s; EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); // The now-empty SaveLayerAlpha/Restore is dropped EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 2}, &canvas); - } - - // Repeat with ranges that contain just the save and restore, as - // {0, 1}, {save}, {2, 3}, {restore}, {4}. - ranges = {0, 2, 3, 5, 6}; - - // Plays back all ranges. - { - testing::Sequence s; - EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); - // The SaveLayerAlpha/Restore is not dropped if we draw the middle - // range, as we need them to represent the two draws inside the layer - // correctly. - EXPECT_CALL(canvas, OnSaveLayer()).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(2u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(3u)).InSequence(s); - EXPECT_CALL(canvas, willRestore()).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2, 3, 4}, &canvas); + Playback(&buffer, &canvas, {0, 1, 2, 5, 6}); } Mock::VerifyAndClearExpectations(&canvas); - - // Skips the middle range. - { - testing::Sequence s; - EXPECT_CALL(canvas, OnDrawPaintWithColor(0u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawPaintWithColor(1u)).InSequence(s); - // The now-empty SaveLayerAlpha/Restore is dropped - EXPECT_CALL(canvas, OnDrawPaintWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 3, 4}, &canvas); - } } -TEST(PaintOpBufferTest, ContiguousRangeWithSaveLayerAlphaDrawRestore) { +TEST(PaintOpBufferTest, ContiguousIndicesWithSaveLayerAlphaDrawRestore) { PaintOpBuffer buffer; MockCanvas canvas; @@ -754,72 +668,21 @@ add_draw_rect(&buffer, 3u); add_draw_rect(&buffer, 4u); - { - // Ranges are {0, 1, save, 2, restore}, {3, 4}. - std::vector<size_t> ranges = {0, 5}; + // Items are {0, 1, save, 2, restore, 3, 4}. - testing::Sequence s; - EXPECT_CALL(canvas, OnDrawRectWithColor(0u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(1u)).InSequence(s); - // The empty SaveLayerAlpha/Restore is dropped, the containing - // operation can be drawn with alpha. - EXPECT_CALL(canvas, OnDrawRectWithColor(2u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(3u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1}, &canvas); - } - Mock::VerifyAndClearExpectations(&canvas); - - { - // Ranges are {0, 1, save, 2}, {restore}, {3, 4}. - std::vector<size_t> ranges = {0, 4, 5}; - - testing::Sequence s; - EXPECT_CALL(canvas, OnDrawRectWithColor(0u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(1u)).InSequence(s); - // The empty SaveLayerAlpha/Restore is dropped, the containing - // operation can be drawn with alpha. - EXPECT_CALL(canvas, OnDrawRectWithColor(2u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(3u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2}, &canvas); - } - Mock::VerifyAndClearExpectations(&canvas); - - { - // Ranges are {0, 1, save}, {2, restore}, {3, 4}. - std::vector<size_t> ranges = {0, 3, 5}; - - testing::Sequence s; - EXPECT_CALL(canvas, OnDrawRectWithColor(0u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(1u)).InSequence(s); - // The empty SaveLayerAlpha/Restore is dropped, the containing - // operation can be drawn with alpha. - EXPECT_CALL(canvas, OnDrawRectWithColor(2u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(3u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2}, &canvas); - } - Mock::VerifyAndClearExpectations(&canvas); - - { - // Ranges are {0, 1, save}, {2}, {restore}, {3, 4}. - std::vector<size_t> ranges = {0, 3, 4, 5}; - - testing::Sequence s; - EXPECT_CALL(canvas, OnDrawRectWithColor(0u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(1u)).InSequence(s); - // The empty SaveLayerAlpha/Restore is dropped, the containing - // operation can be drawn with alpha. - EXPECT_CALL(canvas, OnDrawRectWithColor(2u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(3u)).InSequence(s); - EXPECT_CALL(canvas, OnDrawRectWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2, 3}, &canvas); - } + testing::Sequence s; + EXPECT_CALL(canvas, OnDrawRectWithColor(0u)).InSequence(s); + EXPECT_CALL(canvas, OnDrawRectWithColor(1u)).InSequence(s); + // The empty SaveLayerAlpha/Restore is dropped, the containing + // operation can be drawn with alpha. + EXPECT_CALL(canvas, OnDrawRectWithColor(2u)).InSequence(s); + EXPECT_CALL(canvas, OnDrawRectWithColor(3u)).InSequence(s); + EXPECT_CALL(canvas, OnDrawRectWithColor(4u)).InSequence(s); + Playback(&buffer, &canvas, {0, 1, 2, 3, 4, 5, 6}); Mock::VerifyAndClearExpectations(&canvas); } -TEST(PaintOpBufferTest, NonContiguousRangeWithSaveLayerAlphaDrawRestore) { +TEST(PaintOpBufferTest, NonContiguousIndicesWithSaveLayerAlphaDrawRestore) { PaintOpBuffer buffer; MockCanvas canvas; @@ -838,8 +701,7 @@ add_draw_rect(&buffer, 4u); buffer.push<RestoreOp>(); - // Ranges are {0, 1, save}, {2, 3}, {4, restore}. - std::vector<size_t> ranges = {0, 3, 5}; + // Items are are {0, 1, save, 2, 3, 4, restore}. // If the middle range is played, then the SaveLayerAlpha/Restore // can't be dropped. @@ -852,7 +714,7 @@ EXPECT_CALL(canvas, OnDrawRectWithColor(3u)).InSequence(s); EXPECT_CALL(canvas, OnDrawRectWithColor(4u)).InSequence(s); EXPECT_CALL(canvas, willRestore()).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 1, 2}, &canvas); + Playback(&buffer, &canvas, {0, 1, 2, 3, 4, 5, 6}); } Mock::VerifyAndClearExpectations(&canvas); @@ -863,13 +725,10 @@ EXPECT_CALL(canvas, OnDrawRectWithColor(0u)).InSequence(s); EXPECT_CALL(canvas, OnDrawRectWithColor(1u)).InSequence(s); EXPECT_CALL(canvas, OnDrawRectWithColor(4u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 2}, &canvas); + Playback(&buffer, &canvas, {0, 1, 2, 5, 6}); } Mock::VerifyAndClearExpectations(&canvas); - // Ranges are {0, 1, save, 2}, {3, 4}, {restore}. - ranges = {0, 4, 6}; - // If the middle range is not played, then the SaveLayerAlpha/Restore // can be dropped. { @@ -877,7 +736,7 @@ EXPECT_CALL(canvas, OnDrawRectWithColor(0u)).InSequence(s); EXPECT_CALL(canvas, OnDrawRectWithColor(1u)).InSequence(s); EXPECT_CALL(canvas, OnDrawRectWithColor(2u)).InSequence(s); - buffer.PlaybackRanges(ranges, {0, 2}, &canvas); + Playback(&buffer, &canvas, {0, 1, 2, 3, 6}); } } @@ -907,7 +766,7 @@ EXPECT_CALL(canvas, OnDrawRectWithColor(1u)).InSequence(s); EXPECT_CALL(canvas, willRestore()).InSequence(s); EXPECT_CALL(canvas, OnDrawRectWithColor(2u)).InSequence(s); - buffer.PlaybackRanges({0}, {0}, &canvas); + buffer.Playback(&canvas); } } @@ -941,7 +800,7 @@ EXPECT_CALL(canvas, willRestore()).InSequence(s); // We will restore back to the original save count regardless with 2 restores. EXPECT_CALL(canvas, willRestore()).InSequence(s); - buffer.PlaybackRanges({0}, {0}, &canvas); + buffer.Playback(&canvas); } } // namespace cc
diff --git a/cc/paint/paint_record.cc b/cc/paint/paint_record.cc index 2483006..9593bbb 100644 --- a/cc/paint/paint_record.cc +++ b/cc/paint/paint_record.cc
@@ -12,7 +12,7 @@ sk_sp<SkPicture> ToSkPicture(sk_sp<PaintRecord> record, const SkRect& bounds) { SkPictureRecorder recorder; SkCanvas* canvas = recorder.beginRecording(bounds); - record->playback(canvas); + record->Playback(canvas); return recorder.finishRecordingAsPicture(); } @@ -20,7 +20,7 @@ const SkRect& bounds) { SkPictureRecorder recorder; SkCanvas* canvas = recorder.beginRecording(bounds); - record->playback(canvas); + record->Playback(canvas); return recorder.finishRecordingAsPicture(); }
diff --git a/cc/paint/skia_paint_canvas.cc b/cc/paint/skia_paint_canvas.cc index 65a86c9a..10a2fe4 100644 --- a/cc/paint/skia_paint_canvas.cc +++ b/cc/paint/skia_paint_canvas.cc
@@ -256,7 +256,7 @@ } void SkiaPaintCanvas::drawPicture(sk_sp<const PaintRecord> record) { - record->playback(canvas_); + record->Playback(canvas_); } bool SkiaPaintCanvas::isClipEmpty() const {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index 0805317..8492faaa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -1083,8 +1083,8 @@ // If the bottom sheet new tab UI is showing and the tab open type is not // already OPEN_NEW_TAB or OPEN_NEW_INCOGNITO_TAB, set the open type so that a real // new tab will be created and added to the appropriate model. - if (getBottomSheet().isShowingNewTab() && tabOpenType != TabOpenType.OPEN_NEW_TAB - && tabOpenType != TabOpenType.OPEN_NEW_INCOGNITO_TAB) { + if (getBottomSheet().isShowingNewTab() + && tabOpenType == TabOpenType.CLOBBER_CURRENT_TAB) { tabOpenType = mTabModelSelectorImpl.isIncognitoSelected() ? TabOpenType.OPEN_NEW_INCOGNITO_TAB : TabOpenType.OPEN_NEW_TAB; @@ -1093,10 +1093,17 @@ // Either a new tab is opening, a tab is being clobbered, or a tab is being // brought to the front. In all scenarios, the bottom sheet should be closed. // If a new tab is being created from a launcher shortcut, close the panel without - // animation because the panel will be re-opened immediately. + // animation because the panel will be re-opened immediately. If a tab is being + // brought to the front, this indicates the user is coming back to Chrome through + // external means (e.g. homescreen shortcut, media notification) and animating the + // sheet closing is extraneous. + boolean animateSheetClose = !fromLauncherShortcut + && (tabOpenType == TabOpenType.CLOBBER_CURRENT_TAB + || tabOpenType == TabOpenType.OPEN_NEW_TAB + || tabOpenType == TabOpenType.OPEN_NEW_INCOGNITO_TAB); getBottomSheet().getBottomSheetMetrics().setSheetCloseReason( BottomSheetMetrics.CLOSED_BY_NAVIGATION); - getBottomSheet().setSheetState(BottomSheet.SHEET_STATE_PEEK, !fromLauncherShortcut); + getBottomSheet().setSheetState(BottomSheet.SHEET_STATE_PEEK, animateSheetClose); } // We send this intent so that we can enter WebVr presentation mode if needed. This @@ -1144,6 +1151,12 @@ } else { TabModelUtils.setIndex(tabModel, tabIndex); } + + if (tabModel.getCount() > 0 && mUIInitialized + && mLayoutManager.overviewVisible()) { + mLayoutManager.hideOverview(true); + } + logMobileReceivedExternalIntent(externalAppId, intent); break; case CLOBBER_CURRENT_TAB:
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentRequestUI.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentRequestUI.java index 1848ed9..8ff4cd7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentRequestUI.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentRequestUI.java
@@ -561,10 +561,6 @@ new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); mSectionSeparators.add(new SectionSeparator(mPaymentContainerLayout)); - mPaymentContainerLayout.addView(mShippingOptionSection, - new LinearLayout.LayoutParams( - LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); - mSectionSeparators.add(new SectionSeparator(mPaymentContainerLayout)); } mPaymentContainerLayout.addView(mPaymentMethodSection, new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); @@ -663,6 +659,7 @@ } else if (whichSection == TYPE_SHIPPING_OPTIONS) { mShippingOptionsSectionInformation = section; mShippingOptionSection.update(section); + showShippingOptionSectionIfNecessary(); } else if (whichSection == TYPE_CONTACT_DETAILS) { mContactDetailsSectionInformation = section; mContactDetailsSection.update(section); @@ -680,6 +677,25 @@ if (isFinishingEditItem) notifyReadyForInput(); } + // Only show shipping option section once there are shipping options. + private void showShippingOptionSectionIfNecessary() { + if (!mRequestShipping || mShippingOptionsSectionInformation.isEmpty() + || mPaymentContainerLayout.indexOfChild(mShippingOptionSection) != -1) { + return; + } + + // Shipping option section is added below shipping address section. + int addressSectionIndex = mPaymentContainerLayout.indexOfChild(mShippingAddressSection); + SectionSeparator sectionSeparator = + new SectionSeparator(mPaymentContainerLayout, addressSectionIndex + 1); + mSectionSeparators.add(sectionSeparator); + if (mIsExpandedToFullHeight) sectionSeparator.expand(); + mPaymentContainerLayout.addView(mShippingOptionSection, addressSectionIndex + 2, + new LinearLayout.LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + mPaymentContainerLayout.requestLayout(); + } + @Override public void onPaymentOptionChanged(final PaymentRequestSection section, PaymentOption option) { @SelectionResult int result = SELECTION_RESULT_NONE;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabController.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabController.java index daf49b60..72fb015 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabController.java
@@ -94,7 +94,7 @@ // may get called while the sheet is open. In that case, we should finish showing the new // tab UI. if (!mBottomSheet.isSheetOpen()) { - mBottomSheet.setSheetState(mTabModelSelector.getTotalTabCount() == 0 + mBottomSheet.setSheetState(mTabModelSelector.getCurrentModel().getCount() == 0 ? BottomSheet.SHEET_STATE_FULL : BottomSheet.SHEET_STATE_HALF, true); @@ -175,6 +175,11 @@ mTabModelSelector.selectModel(false); } + if (mIsShowingNormalToolbar && mLayoutManager.overviewVisible()) { + mIsShowingNormalToolbar = false; + mToolbar.showTabSwitcherToolbar(); + } + onNewTabUiHidden(); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java index 010cc1a5..8d816c2e 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java
@@ -124,9 +124,9 @@ // Select "New incognito tab" from the menu. MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(), mActivity, R.id.new_incognito_tab_menu_id); - // The sheet should be opened at half height over the tab switcher and the tab count should + // The sheet should be opened at full height over the tab switcher and the tab count should // remain unchanged. The incognito model should now be selected. - validateState(false, BottomSheet.SHEET_STATE_HALF); + validateState(false, BottomSheet.SHEET_STATE_FULL); assertEquals(1, mActivity.getTabModelSelector().getTotalTabCount()); assertTrue( "Overview mode should be showing", mActivity.getLayoutManager().overviewVisible());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/test/crash/IntentionalCrashTest.java b/chrome/android/javatests/src/org/chromium/chrome/test/crash/IntentionalCrashTest.java index 3988cb0..52066717 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/test/crash/IntentionalCrashTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/test/crash/IntentionalCrashTest.java
@@ -25,7 +25,7 @@ public class IntentionalCrashTest { @Rule public ChromeActivityTestRule<ChromeActivity> mActivityTestRule = - new ChromeActivityTestRule(ChromeActivity.class); + new ChromeActivityTestRule<>(ChromeActivity.class); @DisabledTest @Test
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index aa43d547..b376a1c 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -100,6 +100,7 @@ #include "ui/compositor/compositor_switches.h" #include "ui/display/display_switches.h" #include "ui/events/event_switches.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gfx/switches.h" #include "ui/gl/gl_features.h" #include "ui/gl/gl_switches.h" @@ -1396,9 +1397,9 @@ proximity_auth::switches::kEnableBluetoothLowEnergyDiscovery)}, #endif // OS_CHROMEOS #if defined(USE_ASH) - {"ash-enable-night-light", flag_descriptions::kEnableNightLightName, - flag_descriptions::kEnableNightLightDescription, kOsAll, - SINGLE_VALUE_TYPE(ash::switches::kAshEnableNightLight)}, + {"ash-disable-night-light", flag_descriptions::kDisableNightLightName, + flag_descriptions::kDisableNightLightDescription, kOsAll, + SINGLE_DISABLE_VALUE_TYPE(ash::switches::kAshDisableNightLight)}, {"show-touch-hud", flag_descriptions::kShowTouchHudName, flag_descriptions::kShowTouchHudDescription, kOsAll, SINGLE_VALUE_TYPE(ash::switches::kAshTouchHud)},
diff --git a/chrome/browser/android/vr_shell/BUILD.gn b/chrome/browser/android/vr_shell/BUILD.gn index 532837a..59855ed 100644 --- a/chrome/browser/android/vr_shell/BUILD.gn +++ b/chrome/browser/android/vr_shell/BUILD.gn
@@ -200,6 +200,7 @@ sources = [ "fps_meter_unittest.cc", "gltf_parser_unittest.cc", + "run_all_unittests.cc", "test/paths.cc", "test/paths.h", "textures/close_button_texture_unittest.cc", @@ -212,8 +213,8 @@ deps = [ ":vr_common", - "//base/test:run_all_unittests", "//base/test:test_support", + "//components:components_tests_pak", "//components/security_state/core", "//skia", "//testing/gmock", @@ -223,10 +224,12 @@ "//ui/gl", ] + if (is_android) { + deps += [ "//ui/android:ui_java" ] + } + data = [ - "test/data/sample_inline.gltf", - "test/data/sample_external.gltf", - "test/data/sample.bin", - "test/data/sample.glb", + "test/data/", + "$root_out_dir/components_tests_resources.pak", ] }
diff --git a/chrome/browser/android/vr_shell/run_all_unittests.cc b/chrome/browser/android/vr_shell/run_all_unittests.cc new file mode 100644 index 0000000..7c615de --- /dev/null +++ b/chrome/browser/android/vr_shell/run_all_unittests.cc
@@ -0,0 +1,52 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/bind.h" +#include "base/files/file_util.h" +#include "base/path_service.h" +#include "base/test/launcher/unit_test_launcher.h" +#include "base/test/test_suite.h" +#include "ui/base/resource/resource_bundle.h" +#include "ui/base/ui_base_paths.h" + +namespace { + +class VrCommonTestSuite : public base::TestSuite { + public: + VrCommonTestSuite(int argc, char** argv) : base::TestSuite(argc, argv) {} + + protected: + void Initialize() override { + base::TestSuite::Initialize(); + + ui::RegisterPathProvider(); + + base::FilePath pak_path; +#if defined(OS_ANDROID) + PathService::Get(ui::DIR_RESOURCE_PAKS_ANDROID, &pak_path); +#else + PathService::Get(base::DIR_MODULE, &pak_path); +#endif + ui::ResourceBundle::InitSharedInstanceWithPakPath( + pak_path.AppendASCII("components_tests_resources.pak")); + } + + void Shutdown() override { + ui::ResourceBundle::CleanupSharedInstance(); + base::TestSuite::Shutdown(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(VrCommonTestSuite); +}; + +} // namespace + +int main(int argc, char** argv) { + VrCommonTestSuite test_suite(argc, argv); + + return base::LaunchUnitTests( + argc, argv, + base::Bind(&VrCommonTestSuite::Run, base::Unretained(&test_suite))); +}
diff --git a/chrome/browser/android/vr_shell/vr_controller.cc b/chrome/browser/android/vr_shell/vr_controller.cc index a628cb4..dbd5ea2 100644 --- a/chrome/browser/android/vr_shell/vr_controller.cc +++ b/chrome/browser/android/vr_shell/vr_controller.cc
@@ -10,7 +10,6 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" -#include "base/time/time.h" #include "cc/base/math_util.h" #include "chrome/browser/android/vr_shell/elbow_model.h" #include "third_party/WebKit/public/platform/WebGestureEvent.h" @@ -49,6 +48,8 @@ // Distance from the center of the controller to start rendering the laser. constexpr float kLaserStartDisplacement = 0.045; +constexpr int microsPerNano = 1000; + void ClampTouchpadPosition(gfx::Vector2dF* position) { position->set_x(cc::MathUtil::ClampToRange(position->x(), 0.0f, 1.0f)); position->set_y(cc::MathUtil::ClampToRange(position->y(), 0.0f, 1.0f)); @@ -141,6 +142,21 @@ return controller_state_->GetTouchPos().y; } +base::TimeTicks VrController::GetLastOrientationTimestamp() const { + return base::TimeTicks::FromInternalValue( + controller_state_->GetLastOrientationTimestamp() / microsPerNano); +} + +base::TimeTicks VrController::GetLastTouchTimestamp() const { + return base::TimeTicks::FromInternalValue( + controller_state_->GetLastTouchTimestamp() / microsPerNano); +} + +base::TimeTicks VrController::GetLastButtonTimestamp() const { + return base::TimeTicks::FromInternalValue( + controller_state_->GetLastButtonTimestamp() / microsPerNano); +} + gfx::Quaternion VrController::Orientation() const { const gvr::Quatf& orientation = controller_state_->GetOrientation(); return gfx::Quaternion(orientation.qx, orientation.qy, orientation.qz, @@ -290,7 +306,7 @@ void VrController::UpdateGestureFromTouchInfo(blink::WebGestureEvent* gesture) { gesture->SetTimeStampSeconds( - (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF()); + (GetLastTouchTimestamp() - base::TimeTicks()).InSecondsF()); switch (state_) { // User has not put finger on touch pad. case WAITING:
diff --git a/chrome/browser/android/vr_shell/vr_controller.h b/chrome/browser/android/vr_shell/vr_controller.h index de6d03b7..8bcc6c18 100644 --- a/chrome/browser/android/vr_shell/vr_controller.h +++ b/chrome/browser/android/vr_shell/vr_controller.h
@@ -9,6 +9,7 @@ #include <vector> #include "base/macros.h" +#include "base/time/time.h" #include "chrome/browser/android/vr_shell/vr_controller_model.h" #include "device/vr/android/gvr/gvr_gamepad_data_provider.h" #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr_types.h" @@ -80,6 +81,10 @@ bool IsConnected(); + base::TimeTicks GetLastOrientationTimestamp() const; + base::TimeTicks GetLastTouchTimestamp() const; + base::TimeTicks GetLastButtonTimestamp() const; + private: enum GestureDetectorState { WAITING, // waiting for user to touch down
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.cc b/chrome/browser/android/vr_shell/vr_shell_gl.cc index 6d63fbbf..579941f5 100644 --- a/chrome/browser/android/vr_shell/vr_shell_gl.cc +++ b/chrome/browser/android/vr_shell/vr_shell_gl.cc
@@ -30,7 +30,6 @@ #include "device/vr/android/gvr/gvr_device.h" #include "device/vr/android/gvr/gvr_gamepad_data_provider.h" #include "third_party/WebKit/public/platform/WebGestureEvent.h" -#include "third_party/WebKit/public/platform/WebInputEvent.h" #include "third_party/WebKit/public/platform/WebMouseEvent.h" #include "ui/gl/android/scoped_java_surface.h" #include "ui/gl/android/surface_texture.h" @@ -172,24 +171,6 @@ return result; } -std::unique_ptr<blink::WebMouseEvent> MakeMouseEvent( - blink::WebInputEvent::Type type, - double timestamp, - const gfx::Point& location, - bool down) { - blink::WebInputEvent::Modifiers modifiers = - down ? blink::WebInputEvent::kLeftButtonDown - : blink::WebInputEvent::kNoModifiers; - std::unique_ptr<blink::WebMouseEvent> mouse_event( - new blink::WebMouseEvent(type, modifiers, timestamp)); - mouse_event->pointer_type = blink::WebPointerProperties::PointerType::kMouse; - mouse_event->button = blink::WebPointerProperties::Button::kLeft; - mouse_event->SetPositionInWidget(location.x(), location.y()); - mouse_event->click_count = 1; - - return mouse_event; -} - void TransformToGvrMat(const gfx::Transform& in, gvr::Mat4f* out) { for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { @@ -643,9 +624,9 @@ if (touch_pending_ || controller_->ButtonUpHappened(gvr::kControllerButtonClick)) { touch_pending_ = false; - std::unique_ptr<blink::WebGestureEvent> gesture(new blink::WebGestureEvent( + auto gesture = base::MakeUnique<blink::WebGestureEvent>( blink::WebInputEvent::kGestureTapDown, - blink::WebInputEvent::kNoModifiers, NowSeconds())); + blink::WebInputEvent::kNoModifiers, NowSeconds()); gesture->source_device = blink::kWebGestureDeviceTouchpad; gesture->x = 0; gesture->y = 0; @@ -728,8 +709,8 @@ if (!hover_target_ || (target == hover_target_)) return; if (hover_target_->fill() == Fill::CONTENT) { - SendGestureToContent(MakeMouseEvent(blink::WebInputEvent::kMouseLeave, - NowSeconds(), gfx::Point(), in_click_)); + SendGestureToContent( + MakeMouseEvent(blink::WebInputEvent::kMouseLeave, gfx::Point())); } else { hover_target_->OnHoverLeave(); } @@ -742,9 +723,8 @@ if (!target || target == hover_target_) return false; if (target->fill() == Fill::CONTENT) { - SendGestureToContent(MakeMouseEvent(blink::WebInputEvent::kMouseEnter, - NowSeconds(), local_point_pixels, - in_click_)); + SendGestureToContent( + MakeMouseEvent(blink::WebInputEvent::kMouseEnter, local_point_pixels)); } else { target->OnHoverEnter(target_point); } @@ -763,9 +743,8 @@ // disable mouse moves, only delivering a down and up event. if (in_click_) return; - SendGestureToContent(MakeMouseEvent(blink::WebInputEvent::kMouseMove, - NowSeconds(), local_point_pixels, - in_click_)); + SendGestureToContent( + MakeMouseEvent(blink::WebInputEvent::kMouseMove, local_point_pixels)); } else { hover_target_->OnMove(target_point); } @@ -783,9 +762,8 @@ if (!target) return; if (target->fill() == Fill::CONTENT) { - SendGestureToContent(MakeMouseEvent(blink::WebInputEvent::kMouseDown, - NowSeconds(), local_point_pixels, - in_click_)); + SendGestureToContent( + MakeMouseEvent(blink::WebInputEvent::kMouseDown, local_point_pixels)); } else { target->OnButtonDown(target_point); } @@ -805,9 +783,8 @@ DCHECK(input_locked_element_ == target); input_locked_element_ = nullptr; if (target->fill() == Fill::CONTENT) { - SendGestureToContent(MakeMouseEvent(blink::WebInputEvent::kMouseUp, - NowSeconds(), local_point_pixels, - in_click_)); + SendGestureToContent( + MakeMouseEvent(blink::WebInputEvent::kMouseUp, local_point_pixels)); } else { target->OnButtonUp(target_point); } @@ -836,6 +813,39 @@ } } +std::unique_ptr<blink::WebMouseEvent> VrShellGl::MakeMouseEvent( + blink::WebInputEvent::Type type, + const gfx::Point& location) { + blink::WebInputEvent::Modifiers modifiers = + in_click_ ? blink::WebInputEvent::kLeftButtonDown + : blink::WebInputEvent::kNoModifiers; + base::TimeTicks timestamp; + switch (type) { + case blink::WebInputEvent::kMouseUp: + case blink::WebInputEvent::kMouseDown: + timestamp = controller_->GetLastButtonTimestamp(); + break; + case blink::WebInputEvent::kMouseMove: + case blink::WebInputEvent::kMouseEnter: + case blink::WebInputEvent::kMouseLeave: + timestamp = controller_->GetLastOrientationTimestamp(); + break; + default: + NOTREACHED(); + } + + auto mouse_event = base::MakeUnique<blink::WebMouseEvent>( + type, modifiers, (timestamp - base::TimeTicks()).InSecondsF()); + mouse_event->pointer_type = blink::WebPointerProperties::PointerType::kMouse; + mouse_event->button = blink::WebPointerProperties::Button::kLeft; + mouse_event->SetPositionInWidget(location.x(), location.y()); + // TODO(mthiesse): Should we support double-clicks for input? What should the + // timeout be? + mouse_event->click_count = 1; + + return mouse_event; +} + void VrShellGl::SendImmediateExitRequestIfNecessary() { gvr::ControllerButton buttons[] = { gvr::kControllerButtonClick, gvr::kControllerButtonApp,
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.h b/chrome/browser/android/vr_shell/vr_shell_gl.h index c41f27a..7b07d5d 100644 --- a/chrome/browser/android/vr_shell/vr_shell_gl.h +++ b/chrome/browser/android/vr_shell/vr_shell_gl.h
@@ -19,6 +19,7 @@ #include "chrome/browser/android/vr_shell/vr_controller_model.h" #include "device/vr/vr_service.mojom.h" #include "mojo/public/cpp/bindings/binding.h" +#include "third_party/WebKit/public/platform/WebInputEvent.h" #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr.h" #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr_types.h" #include "ui/gfx/geometry/quaternion.h" @@ -26,7 +27,7 @@ #include "ui/gfx/native_widget_types.h" namespace blink { -class WebInputEvent; +class WebMouseEvent; } namespace gl { @@ -158,6 +159,9 @@ void SendTap(UiElement* target, const gfx::PointF& target_point, const gfx::Point& local_point_pixels); + std::unique_ptr<blink::WebMouseEvent> MakeMouseEvent( + blink::WebInputEvent::Type type, + const gfx::Point& location); void SendImmediateExitRequestIfNecessary(); void GetVisualTargetElement(const gfx::Vector3dF& controller_direction, gfx::Vector3dF& eye_to_target,
diff --git a/chrome/browser/captive_portal/captive_portal_browsertest.cc b/chrome/browser/captive_portal/captive_portal_browsertest.cc index 904c60d..c73f5897 100644 --- a/chrome/browser/captive_portal/captive_portal_browsertest.cc +++ b/chrome/browser/captive_portal/captive_portal_browsertest.cc
@@ -19,7 +19,6 @@ #include "base/path_service.h" #include "base/sequence_checker.h" #include "base/strings/utf_string_conversions.h" -#include "base/task_scheduler/post_task.h" #include "base/values.h" #include "build/build_config.h" #include "chrome/browser/captive_portal/captive_portal_service.h" @@ -485,8 +484,6 @@ net::NetworkDelegate* network_delegate) const { EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); - const base::TaskTraits kTraits = {base::MayBlock()}; - // The PathService is threadsafe. base::FilePath root_http; PathService::Get(chrome::DIR_TEST_DATA, &root_http); @@ -499,8 +496,7 @@ // actually requested. return new URLRequestMockHTTPJob( request, network_delegate, - root_http.Append(FILE_PATH_LITERAL("title2.html")), - base::CreateTaskRunnerWithTraits(kTraits)); + root_http.Append(FILE_PATH_LITERAL("title2.html"))); } else if (request->url() == kMockHttpsQuickTimeoutUrl) { if (behind_captive_portal_) return new URLRequestFailedJob( @@ -509,8 +505,7 @@ // actually requested. return new URLRequestMockHTTPJob( request, network_delegate, - root_http.Append(FILE_PATH_LITERAL("title2.html")), - base::CreateTaskRunnerWithTraits(kTraits)); + root_http.Append(FILE_PATH_LITERAL("title2.html"))); } else { // The URL should be the captive portal test URL. EXPECT_TRUE(request->url() == kMockCaptivePortalTestUrl || @@ -522,20 +517,17 @@ if (request->url() == kMockCaptivePortal511Url) { return new URLRequestMockHTTPJob( request, network_delegate, - root_http.Append(FILE_PATH_LITERAL("captive_portal/page511.html")), - base::CreateTaskRunnerWithTraits(kTraits)); + root_http.Append(FILE_PATH_LITERAL("captive_portal/page511.html"))); } return new URLRequestMockHTTPJob( request, network_delegate, - root_http.Append(FILE_PATH_LITERAL("captive_portal/login.html")), - base::CreateTaskRunnerWithTraits(kTraits)); + root_http.Append(FILE_PATH_LITERAL("captive_portal/login.html"))); } // After logging in to the portal, the test URLs return a 204 response. return new URLRequestMockHTTPJob( request, network_delegate, - root_http.Append(FILE_PATH_LITERAL("captive_portal/page204.html")), - base::CreateTaskRunnerWithTraits(kTraits)); + root_http.Append(FILE_PATH_LITERAL("captive_portal/page204.html"))); } }
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 136cc7c..42fd5682 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -990,8 +990,8 @@ // fetch of the initial CrosSettings DeviceRebootOnShutdown policy. shutdown_policy_forwarder_ = base::MakeUnique<ShutdownPolicyForwarder>(); - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - ash::switches::kAshEnableNightLight)) { + if (!base::CommandLine::ForCurrentProcess()->HasSwitch( + ash::switches::kAshDisableNightLight)) { night_light_client_ = base::MakeUnique<NightLightClient>( g_browser_process->system_request_context()); night_light_client_->Start();
diff --git a/chrome/browser/chromeos/login/chrome_restart_request.cc b/chrome/browser/chromeos/login/chrome_restart_request.cc index 56bba14..c0254c90 100644 --- a/chrome/browser/chromeos/login/chrome_restart_request.cc +++ b/chrome/browser/chromeos/login/chrome_restart_request.cc
@@ -49,7 +49,7 @@ #include "ui/compositor/compositor_switches.h" #include "ui/display/display_switches.h" #include "ui/events/event_switches.h" -#include "ui/gfx/switches.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gl/gl_switches.h" #include "ui/ozone/public/ozone_switches.h" #include "ui/wm/core/wm_core_switches.h"
diff --git a/chrome/browser/chromeos/login/screens/user_selection_screen.cc b/chrome/browser/chromeos/login/screens/user_selection_screen.cc index 8e0c8c5..8116cb60 100644 --- a/chrome/browser/chromeos/login/screens/user_selection_screen.cc +++ b/chrome/browser/chromeos/login/screens/user_selection_screen.cc
@@ -337,7 +337,10 @@ default: behavior = multi_profile_user_controller->GetCachedValue(user_id); } - user_dict->SetString(kKeyMultiProfilesPolicy, behavior); + MultiProfileUserController::MultiProfileUserBehavior user_behavior = + MultiProfileUserController::UserBehaviorStringToEnum(behavior); + user_dict->SetInteger(kKeyMultiProfilesPolicy, + static_cast<int>(user_behavior)); } else { user_dict->SetBoolean(kKeyMultiProfilesAllowed, true); }
diff --git a/chrome/browser/chromeos/login/session/chrome_session_manager.cc b/chrome/browser/chromeos/login/session/chrome_session_manager.cc index d0421356..9e59723 100644 --- a/chrome/browser/chromeos/login/session/chrome_session_manager.cc +++ b/chrome/browser/chromeos/login/session/chrome_session_manager.cc
@@ -87,7 +87,7 @@ // 2. Chrome is restarted for Guest session. // 3. Chrome is started in browser_tests skipping the login flow. // 4. Chrome is started on dev machine i.e. not on Chrome OS device w/o -// login flow. In that case --login-user=[user_manager::kStubUser] is +// login flow. In that case --login-user=[user_manager::kStubUserEmail] is // added. See PreEarlyInitialization(). void StartUserSession(Profile* user_profile, const std::string& login_user_id) { base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
diff --git a/chrome/browser/chromeos/login/users/chrome_user_manager_util.cc b/chrome/browser/chromeos/login/users/chrome_user_manager_util.cc index c0c3697..cec7e9c 100644 --- a/chrome/browser/chromeos/login/users/chrome_user_manager_util.cc +++ b/chrome/browser/chromeos/login/users/chrome_user_manager_util.cc
@@ -14,7 +14,7 @@ bool GetPlatformKnownUserId(const std::string& user_email, const std::string& gaia_id, AccountId* out_account_id) { - if (user_email == user_manager::kStubUser) { + if (user_email == user_manager::kStubUserEmail) { *out_account_id = user_manager::StubAccountId(); return true; }
diff --git a/chrome/browser/chromeos/login/users/multi_profile_user_controller.cc b/chrome/browser/chromeos/login/users/multi_profile_user_controller.cc index 09b79b9..787e73e 100644 --- a/chrome/browser/chromeos/login/users/multi_profile_user_controller.cc +++ b/chrome/browser/chromeos/login/users/multi_profile_user_controller.cc
@@ -127,6 +127,20 @@ return ALLOWED; } +// static +MultiProfileUserController::MultiProfileUserBehavior +MultiProfileUserController::UserBehaviorStringToEnum( + const std::string& behavior) { + if (behavior == kBehaviorPrimaryOnly) + return MultiProfileUserBehavior::kPrimaryOnly; + if (behavior == kBehaviorNotAllowed) + return MultiProfileUserBehavior::kNotAllowed; + if (behavior == kBehaviorOwnerPrimaryOnly) + return MultiProfileUserBehavior::kOwnerPrimaryOnly; + + return MultiProfileUserBehavior::kUnrestriced; +} + bool MultiProfileUserController::IsUserAllowedInSession( const std::string& user_email, MultiProfileUserController::UserAllowedInSessionReason* reason) const {
diff --git a/chrome/browser/chromeos/login/users/multi_profile_user_controller.h b/chrome/browser/chromeos/login/users/multi_profile_user_controller.h index 5baf14ff..c397d56 100644 --- a/chrome/browser/chromeos/login/users/multi_profile_user_controller.h +++ b/chrome/browser/chromeos/login/users/multi_profile_user_controller.h
@@ -55,6 +55,15 @@ NOT_ALLOWED_POLICY_FORBIDS }; + // Supported user behavior values. Keep in sync with the enum in + // md_user_pod_row.js and user_pod_row.js + enum class MultiProfileUserBehavior { + kUnrestriced, + kPrimaryOnly, + kNotAllowed, + kOwnerPrimaryOnly + }; + MultiProfileUserController(MultiProfileUserControllerDelegate* delegate, PrefService* local_state); ~MultiProfileUserController(); @@ -70,6 +79,10 @@ // NOT_ALLOWED_PRIMARY_USER_POLICY_FORBIDS) static UserAllowedInSessionReason GetPrimaryUserPolicy(); + // Returns the user behavior in MultiProfileUserBehavior enum. + static MultiProfileUserBehavior UserBehaviorStringToEnum( + const std::string& behavior); + // Returns true if user allowed to be in the current session. If |reason| not // null stores UserAllowedInSessionReason enum that describes actual reason. bool IsUserAllowedInSession(const std::string& user_email,
diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc index d32ac168..f4ace421 100644 --- a/chrome/browser/devtools/devtools_sanity_browsertest.cc +++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc
@@ -22,7 +22,6 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "base/task_scheduler/post_task.h" #include "base/test/test_timeouts.h" #include "base/threading/thread_restrictions.h" #include "base/threading/thread_task_runner_handle.h" @@ -195,13 +194,7 @@ PushTimesMockURLRequestJob(net::URLRequest* request, net::NetworkDelegate* network_delegate, base::FilePath file_path) - : net::URLRequestMockHTTPJob( - request, - network_delegate, - file_path, - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BACKGROUND, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})) {} + : net::URLRequestMockHTTPJob(request, network_delegate, file_path) {} void Start() override { load_timing_info_.socket_reused = true;
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index c9876e02..12c367a 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1055,11 +1055,6 @@ "flag. The trace may include personally identifiable information (PII) " "such as the titles and URLs of websites you visit."; -const char kEnableNightLightName[] = "Enable Night Light"; -const char kEnableNightLightDescription[] = - "Enable the Night Light feature to control the color temperature of the " - "screen."; - const char kEnablePictureInPictureName[] = "Enable picture in picture."; const char kEnablePictureInPictureDescription[] = @@ -1081,6 +1076,11 @@ "With this flag on, desktop share picker window will not let the user " "choose whether to share audio."; +const char kDisableNightLightName[] = "Disable Night Light"; +const char kDisableNightLightDescription[] = + "Disable the Night Light feature which controls the color temperature of " + "the screen."; + const char kDisableTabForDesktopShareName[] = "Disable Desktop Share with tab source";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 06fac16..5bf504af 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -139,6 +139,9 @@ extern const char kDisableAudioForDesktopShareName[]; extern const char kDisableAudioForDesktopShareDescription[]; +extern const char kDisableNightLightName[]; +extern const char kDisableNightLightDescription[]; + extern const char kDisableTabForDesktopShareName[]; extern const char kDisableTabForDesktopShareDescription[]; @@ -236,9 +239,6 @@ extern const char kEnableNavigationTracingName[]; extern const char kEnableNavigationTracingDescription[]; -extern const char kEnableNightLightName[]; -extern const char kEnableNightLightDescription[]; - extern const char kEnablePictureInPictureName[]; extern const char kEnablePictureInPictureDescription[];
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_browsertest.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_browsertest.cc index 33601bb..afd87c1 100644 --- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_browsertest.cc +++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_browsertest.cc
@@ -21,7 +21,6 @@ #include "base/run_loop.h" #include "base/stl_util.h" #include "base/strings/string_util.h" -#include "base/task_scheduler/post_task.h" #include "base/test/scoped_command_line.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/download/download_browsertest.h" @@ -348,12 +347,8 @@ MirrorMockURLRequestJob(net::URLRequest* request, net::NetworkDelegate* network_delegate, const base::FilePath& file_path, - const scoped_refptr<base::TaskRunner>& task_runner, ReportResponseHeadersOnUI report_on_ui) - : net::URLRequestMockHTTPJob(request, - network_delegate, - file_path, - task_runner), + : net::URLRequestMockHTTPJob(request, network_delegate, file_path), report_on_ui_(report_on_ui) {} void Start() override { @@ -390,9 +385,6 @@ net::NetworkDelegate* network_delegate) const override { return new MirrorMockURLRequestJob( request, network_delegate, root_http_, - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BACKGROUND, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}), report_on_ui_); }
diff --git a/chrome/browser/net/dns_probe_browsertest.cc b/chrome/browser/net/dns_probe_browsertest.cc index dfbdd3f..615102b 100644 --- a/chrome/browser/net/dns_probe_browsertest.cc +++ b/chrome/browser/net/dns_probe_browsertest.cc
@@ -9,7 +9,6 @@ #include "base/message_loop/message_loop.h" #include "base/path_service.h" #include "base/run_loop.h" -#include "base/task_scheduler/post_task.h" #include "base/threading/thread_restrictions.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/io_thread.h" @@ -181,13 +180,7 @@ const base::FilePath& file_path, bool should_delay, const DestructionCallback& destruction_callback) - : URLRequestMockHTTPJob( - request, - network_delegate, - file_path, - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BACKGROUND, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})), + : URLRequestMockHTTPJob(request, network_delegate, file_path), should_delay_(should_delay), start_delayed_(false), destruction_callback_(destruction_callback) {}
diff --git a/chrome/browser/net/errorpage_browsertest.cc b/chrome/browser/net/errorpage_browsertest.cc index f896e0e..2c0174e 100644 --- a/chrome/browser/net/errorpage_browsertest.cc +++ b/chrome/browser/net/errorpage_browsertest.cc
@@ -17,8 +17,6 @@ #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/synchronization/lock.h" -#include "base/task_scheduler/post_task.h" -#include "base/threading/sequenced_worker_pool.h" #include "base/threading/thread_restrictions.h" #include "base/values.h" #include "build/build_config.h" @@ -260,10 +258,7 @@ PathService::Get(chrome::DIR_TEST_DATA, &root_http); return new net::URLRequestMockHTTPJob( request, network_delegate, - root_http.AppendASCII("mock-link-doctor.json"), - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BACKGROUND, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); + root_http.AppendASCII("mock-link-doctor.json")); } void WaitForRequests(int requests_to_wait_for) { @@ -325,8 +320,7 @@ net::URLRequestFilter::GetInstance()->AddHostnameInterceptor( search_url.scheme(), search_url.host(), net::URLRequestMockHTTPJob::CreateInterceptorForSingleFile( - root_http.AppendASCII("title3.html"), - BrowserThread::GetBlockingPool())); + root_http.AppendASCII("title3.html"))); } class ErrorPageTest : public InProcessBrowserTest {
diff --git a/chrome/browser/net/url_request_mock_util.cc b/chrome/browser/net/url_request_mock_util.cc index c870b91..c8252d0 100644 --- a/chrome/browser/net/url_request_mock_util.cc +++ b/chrome/browser/net/url_request_mock_util.cc
@@ -7,7 +7,6 @@ #include <string> #include "base/path_service.h" -#include "base/threading/sequenced_worker_pool.h" #include "base/threading/thread_restrictions.h" #include "chrome/common/chrome_paths.h" #include "content/public/browser/browser_thread.h" @@ -38,8 +37,7 @@ base::FilePath root_http; PathService::Get(chrome::DIR_TEST_DATA, &root_http); - net::URLRequestMockHTTPJob::AddUrlHandlers( - root_http, BrowserThread::GetBlockingPool()); + net::URLRequestMockHTTPJob::AddUrlHandlers(root_http); } else { // Revert to the default handlers. net::URLRequestFilter::GetInstance()->ClearHandlers();
diff --git a/chrome/browser/policy/cloud/cloud_policy_browsertest.cc b/chrome/browser/policy/cloud/cloud_policy_browsertest.cc index 65247d7b..b99f4160 100644 --- a/chrome/browser/policy/cloud/cloud_policy_browsertest.cc +++ b/chrome/browser/policy/cloud/cloud_policy_browsertest.cc
@@ -101,7 +101,7 @@ const char* GetTestUser() { #if defined(OS_CHROMEOS) - return user_manager::kStubUser; + return user_manager::kStubUserEmail; #else return "user@example.com"; #endif
diff --git a/chrome/browser/policy/cloud/test_request_interceptor.cc b/chrome/browser/policy/cloud/test_request_interceptor.cc index 1682c34f..59a6efc 100644 --- a/chrome/browser/policy/cloud/test_request_interceptor.cc +++ b/chrome/browser/policy/cloud/test_request_interceptor.cc
@@ -15,7 +15,6 @@ #include "base/macros.h" #include "base/run_loop.h" #include "base/sequenced_task_runner.h" -#include "base/task_scheduler/post_task.h" #include "base/threading/thread_task_runner_handle.h" #include "net/base/net_errors.h" #include "net/base/upload_bytes_element_reader.h" @@ -62,11 +61,7 @@ net::URLRequestJob* FileJobCallback(const base::FilePath& file_path, net::URLRequest* request, net::NetworkDelegate* network_delegate) { - return new net::URLRequestMockHTTPJob( - request, network_delegate, file_path, - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BACKGROUND, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); + return new net::URLRequestMockHTTPJob(request, network_delegate, file_path); } // Parses the upload data in |request| into |request_msg|, and validates the
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc index 6465b20..a96dd32 100644 --- a/chrome/browser/policy/policy_browsertest.cc +++ b/chrome/browser/policy/policy_browsertest.cc
@@ -35,7 +35,6 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_file_util.h" -#include "base/threading/sequenced_worker_pool.h" #include "base/threading/thread_restrictions.h" #include "base/time/time.h" #include "base/values.h" @@ -307,9 +306,8 @@ for (size_t i = 0; i < size; ++i) { const GURL url(urls[i]); EXPECT_TRUE(url.is_valid()); - filter->AddUrlInterceptor(url, - URLRequestMockHTTPJob::CreateInterceptor( - base_path, BrowserThread::GetBlockingPool())); + filter->AddUrlInterceptor( + url, URLRequestMockHTTPJob::CreateInterceptor(base_path)); } } @@ -495,7 +493,7 @@ // Updates of the URLBlacklist are done on IO, after building the blacklist // on the blocking pool, which is initiated from IO. content::RunAllPendingInMessageLoop(BrowserThread::IO); - BrowserThread::GetBlockingPool()->FlushForTesting(); + content::RunAllBlockingPoolTasksUntilIdle(); content::RunAllPendingInMessageLoop(BrowserThread::IO); } @@ -658,8 +656,7 @@ PathService::Get(content::DIR_TEST_DATA, &root_http); BrowserThread::PostTaskAndReply( BrowserThread::IO, FROM_HERE, - base::BindOnce(URLRequestMockHTTPJob::AddUrlHandlers, root_http, - make_scoped_refptr(BrowserThread::GetBlockingPool())), + base::BindOnce(URLRequestMockHTTPJob::AddUrlHandlers, root_http), base::MessageLoop::current()->QuitWhenIdleClosure()); content::RunMessageLoop(); }
diff --git a/chrome/browser/prerender/prerender_test_utils.cc b/chrome/browser/prerender/prerender_test_utils.cc index 05979120..fb07027 100644 --- a/chrome/browser/prerender/prerender_test_utils.cc +++ b/chrome/browser/prerender/prerender_test_utils.cc
@@ -15,8 +15,6 @@ #include "base/memory/ptr_util.h" #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" -#include "base/task_scheduler/post_task.h" -#include "base/threading/sequenced_worker_pool.h" #include "chrome/browser/loader/chrome_resource_dispatcher_host_delegate.h" #include "chrome/browser/prerender/prerender_manager.h" #include "chrome/browser/prerender/prerender_manager_factory.h" @@ -57,13 +55,7 @@ MockHTTPJob(net::URLRequest* request, net::NetworkDelegate* delegate, const base::FilePath& file) - : net::URLRequestMockHTTPJob( - request, - delegate, - file, - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BACKGROUND, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})) {} + : net::URLRequestMockHTTPJob(request, delegate, file) {} void set_start_callback(const base::Closure& start_callback) { start_callback_ = start_callback; @@ -194,11 +186,7 @@ callback_.Run(request); return new HangingURLRequestJob(request, network_delegate); } - return new net::URLRequestMockHTTPJob( - request, network_delegate, file_, - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BACKGROUND, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); + return new net::URLRequestMockHTTPJob(request, network_delegate, file_); } private: @@ -817,8 +805,7 @@ void CreateMockInterceptorOnIO(const GURL& url, const base::FilePath& file) { CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); net::URLRequestFilter::GetInstance()->AddUrlInterceptor( - url, net::URLRequestMockHTTPJob::CreateInterceptorForSingleFile( - file, content::BrowserThread::GetBlockingPool())); + url, net::URLRequestMockHTTPJob::CreateInterceptorForSingleFile(file)); } void CreateHangingFirstRequestInterceptor(
diff --git a/chrome/browser/resources/device_log_ui/device_log_ui.html b/chrome/browser/resources/device_log_ui/device_log_ui.html index 30a1073..50963fe 100644 --- a/chrome/browser/resources/device_log_ui/device_log_ui.html +++ b/chrome/browser/resources/device_log_ui/device_log_ui.html
@@ -9,7 +9,7 @@ <script src="chrome://device-log/strings.js"></script> <script src="chrome://device-log/device_log_ui.js"></script> </head> -<body style="fontFamily:$i18n{fontfamily};fontSize:$i18n{fontsize};"> +<body style="font-family: $i18n{fontfamily}; font-size: $i18n{fontsize};"> <div id="header"> <p>$i18n{autoRefreshText}</p> </div>
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_fetcher_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_fetcher_win.cc index eb0b309..2d20c82 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_fetcher_win.cc +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_fetcher_win.cc
@@ -18,6 +18,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" +#include "base/sequenced_task_runner.h" #include "base/strings/utf_string_conversions.h" #include "base/task_runner_util.h" #include "base/task_scheduler/post_task.h" @@ -26,7 +27,6 @@ #include "chrome/common/channel_info.h" #include "components/data_use_measurement/core/data_use_user_data.h" #include "components/version_info/version_info.h" -#include "content/public/browser/browser_thread.h" #include "net/base/load_flags.h" #include "net/http/http_request_headers.h" #include "net/http/http_status_code.h" @@ -90,7 +90,7 @@ // We will take ownership of the scoped temp directory once we know that the // fetch has succeeded. Must be deleted on a sequence where IO is allowed. - std::unique_ptr<base::ScopedTempDir, content::BrowserThread::DeleteOnIOThread> + std::unique_ptr<base::ScopedTempDir, base::OnTaskRunnerDeleter> scoped_temp_dir_; base::FilePath temp_file_; @@ -107,7 +107,8 @@ blocking_task_runner_(base::CreateSequencedTaskRunnerWithTraits( {base::MayBlock(), base::TaskPriority::BACKGROUND, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})), - scoped_temp_dir_(new base::ScopedTempDir()) { + scoped_temp_dir_(new base::ScopedTempDir(), + base::OnTaskRunnerDeleter(blocking_task_runner_)) { base::PostTaskAndReplyWithResult( blocking_task_runner_.get(), FROM_HERE, base::Bind(&ChromeCleanerFetcher::CreateTemporaryDirectory,
diff --git a/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc b/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc index cf5a8ac..34fc79dd 100644 --- a/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc +++ b/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc
@@ -10,7 +10,6 @@ #include "base/strings/string_split.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_command_line.h" -#include "base/threading/sequenced_worker_pool.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/profiles/profile_window.h" @@ -2007,12 +2006,8 @@ URLRequestObsoleteTLSJob(net::URLRequest* request, net::NetworkDelegate* network_delegate, const base::FilePath& file_path, - scoped_refptr<net::X509Certificate> cert, - scoped_refptr<base::TaskRunner> task_runner) - : net::URLRequestMockHTTPJob(request, - network_delegate, - file_path, - task_runner), + scoped_refptr<net::X509Certificate> cert) + : net::URLRequestMockHTTPJob(request, network_delegate, file_path), cert_(std::move(cert)) {} void GetResponseInfo(net::HttpResponseInfo* info) override { @@ -2039,10 +2034,8 @@ public: URLRequestNonsecureInterceptor( const base::FilePath& base_path, - scoped_refptr<base::SequencedWorkerPool> worker_pool, scoped_refptr<net::X509Certificate> cert) : base_path_(base_path), - worker_pool_(std::move(worker_pool)), cert_(std::move(cert)) {} ~URLRequestNonsecureInterceptor() override {} @@ -2051,15 +2044,12 @@ net::URLRequestJob* MaybeInterceptRequest( net::URLRequest* request, net::NetworkDelegate* network_delegate) const override { - return new URLRequestObsoleteTLSJob( - request, network_delegate, base_path_, cert_, - worker_pool_->GetTaskRunnerWithShutdownBehavior( - base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); + return new URLRequestObsoleteTLSJob(request, network_delegate, base_path_, + cert_); } private: const base::FilePath base_path_; - const scoped_refptr<base::SequencedWorkerPool> worker_pool_; const scoped_refptr<net::X509Certificate> cert_; DISALLOW_COPY_AND_ASSIGN(URLRequestNonsecureInterceptor); @@ -2068,15 +2058,13 @@ // Installs a handler to serve HTTPS requests to // |kMockNonsecureHostname| with connections that have obsolete TLS // settings. -void AddNonsecureUrlHandler( - const base::FilePath& base_path, - scoped_refptr<net::X509Certificate> cert, - scoped_refptr<base::SequencedWorkerPool> worker_pool) { +void AddNonsecureUrlHandler(const base::FilePath& base_path, + scoped_refptr<net::X509Certificate> cert) { net::URLRequestFilter* filter = net::URLRequestFilter::GetInstance(); filter->AddHostnameInterceptor( "https", kMockNonsecureHostname, std::unique_ptr<net::URLRequestInterceptor>( - new URLRequestNonsecureInterceptor(base_path, worker_pool, cert))); + new URLRequestNonsecureInterceptor(base_path, cert))); } class BrowserTestNonsecureURLRequest : public InProcessBrowserTest { @@ -2095,9 +2083,7 @@ serve_file = serve_file.Append(FILE_PATH_LITERAL("title1.html")); content::BrowserThread::PostTask( content::BrowserThread::IO, FROM_HERE, - base::Bind( - &AddNonsecureUrlHandler, serve_file, cert_, - make_scoped_refptr(content::BrowserThread::GetBlockingPool()))); + base::Bind(&AddNonsecureUrlHandler, serve_file, cert_)); } private:
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 02d890b..d8b19e3 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -2375,6 +2375,8 @@ "cocoa/accelerator_utils_cocoa.mm", "cocoa/accelerators_cocoa.h", "cocoa/accelerators_cocoa.mm", + "cocoa/animated_icon.h", + "cocoa/animated_icon.mm", "cocoa/applescript/apple_event_util.h", "cocoa/applescript/apple_event_util.mm", "cocoa/applescript/bookmark_folder_applescript.h",
diff --git a/chrome/browser/ui/ash/ash_init.cc b/chrome/browser/ui/ash/ash_init.cc index e99e43e..bd91d7db 100644 --- a/chrome/browser/ui/ash/ash_init.cc +++ b/chrome/browser/ui/ash/ash_init.cc
@@ -36,7 +36,6 @@ #include "chromeos/accelerometer/accelerometer_reader.h" #include "chromeos/chromeos_switches.h" #include "chromeos/login/login_state.h" -#include "content/public/browser/browser_thread.h" #include "content/public/browser/context_factory.h" #include "content/public/common/service_manager_connection.h" #include "ui/aura/env.h" @@ -56,7 +55,6 @@ shell_init_params.context_factory = content::GetContextFactory(); shell_init_params.context_factory_private = content::GetContextFactoryPrivate(); - shell_init_params.blocking_pool = content::BrowserThread::GetBlockingPool(); ash::Shell::CreateInstance(shell_init_params); } @@ -81,7 +79,6 @@ automatically_create_display_roots); aura::Env::GetInstance()->SetWindowTreeClient(window_tree_client.get()); window_manager->Init(std::move(window_tree_client), - content::BrowserThread::GetBlockingPool(), base::MakeUnique<ChromeShellDelegate>()); CHECK(window_manager->WaitForInitialDisplays()); return window_manager;
diff --git a/chrome/browser/ui/cocoa/animated_icon.h b/chrome/browser/ui/cocoa/animated_icon.h new file mode 100644 index 0000000..b932785e --- /dev/null +++ b/chrome/browser/ui/cocoa/animated_icon.h
@@ -0,0 +1,59 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_COCOA_ANIMATED_ICON_H_ +#define CHROME_BROWSER_UI_COCOA_ANIMATED_ICON_H_ + +#import <Cocoa/Cocoa.h> + +#include <memory> + +#include "base/macros.h" +#include "base/time/time.h" +#include "ui/gfx/animation/animation_delegate.h" +#include "ui/gfx/vector_icon_types.h" + +namespace gfx { + +class LinearAnimation; + +} // namespace gfx + +// This class hosts a vector icon that defines transitions. It can be in the +// start steady state, the end steady state, or transitioning in between. +class AnimatedIcon : public gfx::AnimationDelegate { + public: + AnimatedIcon(const gfx::VectorIcon& icon, NSView* host_view); + ~AnimatedIcon() override; + + void set_color(SkColor color) { color_ = color; } + + // Animates the icon. + void Animate(); + + // Paints the icon on the current drawing context, centered in |frame|. + // Requires a NSGraphicsContext to be present. + void PaintIcon(NSRect frame); + + // gfx::AnimationDelegate: + void AnimationEnded(const gfx::Animation* animation) override; + void AnimationProgressed(const gfx::Animation* animation) override; + + private: + const gfx::VectorIcon& icon_; + + // The NSView object that's displaying the icon. + NSView* const host_view_; + + // The length of the animation. + const base::TimeDelta duration_; + + std::unique_ptr<gfx::LinearAnimation> animation_; + + SkColor color_; + + DISALLOW_COPY_AND_ASSIGN(AnimatedIcon); +}; + +#endif // CHROME_BROWSER_UI_COCOA_ANIMATED_ICON_H_
diff --git a/chrome/browser/ui/cocoa/animated_icon.mm b/chrome/browser/ui/cocoa/animated_icon.mm new file mode 100644 index 0000000..af45966 --- /dev/null +++ b/chrome/browser/ui/cocoa/animated_icon.mm
@@ -0,0 +1,43 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/cocoa/animated_icon.h" + +#include "base/memory/ptr_util.h" +#include "ui/gfx/animation/linear_animation.h" +#include "ui/gfx/canvas_skia_paint.h" +#include "ui/gfx/paint_vector_icon.h" + +AnimatedIcon::AnimatedIcon(const gfx::VectorIcon& icon, NSView* host_view) + : icon_(icon), + host_view_(host_view), + duration_(gfx::GetDurationOfAnimation(icon)), + animation_(base::MakeUnique<gfx::LinearAnimation>(this)) { + animation_->SetDuration(duration_.InMilliseconds()); +} + +AnimatedIcon::~AnimatedIcon() {} + +void AnimatedIcon::Animate() { + animation_->Start(); +} + +void AnimatedIcon::PaintIcon(NSRect frame) { + gfx::CanvasSkiaPaint canvas(frame, false); + canvas.set_composite_alpha(true); + + int size = GetDefaultSizeOfVectorIcon(icon_); + canvas.Translate( + gfx::Vector2d((NSWidth(frame) - size) / 2, (NSHeight(frame) - size) / 2)); + base::TimeDelta elapsed = animation_->GetCurrentValue() * duration_; + gfx::PaintVectorIcon(&canvas, icon_, color_, elapsed); + + canvas.Restore(); +} + +void AnimatedIcon::AnimationEnded(const gfx::Animation* animation) {} + +void AnimatedIcon::AnimationProgressed(const gfx::Animation* animation) { + [host_view_ setNeedsDisplay:YES]; +}
diff --git a/chrome/browser/ui/cocoa/app_menu/app_menu_controller.mm b/chrome/browser/ui/cocoa/app_menu/app_menu_controller.mm index c333a96..e5f135a 100644 --- a/chrome/browser/ui/cocoa/app_menu/app_menu_controller.mm +++ b/chrome/browser/ui/cocoa/app_menu/app_menu_controller.mm
@@ -30,6 +30,7 @@ #import "chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h" #import "chrome/browser/ui/cocoa/extensions/browser_actions_controller.h" #import "chrome/browser/ui/cocoa/l10n_util.h" +#import "chrome/browser/ui/cocoa/toolbar/app_toolbar_button.h" #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" #include "chrome/browser/ui/toolbar/app_menu_model.h" #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h" @@ -372,6 +373,13 @@ [[buttonViewController_ zoomFullScreen] setImage:icon]; menuOpenTime_ = base::TimeTicks::Now(); + + BrowserWindowController* bwc = [BrowserWindowController + browserWindowControllerForWindow:browser_->window()->GetNativeWindow()]; + + AppToolbarButton* appMenuButton = + static_cast<AppToolbarButton*>([[bwc toolbarController] appMenuButton]); + [appMenuButton animateIfPossible]; } - (void)menuDidClose:(NSMenu*)menu {
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm index 0970603..710ff90 100644 --- a/chrome/browser/ui/cocoa/browser_window_controller.mm +++ b/chrome/browser/ui/cocoa/browser_window_controller.mm
@@ -78,6 +78,7 @@ #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" #import "chrome/browser/ui/cocoa/tabs/tab_view.h" +#import "chrome/browser/ui/cocoa/toolbar/app_toolbar_button.h" #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" #include "chrome/browser/ui/cocoa/translate/translate_bubble_bridge_views.h" #import "chrome/browser/ui/cocoa/translate/translate_bubble_controller.h" @@ -1527,6 +1528,12 @@ - (void)onTabInsertedInForeground:(BOOL)inForeground { if ([self isInAnyFullscreenMode] && !inForeground) [[self fullscreenToolbarController] revealToolbarForTabStripChanges]; + + if (inForeground) { + AppToolbarButton* appMenuButton = + static_cast<AppToolbarButton*>([toolbarController_ appMenuButton]); + [appMenuButton animateIfPossible]; + } } - (void)userChangedTheme {
diff --git a/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.h b/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.h index bc4ef68..8b9daa61 100644 --- a/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.h +++ b/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.h
@@ -12,17 +12,24 @@ #import "chrome/browser/ui/cocoa/menu_button.h" #include "chrome/browser/ui/toolbar/app_menu_icon_controller.h" +class AnimatedIcon; + // Button for the app toolbar button. @interface AppToolbarButton : MenuButton { @private AppMenuIconController::Severity severity_; AppMenuIconController::IconType type_; + + // Used for animating and drawing the icon. + std::unique_ptr<AnimatedIcon> animatedIcon_; } - (void)setSeverity:(AppMenuIconController::Severity)severity iconType:(AppMenuIconController::IconType)iconType shouldAnimate:(BOOL)shouldAnimate; +- (void)animateIfPossible; + @end #endif // CHROME_BROWSER_UI_COCOA_TOOLBAR_APP_TOOLBAR_BUTTON_H_
diff --git a/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.mm b/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.mm index 14396d5..2027435 100644 --- a/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.mm +++ b/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.mm
@@ -4,10 +4,15 @@ #import "chrome/browser/ui/cocoa/toolbar/app_toolbar_button.h" +#include "base/command_line.h" #include "base/macros.h" #include "chrome/app/vector_icons/vector_icons.h" +#import "chrome/browser/themes/theme_properties.h" +#include "chrome/browser/themes/theme_service.h" +#include "chrome/browser/ui/cocoa/animated_icon.h" #import "chrome/browser/ui/cocoa/themed_window.h" #import "chrome/browser/ui/cocoa/view_id_util.h" +#include "chrome/common/chrome_switches.h" #include "chrome/grit/chromium_strings.h" #include "ui/base/l10n/l10n_util_mac.h" #include "ui/base/material_design/material_design_controller.h" @@ -16,6 +21,9 @@ @interface AppToolbarButton () - (void)commonInit; +- (void)updateAnimatedIconColor; +- (SkColor)vectorIconBaseColor:(BOOL)themeIsDark; +- (void)updateAnimatedIconColor; @end @implementation AppToolbarButton @@ -23,14 +31,42 @@ - (instancetype)initWithFrame:(NSRect)frame { if ((self = [super initWithFrame:frame])) { [self commonInit]; + + base::CommandLine* commandLine = base::CommandLine::ForCurrentProcess(); + if (commandLine->HasSwitch(switches::kEnableNewAppMenuIcon)) { + animatedIcon_.reset(new AnimatedIcon(kBrowserToolsAnimatedIcon, self)); + [self updateAnimatedIconColor]; + + NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; + [center addObserver:self + selector:@selector(themeDidChangeNotification:) + name:kBrowserThemeDidChangeNotification + object:nil]; + } } return self; } +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [super dealloc]; +} + - (void)awakeFromNib { [self commonInit]; } +- (void)viewDidMoveToWindow { + [self updateAnimatedIconColor]; +} + +- (void)drawRect:(NSRect)frame { + [super drawRect:frame]; + + if (animatedIcon_) + animatedIcon_->PaintIcon(frame); +} + - (void)commonInit { view_id_util::SetID(self, VIEW_ID_APP_MENU); severity_ = AppMenuIconController::Severity::NONE; @@ -38,7 +74,30 @@ [self setToolTip:l10n_util::GetNSString(IDS_APPMENU_TOOLTIP)]; } +- (SkColor)vectorIconBaseColor:(BOOL)themeIsDark { + const ui::ThemeProvider* provider = [[self window] themeProvider]; + return themeIsDark ? SK_ColorWHITE + : (provider && provider->ShouldIncreaseContrast() + ? SK_ColorBLACK + : gfx::kChromeIconGrey); +} + +- (void)updateAnimatedIconColor { + if (!animatedIcon_) + return; + + const ui::ThemeProvider* provider = [[self window] themeProvider]; + BOOL themeIsDark = [[self window] hasDarkTheme]; + SkColor color = provider && provider->UsingSystemTheme() + ? [self vectorIconColor:themeIsDark] + : [self vectorIconBaseColor:themeIsDark]; + animatedIcon_->set_color(color); +} + - (const gfx::VectorIcon*)vectorIcon { + if (animatedIcon_) + return nullptr; + switch (type_) { case AppMenuIconController::IconType::NONE: DCHECK_EQ(severity_, AppMenuIconController::Severity::NONE); @@ -54,13 +113,9 @@ } - (SkColor)vectorIconColor:(BOOL)themeIsDark { - const ui::ThemeProvider* provider = [[self window] themeProvider]; switch (severity_) { case AppMenuIconController::Severity::NONE: - return themeIsDark ? SK_ColorWHITE - : (provider && provider->ShouldIncreaseContrast() - ? SK_ColorBLACK - : gfx::kChromeIconGrey); + return [self vectorIconBaseColor:themeIsDark]; break; case AppMenuIconController::Severity::LOW: @@ -86,9 +141,24 @@ if (severity != severity_ || type != type_) { severity_ = severity; type_ = type; - // Update the button state images with the new severity color or icon type. + + if (animatedIcon_) { + [self updateAnimatedIconColor]; + animatedIcon_->Animate(); + } + // Update the button state images with the new severity color or icon + // type. [self resetButtonStateImages]; } } +- (void)themeDidChangeNotification:(NSNotification*)aNotification { + [self updateAnimatedIconColor]; +} + +- (void)animateIfPossible { + if (animatedIcon_ && severity_ != AppMenuIconController::Severity::NONE) + animatedIcon_->Animate(); +} + @end
diff --git a/chrome/browser/ui/libgtkui/gtk_ui.cc b/chrome/browser/ui/libgtkui/gtk_ui.cc index eb8eb01..d8ce7ba 100644 --- a/chrome/browser/ui/libgtkui/gtk_ui.cc +++ b/chrome/browser/ui/libgtkui/gtk_ui.cc
@@ -312,52 +312,15 @@ return params; } -float GtkDpiToScaleFactor(int dpi) { - // GTK multiplies the DPI by 1024 before storing it. - return dpi / (1024 * kDefaultDPI); -} - -gint GetGdkScreenSettingInt(const char* setting_name) { - GValue value = G_VALUE_INIT; - g_value_init(&value, G_TYPE_INT); - if (!gdk_screen_get_setting(gdk_screen_get_default(), setting_name, &value)) - return -1; - return g_value_get_int(&value); -} - -float GetScaleFromGdkScreenSettings() { - gint window_scale = GetGdkScreenSettingInt("gdk-window-scaling-factor"); - if (window_scale <= 0) - return -1; - gint font_dpi = GetGdkScreenSettingInt("gdk-unscaled-dpi"); - if (font_dpi <= 0) - return -1; - return window_scale * GtkDpiToScaleFactor(font_dpi); -} - -float GetScaleFromXftDPI() { - GtkSettings* gtk_settings = gtk_settings_get_default(); - CHECK(gtk_settings); - gint gtk_dpi = -1; - g_object_get(gtk_settings, "gtk-xft-dpi", >k_dpi, nullptr); - if (gtk_dpi <= 0) - return -1; - return GtkDpiToScaleFactor(gtk_dpi); -} - float GetRawDeviceScaleFactor() { if (display::Display::HasForceDeviceScaleFactor()) return display::Display::GetForcedDeviceScaleFactor(); - float scale = GetScaleFromGdkScreenSettings(); - if (scale > 0) - return scale; - - scale = GetScaleFromXftDPI(); - if (scale > 0) - return scale; - - return 1; + GdkScreen* screen = gdk_screen_get_default(); + gint scale = gdk_screen_get_monitor_scale_factor( + screen, gdk_screen_get_primary_monitor(screen)); + gdouble resolution = gdk_screen_get_resolution(screen); + return resolution <= 0 ? scale : resolution * scale / kDefaultDPI; } views::LinuxUI::NonClientMiddleClickAction GetDefaultMiddleClickAction() {
diff --git a/chrome/browser/ui/libgtkui/print_dialog_gtk.cc b/chrome/browser/ui/libgtkui/print_dialog_gtk.cc index 8ac31ac..9a79bce 100644 --- a/chrome/browser/ui/libgtkui/print_dialog_gtk.cc +++ b/chrome/browser/ui/libgtkui/print_dialog_gtk.cc
@@ -17,6 +17,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/strings/utf_string_conversions.h" +#include "base/task_scheduler/post_task.h" #include "base/values.h" #include "chrome/browser/ui/libgtkui/gtk_util.h" #include "chrome/browser/ui/libgtkui/printing_gtk_util.h" @@ -530,9 +531,12 @@ LOG(ERROR) << "Printing failed: " << error->message; if (print_job) g_object_unref(print_job); - BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, - base::BindOnce(base::IgnoreResult(&base::DeleteFile), - path_to_pdf_, false)); + + base::PostTaskWithTraits(FROM_HERE, + {base::MayBlock(), base::TaskPriority::BACKGROUND, + base::TaskShutdownBehavior::BLOCK_SHUTDOWN}, + base::BindOnce(base::IgnoreResult(&base::DeleteFile), + path_to_pdf_, false)); // Printing finished. Matches AddRef() in PrintDocument(); Release(); }
diff --git a/chrome/browser/ui/libgtkui/select_file_dialog_impl_kde.cc b/chrome/browser/ui/libgtkui/select_file_dialog_impl_kde.cc index 53e4230..f609b4b 100644 --- a/chrome/browser/ui/libgtkui/select_file_dialog_impl_kde.cc +++ b/chrome/browser/ui/libgtkui/select_file_dialog_impl_kde.cc
@@ -21,6 +21,8 @@ #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" +#include "base/task_scheduler/post_task.h" +#include "base/task_scheduler/task_traits.h" #include "base/threading/thread_restrictions.h" #include "chrome/browser/ui/libgtkui/select_file_dialog_impl.h" #include "content/public/browser/browser_thread.h" @@ -173,6 +175,9 @@ // dialogs. This should only be accessed on the UI thread. std::set<XID> parents_; + // A task runner for blocking pipe reads. + scoped_refptr<base::SequencedTaskRunner> pipe_task_runner_; + DISALLOW_COPY_AND_ASSIGN(SelectFileDialogImplKDE); }; @@ -203,7 +208,10 @@ ui::SelectFilePolicy* policy, base::nix::DesktopEnvironment desktop) : SelectFileDialogImpl(listener, policy), - desktop_(desktop) { + desktop_(desktop), + pipe_task_runner_(base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock(), base::TaskPriority::USER_BLOCKING, + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})) { DCHECK(desktop_ == base::nix::DESKTOP_ENVIRONMENT_KDE3 || desktop_ == base::nix::DESKTOP_ENVIRONMENT_KDE4 || desktop_ == base::nix::DESKTOP_ENVIRONMENT_KDE5); @@ -278,7 +286,7 @@ } std::string SelectFileDialogImplKDE::GetMimeTypeFilterString() { - DCHECK_CURRENTLY_ON(BrowserThread::FILE); + DCHECK(pipe_task_runner_->RunsTasksInCurrentSequence()); std::string filter_string; // We need a filter set because the same mime type can appear multiple times. std::set<std::string> filter_set; @@ -306,7 +314,7 @@ std::unique_ptr<SelectFileDialogImplKDE::KDialogOutputParams> SelectFileDialogImplKDE::CallKDialogOutput(const KDialogParams& params) { - DCHECK_CURRENTLY_ON(BrowserThread::FILE); + DCHECK(pipe_task_runner_->RunsTasksInCurrentSequence()); base::CommandLine::StringVector cmd_vector; cmd_vector.push_back(kKdialogBinary); base::CommandLine command_line(cmd_vector); @@ -396,61 +404,62 @@ int title_message_id = (type == SELECT_UPLOAD_FOLDER) ? IDS_SELECT_UPLOAD_FOLDER_DIALOG_TITLE : IDS_SELECT_FOLDER_DIALOG_TITLE; - BrowserThread::PostTaskAndReplyWithResult( - BrowserThread::FILE, FROM_HERE, - base::Bind( + base::PostTaskAndReplyWithResult( + pipe_task_runner_.get(), FROM_HERE, + base::BindOnce( &SelectFileDialogImplKDE::CallKDialogOutput, this, KDialogParams( "--getexistingdirectory", GetTitle(title, title_message_id), default_path.empty() ? *last_opened_path_ : default_path, parent, false, false)), - base::Bind(&SelectFileDialogImplKDE::OnSelectSingleFolderDialogResponse, - this, parent, params)); + base::BindOnce( + &SelectFileDialogImplKDE::OnSelectSingleFolderDialogResponse, this, + parent, params)); } void SelectFileDialogImplKDE::CreateFileOpenDialog( const std::string& title, const base::FilePath& default_path, XID parent, void* params) { - BrowserThread::PostTaskAndReplyWithResult( - BrowserThread::FILE, FROM_HERE, - base::Bind( + base::PostTaskAndReplyWithResult( + pipe_task_runner_.get(), FROM_HERE, + base::BindOnce( &SelectFileDialogImplKDE::CallKDialogOutput, this, KDialogParams( "--getopenfilename", GetTitle(title, IDS_OPEN_FILE_DIALOG_TITLE), default_path.empty() ? *last_opened_path_ : default_path, parent, true, false)), - base::Bind(&SelectFileDialogImplKDE::OnSelectSingleFileDialogResponse, - this, parent, params)); + base::BindOnce(&SelectFileDialogImplKDE::OnSelectSingleFileDialogResponse, + this, parent, params)); } void SelectFileDialogImplKDE::CreateMultiFileOpenDialog( const std::string& title, const base::FilePath& default_path, XID parent, void* params) { - BrowserThread::PostTaskAndReplyWithResult( - BrowserThread::FILE, FROM_HERE, - base::Bind( + base::PostTaskAndReplyWithResult( + pipe_task_runner_.get(), FROM_HERE, + base::BindOnce( &SelectFileDialogImplKDE::CallKDialogOutput, this, KDialogParams( "--getopenfilename", GetTitle(title, IDS_OPEN_FILES_DIALOG_TITLE), default_path.empty() ? *last_opened_path_ : default_path, parent, true, true)), - base::Bind(&SelectFileDialogImplKDE::OnSelectMultiFileDialogResponse, - this, parent, params)); + base::BindOnce(&SelectFileDialogImplKDE::OnSelectMultiFileDialogResponse, + this, parent, params)); } void SelectFileDialogImplKDE::CreateSaveAsDialog( const std::string& title, const base::FilePath& default_path, XID parent, void* params) { - BrowserThread::PostTaskAndReplyWithResult( - BrowserThread::FILE, FROM_HERE, - base::Bind( + base::PostTaskAndReplyWithResult( + pipe_task_runner_.get(), FROM_HERE, + base::BindOnce( &SelectFileDialogImplKDE::CallKDialogOutput, this, KDialogParams("--getsavefilename", GetTitle(title, IDS_SAVE_AS_DIALOG_TITLE), default_path.empty() ? *last_saved_path_ : default_path, parent, true, false)), - base::Bind(&SelectFileDialogImplKDE::OnSelectSingleFileDialogResponse, - this, parent, params)); + base::BindOnce(&SelectFileDialogImplKDE::OnSelectSingleFileDialogResponse, + this, parent, params)); } void SelectFileDialogImplKDE::SelectSingleFileHelper(
diff --git a/chrome/browser/ui/search/new_tab_page_interceptor_browsertest.cc b/chrome/browser/ui/search/new_tab_page_interceptor_browsertest.cc index dba9d0be..3a895d9 100644 --- a/chrome/browser/ui/search/new_tab_page_interceptor_browsertest.cc +++ b/chrome/browser/ui/search/new_tab_page_interceptor_browsertest.cc
@@ -5,7 +5,6 @@ #include "base/files/file_path.h" #include "base/memory/ptr_util.h" #include "base/strings/utf_string_conversions.h" -#include "base/threading/sequenced_worker_pool.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/search/search.h" #include "chrome/browser/search_engines/template_url_service_factory.h" @@ -26,15 +25,6 @@ using content::BrowserThread; -namespace { - -void SetUrlRequestMock(const base::FilePath& path) { - net::URLRequestMockHTTPJob::AddUrlHandlers(path, - BrowserThread::GetBlockingPool()); -} - -} // namespace - class NewTabPageInterceptorTest : public InProcessBrowserTest { public: NewTabPageInterceptorTest() {} @@ -42,8 +32,9 @@ void SetUpOnMainThread() override { base::FilePath path = ui_test_utils::GetTestFilePath(base::FilePath(), base::FilePath()); - BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, - base::BindOnce(&SetUrlRequestMock, path)); + BrowserThread::PostTask( + BrowserThread::IO, FROM_HERE, + base::BindOnce(&net::URLRequestMockHTTPJob::AddUrlHandlers, path)); } void ChangeDefaultSearchProvider(const char* new_tab_path) {
diff --git a/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc index a72b89e..08ad90c8 100644 --- a/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc +++ b/chrome/browser/ui/views/payments/payment_request_completion_status_metrics_browsertest.cc
@@ -51,6 +51,14 @@ PayWithCreditCardAndWait(base::ASCIIToUTF16("123")); // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.PayClicked", 1, 1); + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.ReceivedInstrumentDetails", 1, 1); histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Completed", 1, 1); } @@ -71,6 +79,10 @@ WaitForObservedEvent(); // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); histogram_tester.ExpectUniqueSample( "PaymentRequest.CheckoutFunnel.Aborted", JourneyLogger::ABORT_REASON_MERCHANT_NAVIGATION, 1); @@ -94,6 +106,10 @@ WaitForObservedEvent(); // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); histogram_tester.ExpectUniqueSample( "PaymentRequest.CheckoutFunnel.Aborted", JourneyLogger::ABORT_REASON_MERCHANT_NAVIGATION, 1); @@ -118,6 +134,10 @@ WaitForObservedEvent(); // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); histogram_tester.ExpectUniqueSample( "PaymentRequest.CheckoutFunnel.Aborted", JourneyLogger::ABORT_REASON_ABORTED_BY_MERCHANT, 1); @@ -136,6 +156,10 @@ NavigateTo("/payment_request_email_test.html"); // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); histogram_tester.ExpectUniqueSample( "PaymentRequest.CheckoutFunnel.Aborted", JourneyLogger::ABORT_REASON_USER_NAVIGATION, 1); @@ -154,6 +178,10 @@ ClickOnCancel(); // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); histogram_tester.ExpectUniqueSample( "PaymentRequest.CheckoutFunnel.Aborted", JourneyLogger::ABORT_REASON_ABORTED_BY_USER, 1); @@ -174,6 +202,10 @@ WaitForObservedEvent(); // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); histogram_tester.ExpectUniqueSample( "PaymentRequest.CheckoutFunnel.Aborted", JourneyLogger::ABORT_REASON_ABORTED_BY_USER, 1); @@ -194,6 +226,10 @@ WaitForObservedEvent(); // Make sure the metrics are logged correctly. + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); histogram_tester.ExpectUniqueSample( "PaymentRequest.CheckoutFunnel.Aborted", JourneyLogger::ABORT_REASON_USER_NAVIGATION, 1);
diff --git a/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc index a6cf5d2..b017fc6 100644 --- a/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc +++ b/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc
@@ -44,6 +44,14 @@ ResetEventObserver(DialogEvent::DIALOG_CLOSED); PayWithCreditCardAndWait(base::ASCIIToUTF16("123")); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.PayClicked", 1, 1); + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.ReceivedInstrumentDetails", 1, 1); // Expect a credit card as the selected payment instrument in the metrics. histogram_tester.ExpectBucketCount( "PaymentRequest.SelectedPaymentMethod", @@ -72,6 +80,8 @@ ASSERT_TRUE(content::ExecuteScript(web_contents, click_buy_button_js)); WaitForObservedEvent(); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); histogram_tester.ExpectBucketCount( "PaymentRequest.CheckoutFunnel.NoShow", JourneyLogger::NOT_SHOWN_REASON_NO_SUPPORTED_PAYMENT_METHOD, 1); @@ -117,7 +127,15 @@ histogram_tester.GetAllSamples("PaymentRequest.CheckoutFunnel.NoShow") .empty()); - // Expect that the completion was logged correctly. + // Expect that other metrics were logged correctly. + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 1); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.PayClicked", 1, 1); + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.ReceivedInstrumentDetails", 1, 1); histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Completed", 1, 1); } @@ -152,6 +170,15 @@ // Complete the original Payment Request. PayWithCreditCardAndWait(base::ASCIIToUTF16("123"), first_dialog_view); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Initiated", + 1, 2); + histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Shown", 1, + 1); + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.PayClicked", 1, 1); + histogram_tester.ExpectUniqueSample( + "PaymentRequest.CheckoutFunnel.ReceivedInstrumentDetails", 1, 1); + // The metrics should show that the original Payment Request should be // completed and the second one should not have been shown. histogram_tester.ExpectUniqueSample("PaymentRequest.CheckoutFunnel.Completed",
diff --git a/chrome/browser/win/jumplist.cc b/chrome/browser/win/jumplist.cc index 35f07fcb..bbca0370 100644 --- a/chrome/browser/win/jumplist.cc +++ b/chrome/browser/win/jumplist.cc
@@ -431,7 +431,8 @@ link->set_title(!url.title.empty() ? url.title : url_string_wide); link->set_url(url_string); most_visited_pages_.push_back(link); - icon_urls_.emplace_back(std::move(url_string), std::move(link)); + if (most_visited_icons_.find(url_string) == most_visited_icons_.end()) + icon_urls_.emplace_back(std::move(url_string), std::move(link)); } most_visited_should_update_ = true; @@ -459,7 +460,8 @@ link->set_title(current_navigation.title()); link->set_url(url); recently_closed_pages_.push_back(link); - icon_urls_.emplace_back(std::move(url), std::move(link)); + if (recently_closed_icons_.find(url) == recently_closed_icons_.end()) + icon_urls_.emplace_back(std::move(url), std::move(link)); return true; }
diff --git a/chrome/test/base/ash_test_environment_chrome.cc b/chrome/test/base/ash_test_environment_chrome.cc index fa5899f5..1e94c07 100644 --- a/chrome/test/base/ash_test_environment_chrome.cc +++ b/chrome/test/base/ash_test_environment_chrome.cc
@@ -6,18 +6,12 @@ #include "ash/test/ash_test_views_delegate.h" #include "base/memory/ptr_util.h" -#include "base/message_loop/message_loop.h" -#include "content/public/browser/browser_thread.h" #include "ui/views/views_delegate.h" AshTestEnvironmentChrome::AshTestEnvironmentChrome() {} AshTestEnvironmentChrome::~AshTestEnvironmentChrome() {} -base::SequencedWorkerPool* AshTestEnvironmentChrome::GetBlockingPool() { - return content::BrowserThread::GetBlockingPool(); -} - std::unique_ptr<ash::test::AshTestViewsDelegate> AshTestEnvironmentChrome::CreateViewsDelegate() { return base::MakeUnique<ash::test::AshTestViewsDelegate>();
diff --git a/chrome/test/base/ash_test_environment_chrome.h b/chrome/test/base/ash_test_environment_chrome.h index 38199fc..5388d6d 100644 --- a/chrome/test/base/ash_test_environment_chrome.h +++ b/chrome/test/base/ash_test_environment_chrome.h
@@ -14,7 +14,6 @@ ~AshTestEnvironmentChrome() override; // AshTestEnvironment: - base::SequencedWorkerPool* GetBlockingPool() override; std::unique_ptr<ash::test::AshTestViewsDelegate> CreateViewsDelegate() override;
diff --git a/chrome/test/base/view_event_test_platform_part_chromeos.cc b/chrome/test/base/view_event_test_platform_part_chromeos.cc index c68efb61..99e485f 100644 --- a/chrome/test/base/view_event_test_platform_part_chromeos.cc +++ b/chrome/test/base/view_event_test_platform_part_chromeos.cc
@@ -16,7 +16,6 @@ #include "chromeos/audio/cras_audio_handler.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/network/network_handler.h" -#include "content/public/browser/browser_thread.h" #include "device/bluetooth/dbus/bluez_dbus_manager.h" #include "ui/aura/env.h" #include "ui/aura/window_tree_host.h" @@ -66,7 +65,6 @@ init_params.delegate = shell_delegate; init_params.context_factory = context_factory; init_params.context_factory_private = context_factory_private; - init_params.blocking_pool = content::BrowserThread::GetBlockingPool(); base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( switches::kHostWindowBounds, "0+0-1280x800"); ash::Shell::CreateInstance(init_params);
diff --git a/chrome/test/data/payments/.eslintrc.js b/chrome/test/data/payments/.eslintrc.js new file mode 100644 index 0000000..ae5ba4a --- /dev/null +++ b/chrome/test/data/payments/.eslintrc.js
@@ -0,0 +1,97 @@ +// 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. + +module.exports = { + 'env': { + 'browser': true, + 'es6': true, + }, + 'rules': { + 'no-restricted-properties': 0, + 'no-irregular-whitespace': 2, + 'no-unexpected-multiline': 2, + 'valid-jsdoc': [2, { + requireParamDescription: true, + requireReturnDescription: true, + requireReturn: false, + prefer: { + returns: 'return', + }, + }], + 'curly': [2, 'multi-line'], + 'guard-for-in': 2, + 'no-caller': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-invalid-this': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-new-wrappers': 2, + 'no-throw-literal': 2, + 'no-with': 2, + 'no-unused-vars': [2, { + args: 'none', + }], + 'array-bracket-spacing': [2, 'never'], + 'brace-style': 2, + 'camelcase': [2, { + properties: 'never', + }], + 'comma-dangle': [2, 'always-multiline'], + 'comma-spacing': 2, + 'comma-style': 2, + 'computed-property-spacing': 2, + 'eol-last': 2, + 'func-call-spacing': 2, + 'key-spacing': 2, + 'keyword-spacing': 2, + 'linebreak-style': 2, + 'max-len': [2, { + code: 80, + tabWidth: 2, + ignoreUrls: true, + }], + 'new-cap': 2, + 'no-array-constructor': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multiple-empty-lines': [2, { + max: 2, + }], + 'no-new-object': 2, + 'no-trailing-spaces': 2, + 'object-curly-spacing': 2, + 'one-var': [2, { + var: 'never', + let: 'never', + const: 'never', + }], + 'padded-blocks': [2, 'never'], + 'quote-props': [2, 'consistent'], + 'quotes': [2, 'single', { + allowTemplateLiterals: true, + }], + 'require-jsdoc': [2, { + require: { + FunctionDeclaration: true, + MethodDefinition: true, + ClassDeclaration: true, + }, + }], + 'semi-spacing': 2, + 'semi': 2, + 'space-before-blocks': 2, + 'space-before-function-paren': [2, 'never'], + 'spaced-comment': [2, 'always'], + 'arrow-parens': [2, 'always'], + 'constructor-super': 2, + 'generator-star-spacing': [2, 'after'], + 'no-new-symbol': 2, + 'no-this-before-super': 2, + 'no-var': 2, + 'prefer-rest-params': 2, + 'prefer-spread': 2, + 'rest-spread-spacing': 2, + 'yield-star-spacing': [2, 'after'], + }, +};
diff --git a/chrome/test/data/payments/PRESUBMIT.py b/chrome/test/data/payments/PRESUBMIT.py new file mode 100644 index 0000000..8eae247 --- /dev/null +++ b/chrome/test/data/payments/PRESUBMIT.py
@@ -0,0 +1,22 @@ +# 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. + +def _CommonChecks(input_api, output_api): + results = [] + try: + import sys + old_sys_path = sys.path + cwd = input_api.PresubmitLocalPath() + sys.path += [input_api.os_path.join(cwd, '..', '..', '..', '..', 'tools')] + import web_dev_style.presubmit_support + results = web_dev_style.presubmit_support.CheckStyle(input_api, output_api) + finally: + sys.path = old_sys_path + return results + +def CheckChangeOnUpload(input_api, output_api): + return _CommonChecks(input_api, output_api) + +def CheckChangeOnCommit(input_api, output_api): + return _CommonChecks(input_api, output_api)
diff --git a/chrome/test/data/payments/metrics.js b/chrome/test/data/payments/metrics.js index b280f15..0edaa6a 100644 --- a/chrome/test/data/payments/metrics.js +++ b/chrome/test/data/payments/metrics.js
@@ -6,47 +6,68 @@ /* global PaymentRequest:false */ -var request; +let request; /** * Launches the PaymentRequest UI that accepts credit cards. */ -function ccBuy() { // eslint-disable-line no-unused-vars +function ccBuy() { // eslint-disable-line no-unused-vars try { - var details = { - total: {label: 'Total', amount: {currency: 'USD', value: '5.00'}}, + let details = { + total: { + label: 'Total', + amount: { + currency: 'USD', + value: '5.00', + }, + }, shippingOptions: [{ id: 'freeShippingOption', label: 'Free global shipping', - amount: {currency: 'USD', value: '0'}, - selected: true - }] + amount: { + currency: 'USD', + value: '0', + }, + selected: true, + }], }; request = new PaymentRequest( - [{supportedMethods: ['visa']}], { - total: {label: 'Total', amount: {currency: 'USD', value: '5.00'}}, - shippingOptions: [{ - id: 'freeShippingOption', - label: 'Free global shipping', - amount: {currency: 'USD', value: '0'}, - selected: true - }] + [{ + supportedMethods: ['visa'], + }], { + total: { + label: 'Total', + amount: { + currency: 'USD', + value: '5.00', + }, }, - {requestShipping: true}); + shippingOptions: [{ + id: 'freeShippingOption', + label: 'Free global shipping', + amount: { + currency: 'USD', + value: '0', + }, + selected: true, + }], + }, { + requestShipping: true, + }); request.show() - .then(function(resp) { - return resp.complete('success') - }).then(function() { - print(JSON.stringify(resp, undefined, 2)); - }).catch(function(error) { - print(error); - }); + .then(function(resp) { + return resp.complete('success'); + }).then(function() { + print(JSON.stringify(resp, undefined, 2)); + }).catch(function(error) { + print(error); + }); request.addEventListener('shippingaddresschange', function(e) { e.updateWith(new Promise(function(resolve) { // No changes in price based on shipping address change. resolve(details); })); - }) + }); } catch (error) { print(error.message); } @@ -55,27 +76,39 @@ /** * Launches the PaymentRequest UI which accepts only Android Pay. */ -function androidPayBuy() { // eslint-disable-line no-unused-vars +function androidPayBuy() { // eslint-disable-line no-unused-vars try { request = new PaymentRequest( - [{supportedMethods: ['https://android.com/pay']}], { - total: {label: 'Total', amount: {currency: 'USD', value: '5.00'}}, - shippingOptions: [{ - id: 'freeShippingOption', - label: 'Free global shipping', - amount: {currency: 'USD', value: '0'}, - selected: true - }] + [{ + supportedMethods: ['https://android.com/pay'], + }], { + total: { + label: 'Total', + amount: { + currency: 'USD', + value: '5.00', + }, }, - {requestShipping: true}); + shippingOptions: [{ + id: 'freeShippingOption', + label: 'Free global shipping', + amount: { + currency: 'USD', + value: '0', + }, + selected: true, + }], + }, { + requestShipping: true, + }); request.show() - .then(function(resp) { - return resp.complete('success'); - }).then(function() { - print(JSON.stringify(resp, undefined, 2)); - }).catch(function(error) { - print(error); - }); + .then(function(resp) { + return resp.complete('success'); + }).then(function() { + print(JSON.stringify(resp, undefined, 2)); + }).catch(function(error) { + print(error); + }); } catch (error) { print(error.message); } @@ -85,20 +118,28 @@ * Launches the PaymentRequest UI which accepts only Android Pay and does not * require any other information. */ -function androidPaySkipUiBuy() { // eslint-disable-line no-unused-vars +function androidPaySkipUiBuy() { // eslint-disable-line no-unused-vars try { request = new PaymentRequest( - [{supportedMethods: ['https://android.com/pay']}], { - total: {label: 'Total', amount: {currency: 'USD', value: '5.00'}}, - }); + [{ + supportedMethods: ['https://android.com/pay'], + }], { + total: { + label: 'Total', + amount: { + currency: 'USD', + value: '5.00', + }, + }, + }); request.show() - .then(function(resp) { - return resp.complete('success'); - }).then(function() { - print(JSON.stringify(resp, undefined, 2)); - }).catch(function(error) { - print(error); - }); + .then(function(resp) { + return resp.complete('success'); + }).then(function() { + print(JSON.stringify(resp, undefined, 2)); + }).catch(function(error) { + print(error); + }); } catch (error) { print(error.message); } @@ -108,27 +149,39 @@ * Launches the PaymentRequest UI which accepts only an unsupported payment * method. */ -function noSupported() { // eslint-disable-line no-unused-vars +function noSupported() { // eslint-disable-line no-unused-vars try { request = new PaymentRequest( - [{supportedMethods: ['https://randompay.com']}], { - total: {label: 'Total', amount: {currency: 'USD', value: '5.00'}}, - shippingOptions: [{ - id: 'freeShippingOption', - label: 'Free global shipping', - amount: {currency: 'USD', value: '0'}, - selected: true - }] + [{ + supportedMethods: ['https://randompay.com'], + }], { + total: { + label: 'Total', + amount: { + currency: 'USD', + value: '5.00', + }, }, - {requestShipping: true}); + shippingOptions: [{ + id: 'freeShippingOption', + label: 'Free global shipping', + amount: { + currency: 'USD', + value: '0', + }, + selected: true, + }], + }, { + requestShipping: true, + }); request.show() - .then(function(resp) { - return resp.complete('success'); - }).then(function() { - print(JSON.stringify(resp, undefined, 2)); - }).catch(function(error) { - print(error); - }); + .then(function(resp) { + return resp.complete('success'); + }).then(function() { + print(JSON.stringify(resp, undefined, 2)); + }).catch(function(error) { + print(error); + }); } catch (error) { print(error.message); } @@ -137,7 +190,7 @@ /** * Aborts the current PaymentRequest. */ -function abort() { // eslint-disable-line no-unused-vars +function abort() { // eslint-disable-line no-unused-vars try { request.abort().then(function() { print('Aborted'); @@ -147,4 +200,4 @@ } catch (error) { print(error.message); } -} \ No newline at end of file +}
diff --git a/chrome/test/data/payments/util.js b/chrome/test/data/payments/util.js index 4284c7c..d7fe08c7 100644 --- a/chrome/test/data/payments/util.js +++ b/chrome/test/data/payments/util.js
@@ -8,6 +8,6 @@ * Prints the message. * @param {String} msg - The message to print. */ -function print(msg) { // eslint-disable-line no-unused-vars +function print(msg) { // eslint-disable-line no-unused-vars document.getElementById('result').innerHTML = msg; }
diff --git a/chrome/test/data/webui/settings/device_page_tests.js b/chrome/test/data/webui/settings/device_page_tests.js index 227fcfe..f02d8d0 100644 --- a/chrome/test/data/webui/settings/device_page_tests.js +++ b/chrome/test/data/webui/settings/device_page_tests.js
@@ -85,11 +85,31 @@ return { ash: { night_light: { + enabled: { + key: 'ash.night_light.enabled', + type: chrome.settingsPrivate.PrefType.BOOLEAN, + value: false, + }, + color_temperature: { + key: 'ash.night_light.color_temperature', + type: chrome.settingsPrivate.PrefType.NUMBER, + value: 0, + }, schedule_type: { key: 'ash.night_light.schedule_type', type: chrome.settingsPrivate.PrefType.NUMBER, value: 0, }, + custom_start_time: { + key: 'ash.night_light.custom_start_time', + type: chrome.settingsPrivate.PrefType.NUMBER, + value: 0, + }, + custom_end_time: { + key: 'ash.night_light.custom_end_time', + type: chrome.settingsPrivate.PrefType.NUMBER, + value: 0, + }, }, }, settings: {
diff --git a/chromecast/BUILD.gn b/chromecast/BUILD.gn index e2b9e487..02f7185 100644 --- a/chromecast/BUILD.gn +++ b/chromecast/BUILD.gn
@@ -211,6 +211,17 @@ # No way to display URL's on audio only cast devices. gtest_excludes += [ "NavigationEntryTest.NavigationEntryURLs" ] } + if (enable_assistant && !is_cast_desktop_build) { + # Temporarily disable InvalidUUID and DefaultConstructor on assistant + # device builds. Cause of failure is unclear, but it's highly likely it's + # related to them being DEATH tests. These were passing until the + # is_official_build flag was enabled. These tests are considered + # non-critical in this context. (b/62469368) + gtest_excludes += [ + "BluetoothBlocklistTest.InvalidUUID", + "WebBluetoothDeviceIdTest.DefaultConstructor", + ] + } } filters += [ content_unittests_filter ]
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc index 2df4b27..cd8783e 100644 --- a/chromecast/browser/cast_browser_main_parts.cc +++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -236,6 +236,7 @@ {switches::kDisableGpu, ""}, #if defined(OS_ANDROID) {switches::kDisableGLDrawingForTests, ""}, + {switches::kDisableGpuVsync, ""}, {switches::kSkipGpuDataLoading, ""}, {switches::kDisableGpuCompositing, ""}, #endif // defined(OS_ANDROID)
diff --git a/components/chrome_cleaner/public/constants/constants.h b/components/chrome_cleaner/public/constants/constants.h index ad1b8af2..01f9bfc 100644 --- a/components/chrome_cleaner/public/constants/constants.h +++ b/components/chrome_cleaner/public/constants/constants.h
@@ -119,10 +119,6 @@ // user (UI handled by Chrome) and logs will only be uploaded if the user // opted into Extended Safe Browsing Reporting v2. kCleanup = 2, - // The cleaner will run in post-reboot validation mode. No UI will be shown - // to the user and logs will only be uploaded if the user opted into Extended - // Safe Browsing Reporting v2. - kPostRebootValidation = 3, // Auxiliary enumerator for range checking. kNumValues,
diff --git a/components/filesystem/directory_impl.cc b/components/filesystem/directory_impl.cc index 0248c359..1209f6ec 100644 --- a/components/filesystem/directory_impl.cc +++ b/components/filesystem/directory_impl.cc
@@ -251,6 +251,9 @@ } void DirectoryImpl::Flush(FlushCallback callback) { +// On Windows no need to sync directories. Their metadata will be updated when +// files are created, without an explicit sync. +#if !defined(OS_WIN) base::File file(directory_path_, base::File::FLAG_OPEN | base::File::FLAG_READ); if (!file.IsValid()) { @@ -262,7 +265,7 @@ std::move(callback).Run(mojom::FileError::FAILED); return; } - +#endif std::move(callback).Run(mojom::FileError::OK); }
diff --git a/components/flags_ui/resources/apple_flags.html b/components/flags_ui/resources/apple_flags.html index 3760509..54fd5adf 100644 --- a/components/flags_ui/resources/apple_flags.html +++ b/components/flags_ui/resources/apple_flags.html
@@ -14,7 +14,7 @@ <script src="chrome://ui-alternatives/flags.js"></script> <script src="chrome://ui-alternatives/strings.js"></script> </head> -<body style="fontFamily:$i18n{fontfamily};fontSize:$i18n{fontsize}"> +<body style="font-family: $i18n{fontfamily}; font-size: $i18n{fontsize}"> <div id="body-container" style="visibility:hidden"> <div id="flagsTemplate"> <div id="container" class="vbox-container">
diff --git a/components/leveldb/env_mojo.cc b/components/leveldb/env_mojo.cc index ecfc47b5..862431cd 100644 --- a/components/leveldb/env_mojo.cc +++ b/components/leveldb/env_mojo.cc
@@ -218,6 +218,10 @@ leveldb::Status SyncParent() { FileError error = thread_->SyncDirectory(dir_, parent_dir_); + if (error != FileError::OK) { + uma_logger_->RecordOSError(leveldb_env::kSyncParent, + static_cast<base::File::Error>(error)); + } return error == FileError::OK ? Status::OK() : Status::IOError(filename_,
diff --git a/components/neterror/resources/neterror.html b/components/neterror/resources/neterror.html index 4c652ae..9797a377 100644 --- a/components/neterror/resources/neterror.html +++ b/components/neterror/resources/neterror.html
@@ -12,7 +12,7 @@ <script src="neterror.js"></script> <script src="offline.js"></script> </head> -<body id="t" style="fontFamily:$i18n{fontfamily};fontSize:$i18n{fontsize}"> +<body id="t" style="font-family: $i18n{fontfamily}; font-size: $i18n{fontsize}"> <div id="main-frame-error" class="interstitial-wrapper"> <div id="main-content"> <div class="icon"
diff --git a/components/payments/content/payment_request.cc b/components/payments/content/payment_request.cc index a61af2f..a4717e2 100644 --- a/components/payments/content/payment_request.cc +++ b/components/payments/content/payment_request.cc
@@ -140,6 +140,7 @@ } journey_logger_.SetShowCalled(); + journey_logger_.SetEventOccurred(JourneyLogger::EVENT_SHOWN); journey_logger_.SetRequestedInformation( spec_->request_shipping(), spec_->request_payer_email(), spec_->request_payer_phone(), spec_->request_payer_name()); @@ -229,6 +230,8 @@ void PaymentRequest::OnPaymentResponseAvailable( mojom::PaymentResponsePtr response) { + journey_logger_.SetEventOccurred( + JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS); client_->OnPaymentResponse(std::move(response)); } @@ -284,6 +287,7 @@ } void PaymentRequest::Pay() { + journey_logger_.SetEventOccurred(JourneyLogger::EVENT_PAY_CLICKED); journey_logger_.SetSelectedPaymentMethod( JourneyLogger::SELECTED_PAYMENT_METHOD_CREDIT_CARD); state_->GeneratePaymentResponse();
diff --git a/components/spellcheck/browser/android/java/src/org/chromium/components/spellcheck/SpellCheckerSessionBridge.java b/components/spellcheck/browser/android/java/src/org/chromium/components/spellcheck/SpellCheckerSessionBridge.java index b2ce329..25728da 100644 --- a/components/spellcheck/browser/android/java/src/org/chromium/components/spellcheck/SpellCheckerSessionBridge.java +++ b/components/spellcheck/browser/android/java/src/org/chromium/components/spellcheck/SpellCheckerSessionBridge.java
@@ -125,7 +125,12 @@ SuggestionsInfo info = result.getSuggestionsInfoAt(i); ArrayList<String> suggestions_for_word = new ArrayList<String>(); for (int j = 0; j < info.getSuggestionsCount(); ++j) { - suggestions_for_word.add(info.getSuggestionAt(j)); + String suggestion = info.getSuggestionAt(j); + // Remove zero-length space from end of suggestion, if any + if (suggestion.charAt(suggestion.length() - 1) == 0x200b) { + suggestion = suggestion.substring(0, suggestion.length() - 1); + } + suggestions_for_word.add(suggestion); } suggestions.add( suggestions_for_word.toArray(new String[suggestions_for_word.size()]));
diff --git a/components/user_manager/fake_user_manager.cc b/components/user_manager/fake_user_manager.cc index 80799cc3..c046e77 100644 --- a/components/user_manager/fake_user_manager.cc +++ b/components/user_manager/fake_user_manager.cc
@@ -298,7 +298,7 @@ bool FakeUserManager::GetPlatformKnownUserId(const std::string& user_email, const std::string& gaia_id, AccountId* out_account_id) const { - if (user_email == kStubUser) { + if (user_email == kStubUserEmail) { *out_account_id = StubAccountId(); return true; }
diff --git a/components/user_manager/user_names.cc b/components/user_manager/user_names.cc index b873a3da..5342a5e 100644 --- a/components/user_manager/user_names.cc +++ b/components/user_manager/user_names.cc
@@ -34,27 +34,25 @@ private: friend struct base::DefaultSingletonTraits<FixedAccountManager>; - FixedAccountManager(); + FixedAccountManager() = default; - const AccountId stub_account_id_; - const AccountId signin_account_id_; - const AccountId guest_account_id_; - const AccountId demo_account_id_; + const AccountId stub_account_id_ = + AccountId::FromUserEmailGaiaId(user_manager::kStubUserEmail, + user_manager::kStubUserId); + const AccountId signin_account_id_ = AccountId::FromUserEmail(kSignInUser); + const AccountId guest_account_id_ = + AccountId::FromUserEmail(user_manager::kGuestUserName); + const AccountId demo_account_id_ = AccountId::FromUserEmail(kDemoUserName); DISALLOW_COPY_AND_ASSIGN(FixedAccountManager); }; -FixedAccountManager::FixedAccountManager() - : stub_account_id_(AccountId::FromUserEmail(user_manager::kStubUser)), - signin_account_id_(AccountId::FromUserEmail(kSignInUser)), - guest_account_id_(AccountId::FromUserEmail(user_manager::kGuestUserName)), - demo_account_id_(AccountId::FromUserEmail(kDemoUserName)) {} - } // namespace namespace user_manager { -const char kStubUser[] = "stub-user@example.com"; +const char kStubUserEmail[] = "stub-user@example.com"; +const char kStubUserId[] = "1234567890123456789012"; // Should match cros constant in platform/libchromeos/chromeos/cryptohome.h const char kGuestUserName[] = "$guest";
diff --git a/components/user_manager/user_names.h b/components/user_manager/user_names.h index a3c9476..d56880a83 100644 --- a/components/user_manager/user_names.h +++ b/components/user_manager/user_names.h
@@ -13,9 +13,11 @@ namespace user_manager { -// Username for stub login for tests only. -// It is also used for Chrome for ChromeOS linux dev build. -USER_MANAGER_EXPORT extern const char kStubUser[]; +// Stub user name. For tests and CrOS on Linux dev build only. +USER_MANAGER_EXPORT extern const char kStubUserEmail[]; + +// Stub user id. For tests and CrOS on Linux dev build only. +USER_MANAGER_EXPORT extern const char kStubUserId[]; // Magic e-mail addresses are bad. They exist here because some code already // depends on them and it is hard to figure out what. Any user types added in
diff --git a/components/web_contents_delegate_android/web_contents_delegate_android.cc b/components/web_contents_delegate_android/web_contents_delegate_android.cc index 66f729c..12e077c5 100644 --- a/components/web_contents_delegate_android/web_contents_delegate_android.cc +++ b/components/web_contents_delegate_android/web_contents_delegate_android.cc
@@ -110,6 +110,7 @@ load_params.should_replace_current_entry = params.should_replace_current_entry; load_params.is_renderer_initiated = params.is_renderer_initiated; + load_params.has_user_gesture = params.user_gesture; if (params.uses_post) { load_params.load_type = content::NavigationController::LOAD_TYPE_HTTP_POST;
diff --git a/content/browser/DEPS b/content/browser/DEPS index f33d518..5aafa562 100644 --- a/content/browser/DEPS +++ b/content/browser/DEPS
@@ -86,6 +86,7 @@ "+third_party/WebKit/public/platform/WebSecurityStyle.h", "+third_party/WebKit/public/platform/WebTouchEvent.h", "+third_party/WebKit/public/platform/WebTextInputType.h", + "+third_party/WebKit/public/platform/mac/WebScrollbarTheme.h", "+third_party/WebKit/public/platform/mime_registry.mojom.h", "+third_party/WebKit/public/platform/modules/background_sync/background_sync.mojom.h", "+third_party/WebKit/public/platform/modules/bluetooth/web_bluetooth.mojom.h", @@ -136,7 +137,6 @@ "+third_party/WebKit/public/web/WebSharedWorkerCreationErrors.h", "+third_party/WebKit/public/web/WebTextDirection.h", "+third_party/WebKit/public/web/WebTreeScopeType.h", - "+third_party/WebKit/public/web/mac/WebScrollbarTheme.h", # DO NOT ADD ANY CHROME OR COMPONENTS INCLUDES HERE!!! # See https://sites.google.com/a/chromium.org/dev/developers/content-module
diff --git a/content/browser/devtools/devtools_agent_host_impl.h b/content/browser/devtools/devtools_agent_host_impl.h index 774c925..6b2a785 100644 --- a/content/browser/devtools/devtools_agent_host_impl.h +++ b/content/browser/devtools/devtools_agent_host_impl.h
@@ -91,7 +91,7 @@ explicit DevToolsMessageChunkProcessor(const SendMessageCallback& callback); ~DevToolsMessageChunkProcessor(); - std::string state_cookie() const { return state_cookie_; } + const std::string& state_cookie() const { return state_cookie_; } void set_state_cookie(const std::string& cookie) { state_cookie_ = cookie; } int last_call_id() const { return last_call_id_; } bool ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk);
diff --git a/content/browser/devtools/devtools_io_context.cc b/content/browser/devtools/devtools_io_context.cc index 2b18f03..719ef426 100644 --- a/content/browser/devtools/devtools_io_context.cc +++ b/content/browser/devtools/devtools_io_context.cc
@@ -6,9 +6,12 @@ #include "base/files/file.h" #include "base/files/file_util.h" +#include "base/sequenced_task_runner.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" +#include "base/task_scheduler/post_task.h" #include "base/third_party/icu/icu_utf.h" +#include "base/threading/thread_restrictions.h" #include "content/public/browser/browser_thread.h" namespace content { @@ -19,18 +22,20 @@ using Stream = DevToolsIOContext::Stream; -Stream::Stream() - : base::RefCountedDeleteOnSequence<Stream>( - BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE)), +Stream::Stream(base::SequencedTaskRunner* task_runner) + : base::RefCountedDeleteOnSequence<Stream>(task_runner), handle_(base::UintToString(++s_last_stream_handle)), + task_runner_(task_runner), had_errors_(false), last_read_pos_(0) {} Stream::~Stream() { - DCHECK_CURRENTLY_ON(BrowserThread::FILE); + DCHECK(task_runner_->RunsTasksInCurrentSequence()); } -bool Stream::InitOnFileThreadIfNeeded() { +bool Stream::InitOnFileSequenceIfNeeded() { + DCHECK(task_runner_->RunsTasksInCurrentSequence()); + base::ThreadRestrictions::AssertIOAllowed(); if (had_errors_) return false; if (file_.IsValid()) @@ -56,22 +61,23 @@ } void Stream::Read(off_t position, size_t max_size, ReadCallback callback) { - BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, - base::Bind(&Stream::ReadOnFileThread, this, position, max_size, - callback)); + task_runner_->PostTask( + FROM_HERE, base::BindOnce(&Stream::ReadOnFileSequence, this, position, + max_size, std::move(callback))); } void Stream::Append(std::unique_ptr<std::string> data) { - BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, - base::Bind(&Stream::AppendOnFileThread, this, - base::Passed(std::move(data)))); + task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&Stream::AppendOnFileSequence, this, std::move(data))); } -void Stream::ReadOnFileThread(off_t position, size_t max_size, - ReadCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::FILE); +void Stream::ReadOnFileSequence(off_t position, + size_t max_size, + ReadCallback callback) { + DCHECK(task_runner_->RunsTasksInCurrentSequence()); Status status = StatusFailure; - scoped_refptr<base::RefCountedString> data; + std::unique_ptr<std::string> data; if (file_.IsValid()) { std::string buffer; @@ -92,33 +98,37 @@ } else { buffer.resize(size_got); } - data = base::RefCountedString::TakeString(&buffer); + data.reset(new std::string(std::move(buffer))); status = size_got ? StatusSuccess : StatusEOF; last_read_pos_ = position + size_got; } } - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, - base::Bind(callback, data, status)); + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::BindOnce(std::move(callback), std::move(data), status)); } -void Stream::AppendOnFileThread(std::unique_ptr<std::string> data) { - DCHECK_CURRENTLY_ON(BrowserThread::FILE); - if (!InitOnFileThreadIfNeeded()) +void Stream::AppendOnFileSequence(std::unique_ptr<std::string> data) { + if (!InitOnFileSequenceIfNeeded()) return; - int size_written = file_.WriteAtCurrentPos(data->data(), data->size()); - if (size_written != static_cast<int>(data->size())) { + int size_written = file_.WriteAtCurrentPos(&*data->begin(), data->length()); + if (size_written != static_cast<int>(data->length())) { LOG(ERROR) << "Failed to write temporary file"; had_errors_ = true; file_.Close(); } } -DevToolsIOContext::DevToolsIOContext() {} +DevToolsIOContext::DevToolsIOContext() = default; -DevToolsIOContext::~DevToolsIOContext() {} +DevToolsIOContext::~DevToolsIOContext() = default; scoped_refptr<Stream> DevToolsIOContext::CreateTempFileBackedStream() { - scoped_refptr<Stream> result = new Stream(); + if (!task_runner_) { + task_runner_ = base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock(), base::TaskPriority::BACKGROUND}); + } + scoped_refptr<Stream> result = new Stream(task_runner_.get()); bool inserted = streams_.insert(std::make_pair(result->handle(), result)).second; DCHECK(inserted);
diff --git a/content/browser/devtools/devtools_io_context.h b/content/browser/devtools/devtools_io_context.h index 2bacfb2..67f9113 100644 --- a/content/browser/devtools/devtools_io_context.h +++ b/content/browser/devtools/devtools_io_context.h
@@ -14,6 +14,9 @@ #include "base/memory/ref_counted_delete_on_sequence.h" #include "base/memory/ref_counted_memory.h" +namespace base { +class SequencedTaskRunner; +} namespace content { class DevToolsIOContext { @@ -26,26 +29,27 @@ StatusFailure }; - using ReadCallback = base::Callback< - void(const scoped_refptr<base::RefCountedString>& data, int status)>; + using ReadCallback = + base::OnceCallback<void(std::unique_ptr<std::string> data, int status)>; void Read(off_t position, size_t max_size, ReadCallback callback); void Append(std::unique_ptr<std::string> data); const std::string& handle() const { return handle_; } private: - Stream(); + explicit Stream(base::SequencedTaskRunner* task_runner); ~Stream(); friend class DevToolsIOContext; friend class base::RefCountedDeleteOnSequence<Stream>; friend class base::DeleteHelper<Stream>; - void ReadOnFileThread(off_t pos, size_t max_size, ReadCallback callback); - void AppendOnFileThread(std::unique_ptr<std::string> data); - bool InitOnFileThreadIfNeeded(); + void ReadOnFileSequence(off_t pos, size_t max_size, ReadCallback callback); + void AppendOnFileSequence(std::unique_ptr<std::string> data); + bool InitOnFileSequenceIfNeeded(); const std::string handle_; base::File file_; + scoped_refptr<base::SequencedTaskRunner> task_runner_; bool had_errors_; off_t last_read_pos_; }; @@ -61,6 +65,7 @@ private: using StreamsMap = std::map<std::string, scoped_refptr<Stream>>; StreamsMap streams_; + scoped_refptr<base::SequencedTaskRunner> task_runner_; }; } // namespace content
diff --git a/content/browser/devtools/devtools_session.cc b/content/browser/devtools/devtools_session.cc index f9dcb58..528fa56 100644 --- a/content/browser/devtools/devtools_session.cc +++ b/content/browser/devtools/devtools_session.cc
@@ -20,6 +20,8 @@ session_id_(session_id), host_(nullptr), dispatcher_(new protocol::UberDispatcher(this)), + chunk_processor_(base::Bind(&DevToolsSession::SendMessageToClient, + base::Unretained(this))), weak_factory_(this) {} DevToolsSession::~DevToolsSession() { @@ -46,11 +48,21 @@ dispatcher_->setFallThroughForNotFound(value); } -void DevToolsSession::sendResponse( +void DevToolsSession::SendMessageToClient(int session_id, + const std::string& message) { + if (session_id != session_id_) + return; + int id = chunk_processor_.last_call_id(); + waiting_for_response_messages_.erase(id); + client_->DispatchProtocolMessage(agent_host_, message); + // |this| may be deleted at this point. +} + +void DevToolsSession::SendResponse( std::unique_ptr<base::DictionaryValue> response) { std::string json; base::JSONWriter::Write(*response.get(), &json); - agent_host_->SendMessageToClient(session_id_, json); + client_->DispatchProtocolMessage(agent_host_, json); } protocol::Response::Status DevToolsSession::Dispatch( @@ -67,11 +79,11 @@ std::unique_ptr<base::DictionaryValue> response( delegate->HandleCommand(agent_host_, dict_value)); if (response) { - sendResponse(std::move(response)); + SendResponse(std::move(response)); return protocol::Response::kSuccess; } if (delegate->HandleAsyncCommand(agent_host_, dict_value, - base::Bind(&DevToolsSession::sendResponse, + base::Bind(&DevToolsSession::SendResponse, weak_factory_.GetWeakPtr()))) { return protocol::Response::kAsync; } @@ -81,15 +93,19 @@ call_id, method); } +bool DevToolsSession::ReceiveMessageChunk(const DevToolsMessageChunk& chunk) { + return chunk_processor_.ProcessChunkedMessageFromAgent(chunk); +} + void DevToolsSession::sendProtocolResponse( int call_id, std::unique_ptr<protocol::Serializable> message) { - agent_host_->SendMessageToClient(session_id_, message->serialize()); + client_->DispatchProtocolMessage(agent_host_, message->serialize()); } void DevToolsSession::sendProtocolNotification( std::unique_ptr<protocol::Serializable> message) { - agent_host_->SendMessageToClient(session_id_, message->serialize()); + client_->DispatchProtocolMessage(agent_host_, message->serialize()); } void DevToolsSession::flushProtocolNotifications() {
diff --git a/content/browser/devtools/devtools_session.h b/content/browser/devtools/devtools_session.h index 24909914..88d91d2 100644 --- a/content/browser/devtools/devtools_session.h +++ b/content/browser/devtools/devtools_session.h
@@ -5,6 +5,8 @@ #ifndef CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_SESSION_H_ #define CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_SESSION_H_ +#include <map> + #include "base/containers/flat_map.h" #include "base/memory/weak_ptr.h" #include "base/values.h" @@ -29,10 +31,19 @@ void SetRenderFrameHost(RenderFrameHostImpl* host); void SetFallThroughForNotFound(bool value); + struct Message { + std::string method; + std::string message; + }; + using MessageByCallId = std::map<int, Message>; + MessageByCallId& waiting_messages() { return waiting_for_response_messages_; } + const std::string& state_cookie() { return chunk_processor_.state_cookie(); } + protocol::Response::Status Dispatch( const std::string& message, int* call_id, std::string* method); + bool ReceiveMessageChunk(const DevToolsMessageChunk& chunk); // Only used by DevToolsAgentHostImpl. DevToolsAgentHostClient* client() const { return client_; } @@ -53,7 +64,9 @@ } private: - void sendResponse(std::unique_ptr<base::DictionaryValue> response); + void SendMessageToClient(int session_id, const std::string& message); + void SendResponse(std::unique_ptr<base::DictionaryValue> response); + // protocol::FrontendChannel implementation. void sendProtocolResponse( int call_id, @@ -69,6 +82,10 @@ handlers_; RenderFrameHostImpl* host_; std::unique_ptr<protocol::UberDispatcher> dispatcher_; + // Chunk processor's state cookie always corresponds to a state before + // any of the waiting for response messages have been handled. + DevToolsMessageChunkProcessor chunk_processor_; + MessageByCallId waiting_for_response_messages_; base::WeakPtrFactory<DevToolsSession> weak_factory_; };
diff --git a/content/browser/devtools/protocol/io_handler.cc b/content/browser/devtools/protocol/io_handler.cc index 2b6a76d4..ec0d49c 100644 --- a/content/browser/devtools/protocol/io_handler.cc +++ b/content/browser/devtools/protocol/io_handler.cc
@@ -43,22 +43,21 @@ callback->sendFailure(Response::InvalidParams("Invalid stream handle")); return; } - stream->Read(offset.fromMaybe(-1), - max_size.fromMaybe(kDefaultChunkSize), - base::Bind(&IOHandler::ReadComplete, - weak_factory_.GetWeakPtr(), - base::Passed(std::move(callback)))); + stream->Read( + offset.fromMaybe(-1), max_size.fromMaybe(kDefaultChunkSize), + base::BindOnce(&IOHandler::ReadComplete, weak_factory_.GetWeakPtr(), + base::Passed(std::move(callback)))); } void IOHandler::ReadComplete(std::unique_ptr<ReadCallback> callback, - const scoped_refptr<base::RefCountedString>& data, + std::unique_ptr<std::string> data, int status) { if (status == DevToolsIOContext::Stream::StatusFailure) { callback->sendFailure(Response::Error("Read failed")); return; } bool eof = status == DevToolsIOContext::Stream::StatusEOF; - callback->sendSuccess(data->data(), eof); + callback->sendSuccess(std::move(*data), eof); } Response IOHandler::Close(const std::string& handle) {
diff --git a/content/browser/devtools/protocol/io_handler.h b/content/browser/devtools/protocol/io_handler.h index 7ac6f80..0429769 100644 --- a/content/browser/devtools/protocol/io_handler.h +++ b/content/browser/devtools/protocol/io_handler.h
@@ -10,10 +10,6 @@ #include "content/browser/devtools/protocol/devtools_domain_handler.h" #include "content/browser/devtools/protocol/io.h" -namespace base { -class RefCountedString; -} - namespace content { class DevToolsIOContext; @@ -37,7 +33,8 @@ private: void ReadComplete(std::unique_ptr<ReadCallback> callback, - const scoped_refptr<base::RefCountedString>& data, int status); + std::unique_ptr<std::string> data, + int status); std::unique_ptr<IO::Frontend> frontend_; DevToolsIOContext* io_context_;
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc index 3c29c49..ea73ad73 100644 --- a/content/browser/devtools/render_frame_devtools_agent_host.cc +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -195,7 +195,7 @@ const std::string& message) { host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( host_->GetRoutingID(), session_id, call_id, method, message)); - sent_messages_[call_id] = { session_id, method, message }; + sent_messages_[call_id] = {session_id, call_id, method, message}; } void RenderFrameDevToolsAgentHost::FrameHostHolder::InspectElement( @@ -401,9 +401,6 @@ frame_trace_recorder_(nullptr), handlers_frame_host_(nullptr), current_frame_crashed_(false), - chunk_processor_( - base::Bind(&RenderFrameDevToolsAgentHost::SendMessageFromProcessor, - base::Unretained(this))), frame_tree_node_(frame_tree_node) { if (IsBrowserSideNavigationEnabled()) { frame_host_ = frame_tree_node->current_frame_host(); @@ -545,14 +542,14 @@ if (IsBrowserSideNavigationEnabled()) { if (!navigation_handles_.empty()) { - suspended_messages_[call_id] = {session_id, method, message}; + suspended_messages_.push_back({session_id, call_id, method, message}); return true; } if (frame_host_) { frame_host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( frame_host_->GetRoutingID(), session_id, call_id, method, message)); } - waiting_for_response_messages_[call_id] = {session_id, method, message}; + session->waiting_messages()[call_id] = {method, message}; } else { if (current_) current_->DispatchProtocolMessage(session_id, call_id, method, message); @@ -596,9 +593,7 @@ GetWakeLock()->CancelWakeLock(); #endif frame_trace_recorder_.reset(); - waiting_for_response_messages_.clear(); suspended_messages_.clear(); - chunk_processor_.Reset(); if (IsBrowserSideNavigationEnabled()) RevokePolicy(frame_host_); } @@ -659,16 +654,17 @@ UpdateFrameHost(handle->GetRenderFrameHost()); DCHECK(CheckConsistency()); if (navigation_handles_.empty()) { - if (session() && frame_host_) { - for (const auto& pair : suspended_messages_) { - const Message& message = pair.second; - frame_host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( - frame_host_->GetRoutingID(), message.session_id, pair.first, - message.method, message.message)); + if (session()) { + for (const Message& message : suspended_messages_) { + if (frame_host_) { + frame_host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( + frame_host_->GetRoutingID(), message.session_id, message.call_id, + message.method, message.message)); + } + session()->waiting_messages()[message.call_id] = {message.method, + message.message}; } } - waiting_for_response_messages_.insert(suspended_messages_.begin(), - suspended_messages_.end()); suspended_messages_.clear(); } if (handle->HasCommitted()) { @@ -710,26 +706,18 @@ if (!session() || !frame_host_) return; int session_id = session()->session_id(); - frame_host_->Send(new DevToolsAgentMsg_Reattach( - frame_host_->GetRoutingID(), GetId(), session_id, - chunk_processor_.state_cookie())); - for (const auto& pair : waiting_for_response_messages_) { - const Message& message = pair.second; + frame_host_->Send(new DevToolsAgentMsg_Reattach(frame_host_->GetRoutingID(), + GetId(), session_id, + session()->state_cookie())); + for (const auto& pair : session()->waiting_messages()) { + int call_id = pair.first; + const DevToolsSession::Message& message = pair.second; frame_host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( - frame_host_->GetRoutingID(), message.session_id, pair.first, - message.method, message.message)); + frame_host_->GetRoutingID(), session_id, call_id, message.method, + message.message)); } } -void RenderFrameDevToolsAgentHost::SendMessageFromProcessor( - int session_id, - const std::string& message) { - int id = chunk_processor_.last_call_id(); - waiting_for_response_messages_.erase(id); - SendMessageToClient(session_id, message); - // |this| may be deleted at this point. -} - void RenderFrameDevToolsAgentHost::GrantPolicy(RenderFrameHostImpl* host) { if (!host) return; @@ -1267,7 +1255,7 @@ bool success = true; if (IsBrowserSideNavigationEnabled()) { if (sender == frame_host_) - success = chunk_processor_.ProcessChunkedMessageFromAgent(message); + success = session()->ReceiveMessageChunk(message); } else { if (current_ && current_->host() == sender) success = current_->ProcessChunkedMessageFromAgent(message);
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.h b/content/browser/devtools/render_frame_devtools_agent_host.h index 675990f5..f63a57d 100644 --- a/content/browser/devtools/render_frame_devtools_agent_host.h +++ b/content/browser/devtools/render_frame_devtools_agent_host.h
@@ -7,9 +7,9 @@ #include <map> #include <memory> -#include <unordered_set> #include "base/compiler_specific.h" +#include "base/containers/flat_set.h" #include "base/macros.h" #include "build/build_config.h" #include "content/browser/devtools/devtools_agent_host_impl.h" @@ -171,22 +171,18 @@ // The active host we are talking to. RenderFrameHostImpl* frame_host_ = nullptr; + base::flat_set<NavigationHandleImpl*> navigation_handles_; + bool render_frame_alive_ = false; + + // These messages were queued after suspending, not sent to the agent, + // and will be sent after resuming. struct Message { int session_id; + int call_id; std::string method; std::string message; }; - // Chunk processor's state cookie always corresponds to a state before - // any of the suspended or waiting for response messages have been handled. - DevToolsMessageChunkProcessor chunk_processor_; - std::unordered_set<NavigationHandleImpl*> navigation_handles_; - bool render_frame_alive_ = false; - // These messages were sent before suspending, but their result have not been - // received yet, and state cookie has not been updated. - std::map<int, Message> waiting_for_response_messages_; - // These messages were queued after suspending, not sent to the agent, - // and will be sent after resuming. - std::map<int, Message> suspended_messages_; + std::vector<Message> suspended_messages_; // The FrameTreeNode associated with this agent. FrameTreeNode* frame_tree_node_;
diff --git a/content/browser/devtools/worker_devtools_agent_host.cc b/content/browser/devtools/worker_devtools_agent_host.cc index c545a571..bf2b0437 100644 --- a/content/browser/devtools/worker_devtools_agent_host.cc +++ b/content/browser/devtools/worker_devtools_agent_host.cc
@@ -65,6 +65,7 @@ if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) { host->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( worker_id_.second, session->session_id(), call_id, method, message)); + session->waiting_messages()[call_id] = {method, message}; } return true; } @@ -102,9 +103,16 @@ state_ = WORKER_INSPECTED; AttachToWorker(); if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) { - host->Send(new DevToolsAgentMsg_Reattach( - worker_id_.second, GetId(), session()->session_id(), - chunk_processor_.state_cookie())); + host->Send(new DevToolsAgentMsg_Reattach(worker_id_.second, GetId(), + session()->session_id(), + session()->state_cookie())); + for (const auto& pair : session()->waiting_messages()) { + int call_id = pair.first; + const DevToolsSession::Message& message = pair.second; + host->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( + worker_id_.second, session()->session_id(), call_id, message.method, + message.message)); + } } OnAttachedStateChanged(true); } else if (state_ == WORKER_PAUSED_FOR_DEBUG_ON_START) { @@ -137,8 +145,6 @@ WorkerDevToolsAgentHost::WorkerDevToolsAgentHost(WorkerId worker_id) : DevToolsAgentHostImpl(base::GenerateGUID()), - chunk_processor_(base::Bind(&WorkerDevToolsAgentHost::SendMessageToClient, - base::Unretained(this))), state_(WORKER_UNINSPECTED), worker_id_(worker_id) { WorkerCreated(); @@ -169,8 +175,7 @@ const DevToolsMessageChunk& message) { if (!IsAttached()) return; - - chunk_processor_.ProcessChunkedMessageFromAgent(message); + session()->ReceiveMessageChunk(message); } } // namespace content
diff --git a/content/browser/devtools/worker_devtools_agent_host.h b/content/browser/devtools/worker_devtools_agent_host.h index 4c6192e..b77176a 100644 --- a/content/browser/devtools/worker_devtools_agent_host.h +++ b/content/browser/devtools/worker_devtools_agent_host.h
@@ -65,7 +65,6 @@ void WorkerCreated(); void OnDispatchOnInspectorFrontend(const DevToolsMessageChunk& message); - DevToolsMessageChunkProcessor chunk_processor_; WorkerState state_; WorkerId worker_id_; DISALLOW_COPY_AND_ASSIGN(WorkerDevToolsAgentHost);
diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc index c85b7d5..5c470de 100644 --- a/content/browser/download/download_browsertest.cc +++ b/content/browser/download/download_browsertest.cc
@@ -582,9 +582,7 @@ base::FilePath mock_base(GetTestFilePath("download", "")); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, - base::Bind( - &net::URLRequestMockHTTPJob::AddUrlHandlers, mock_base, - make_scoped_refptr(content::BrowserThread::GetBlockingPool()))); + base::Bind(&net::URLRequestMockHTTPJob::AddUrlHandlers, mock_base)); ASSERT_TRUE(embedded_test_server()->Start()); const std::string real_host = embedded_test_server()->host_port_pair().host();
diff --git a/content/browser/download/drag_download_file_browsertest.cc b/content/browser/download/drag_download_file_browsertest.cc index 6753598..f6190ff1 100644 --- a/content/browser/download/drag_download_file_browsertest.cc +++ b/content/browser/download/drag_download_file_browsertest.cc
@@ -7,7 +7,6 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/message_loop/message_loop.h" -#include "base/threading/sequenced_worker_pool.h" #include "content/browser/download/download_file_factory.h" #include "content/browser/download/download_file_impl.h" #include "content/browser/download/download_item_impl.h" @@ -77,9 +76,7 @@ base::FilePath mock_base(GetTestFilePath("download", "")); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, - base::Bind( - &net::URLRequestMockHTTPJob::AddUrlHandlers, mock_base, - make_scoped_refptr(content::BrowserThread::GetBlockingPool()))); + base::Bind(&net::URLRequestMockHTTPJob::AddUrlHandlers, mock_base)); } const base::FilePath& downloads_directory() const {
diff --git a/content/browser/download/save_package.cc b/content/browser/download/save_package.cc index c299f67..4c587480 100644 --- a/content/browser/download/save_package.cc +++ b/content/browser/download/save_package.cc
@@ -320,6 +320,10 @@ void SavePackage::OnMHTMLGenerated(int64_t size) { DCHECK_CURRENTLY_ON(BrowserThread::UI); + if (!download_) + return; + + CHECK_EQ(download_->GetState(), DownloadItem::IN_PROGRESS); if (size <= 0) { Cancel(false); return; @@ -704,6 +708,7 @@ if (download_) { if (save_type_ != SAVE_PAGE_TYPE_AS_MHTML) { + CHECK_EQ(download_->GetState(), DownloadItem::IN_PROGRESS); download_->DestinationUpdate( all_save_items_count_, CurrentSpeed(), std::vector<DownloadItem::ReceivedSlice>()); @@ -735,6 +740,7 @@ // Inform the DownloadItem to update UI. // We use the received bytes as number of saved files. if (download_) { + CHECK_EQ(download_->GetState(), DownloadItem::IN_PROGRESS); download_->DestinationUpdate( completed_count(), CurrentSpeed(), std::vector<DownloadItem::ReceivedSlice>()); @@ -1461,7 +1467,6 @@ void SavePackage::FinalizeDownloadEntry() { DCHECK(download_); DCHECK(download_manager_); - download_manager_->OnSavePackageSuccessfullyFinished(download_); download_ = nullptr; download_manager_ = nullptr;
diff --git a/content/browser/download/save_package_browsertest.cc b/content/browser/download/save_package_browsertest.cc index 8f578664..ac393bbb 100644 --- a/content/browser/download/save_package_browsertest.cc +++ b/content/browser/download/save_package_browsertest.cc
@@ -21,6 +21,66 @@ const char kTestFile[] = "/simple_page.html"; +class TestShellDownloadManagerDelegate : public ShellDownloadManagerDelegate { + public: + explicit TestShellDownloadManagerDelegate(SavePageType save_page_type) + : save_page_type_(save_page_type) {} + + void ChooseSavePath(WebContents* web_contents, + const base::FilePath& suggested_path, + const base::FilePath::StringType& default_extension, + bool can_save_as_complete, + const SavePackagePathPickedCallback& callback) override { + callback.Run(suggested_path, save_page_type_, + SavePackageDownloadCreatedCallback()); + } + + void GetSaveDir(BrowserContext* context, + base::FilePath* website_save_dir, + base::FilePath* download_save_dir, + bool* skip_dir_check) override { + *website_save_dir = download_dir_; + *download_save_dir = download_dir_; + *skip_dir_check = false; + } + + bool ShouldCompleteDownload(DownloadItem* download, + const base::Closure& closure) override { + return true; + } + + base::FilePath download_dir_; + SavePageType save_page_type_; +}; + +class DownloadicidalObserver : public DownloadManager::Observer { + public: + explicit DownloadicidalObserver(bool remove_download) + : remove_download_(remove_download) {} + void OnDownloadCreated(DownloadManager* manager, + DownloadItem* item) override { + base::SequencedTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::Bind( + [](bool remove_download, const base::Closure& closure, + DownloadItem* item) { + remove_download ? item->Remove() : item->Cancel(true); + closure.Run(); + }, + remove_download_, quit_closure_, item)); + } + base::Closure quit_closure_; + bool remove_download_; +}; + +class SavePackageCompletionWaiter : public DownloadManager::Observer { + public: + void OnSavePackageSuccessfullyFinished(DownloadManager* m, + DownloadItem* d) override { + quit_closure_.Run(); + } + base::Closure quit_closure_; +}; + class SavePackageBrowserTest : public ContentBrowserTest { protected: void SetUp() override { @@ -36,6 +96,53 @@ *dir = save_dir_.GetPath().AppendASCII(prefix + "_files"); } + // Start a SavePackage download and then cancels it. If |remove_download| is + // true, the download item will be removed while page is being saved. + // Otherwise, the download item will be canceled. + void RunAndCancelSavePackageDownload(SavePageType save_page_type, + bool remove_download) { + ASSERT_TRUE(embedded_test_server()->Start()); + GURL url = embedded_test_server()->GetURL("/page_with_iframe.html"); + NavigateToURL(shell(), url); + auto* download_manager = + static_cast<DownloadManagerImpl*>(BrowserContext::GetDownloadManager( + shell()->web_contents()->GetBrowserContext())); + auto delegate = + base::MakeUnique<TestShellDownloadManagerDelegate>(save_page_type); + delegate->download_dir_ = save_dir_.GetPath(); + auto* old_delegate = download_manager->GetDelegate(); + download_manager->SetDelegate(delegate.get()); + + { + base::RunLoop run_loop; + DownloadicidalObserver download_item_killer(false); + download_manager->AddObserver(&download_item_killer); + download_item_killer.quit_closure_ = run_loop.QuitClosure(); + + scoped_refptr<SavePackage> save_package( + new SavePackage(shell()->web_contents())); + save_package->GetSaveInfo(); + run_loop.Run(); + download_manager->RemoveObserver(&download_item_killer); + EXPECT_TRUE(save_package->canceled()); + } + + // Run a second download to completion so that any pending tasks will get + // flushed out. If the previous SavePackage operation didn't cleanup after + // itself, then there could be stray tasks that invoke the now defunct + // download item. + { + base::RunLoop run_loop; + SavePackageCompletionWaiter completion_waiter; + completion_waiter.quit_closure_ = run_loop.QuitClosure(); + download_manager->AddObserver(&completion_waiter); + shell()->web_contents()->OnSavePage(); + run_loop.Run(); + download_manager->RemoveObserver(&completion_waiter); + } + download_manager->SetDelegate(old_delegate); + } + // Temporary directory we will save pages to. base::ScopedTempDir save_dir_; }; @@ -68,98 +175,11 @@ } IN_PROC_BROWSER_TEST_F(SavePackageBrowserTest, DownloadItemDestroyed) { - class TestShellDownloadManagerDelegate : public ShellDownloadManagerDelegate { - public: - void ChooseSavePath( - WebContents* web_contents, - const base::FilePath& suggested_path, - const base::FilePath::StringType& default_extension, - bool can_save_as_complete, - const SavePackagePathPickedCallback& callback) override { - callback.Run(suggested_path, SAVE_PAGE_TYPE_AS_COMPLETE_HTML, - SavePackageDownloadCreatedCallback()); - } + RunAndCancelSavePackageDownload(SAVE_PAGE_TYPE_AS_COMPLETE_HTML, true); +} - void GetSaveDir(BrowserContext* context, - base::FilePath* website_save_dir, - base::FilePath* download_save_dir, - bool* skip_dir_check) override { - *website_save_dir = download_dir_; - *download_save_dir = download_dir_; - *skip_dir_check = false; - } - - bool ShouldCompleteDownload(DownloadItem* download, - const base::Closure& closure) override { - return true; - } - - base::FilePath download_dir_; - }; - - class DownloadicidalObserver : public DownloadManager::Observer { - public: - void OnDownloadCreated(DownloadManager* manager, - DownloadItem* item) override { - base::SequencedTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::Bind( - [](const base::Closure& closure, DownloadItem* item) { - item->Remove(); - closure.Run(); - }, - quit_closure_, item)); - } - base::Closure quit_closure_; - }; - - ASSERT_TRUE(embedded_test_server()->Start()); - GURL url = embedded_test_server()->GetURL("/page_with_iframe.html"); - NavigateToURL(shell(), url); - auto* download_manager = - static_cast<DownloadManagerImpl*>(BrowserContext::GetDownloadManager( - shell()->web_contents()->GetBrowserContext())); - auto delegate = base::MakeUnique<TestShellDownloadManagerDelegate>(); - delegate->download_dir_ = save_dir_.GetPath(); - auto* old_delegate = download_manager->GetDelegate(); - download_manager->SetDelegate(delegate.get()); - - { - base::RunLoop run_loop; - DownloadicidalObserver download_item_killer; - download_manager->AddObserver(&download_item_killer); - download_item_killer.quit_closure_ = run_loop.QuitClosure(); - - scoped_refptr<SavePackage> save_package( - new SavePackage(shell()->web_contents())); - save_package->GetSaveInfo(); - run_loop.Run(); - download_manager->RemoveObserver(&download_item_killer); - EXPECT_TRUE(save_package->canceled()); - } - - class SavePackageCompletionWaiter : public DownloadManager::Observer { - public: - void OnSavePackageSuccessfullyFinished(DownloadManager* m, - DownloadItem* d) override { - quit_closure_.Run(); - } - base::Closure quit_closure_; - }; - - // Run a second download to completion so that any pending tasks will get - // flushed out. If the previous SavePackage operation didn't cleanup after - // itself, then there could be stray tasks that invoke the now defunct - // download item. - { - base::RunLoop run_loop; - SavePackageCompletionWaiter completion_waiter; - completion_waiter.quit_closure_ = run_loop.QuitClosure(); - download_manager->AddObserver(&completion_waiter); - shell()->web_contents()->OnSavePage(); - run_loop.Run(); - download_manager->RemoveObserver(&completion_waiter); - } - download_manager->SetDelegate(old_delegate); +IN_PROC_BROWSER_TEST_F(SavePackageBrowserTest, DownloadItemCanceled) { + RunAndCancelSavePackageDownload(SAVE_PAGE_TYPE_AS_MHTML, false); } } // namespace content
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc index a4f63821..d41d52b 100644 --- a/content/browser/frame_host/interstitial_page_impl.cc +++ b/content/browser/frame_host/interstitial_page_impl.cc
@@ -540,6 +540,11 @@ return base::EmptyString(); } +bool InterstitialPageImpl::ShowingInterstitialPage() const { + // An interstitial page never shows a second interstitial. + return false; +} + RendererPreferences InterstitialPageImpl::GetRendererPrefs( BrowserContext* browser_context) const { delegate_->OverrideRendererPrefs(&renderer_preferences_);
diff --git a/content/browser/frame_host/interstitial_page_impl.h b/content/browser/frame_host/interstitial_page_impl.h index 71c33a0e..2fd048a 100644 --- a/content/browser/frame_host/interstitial_page_impl.h +++ b/content/browser/frame_host/interstitial_page_impl.h
@@ -98,6 +98,7 @@ // NavigatorDelegate implementation. WebContents* OpenURL(const OpenURLParams& params) override; const std::string& GetUserAgentOverride() const override; + bool ShowingInterstitialPage() const override; protected: // NotificationObserver method:
diff --git a/content/browser/frame_host/interstitial_page_impl_browsertest.cc b/content/browser/frame_host/interstitial_page_impl_browsertest.cc index 5d3baee..c8e9148 100644 --- a/content/browser/frame_host/interstitial_page_impl_browsertest.cc +++ b/content/browser/frame_host/interstitial_page_impl_browsertest.cc
@@ -14,8 +14,10 @@ #include "content/public/browser/browser_message_filter.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/interstitial_page_delegate.h" +#include "content/public/common/browser_side_navigation_policy.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" +#include "content/public/test/content_browser_test_utils.h" #include "content/public/test/test_utils.h" #include "content/shell/browser/shell.h" #include "ipc/message_filter.h" @@ -313,4 +315,50 @@ TearDownInterstitialPage(); } +// Ensure that we don't show the underlying RenderWidgetHostView if a subframe +// commits in the original page while an interstitial is showing. +// See https://crbug.com/729105. +IN_PROC_BROWSER_TEST_F(InterstitialPageImplTest, UnderlyingSubframeCommit) { + // This test doesn't apply in PlzNavigate, since the subframe does not + // succesfully commit in that mode. + // TODO(creis, clamy): Determine if this is a bug that should be fixed. + if (IsBrowserSideNavigationEnabled()) + return; + + ASSERT_TRUE(embedded_test_server()->Start()); + + // Load an initial page and inject an iframe that won't commit yet. + WebContentsImpl* web_contents = + static_cast<WebContentsImpl*>(shell()->web_contents()); + GURL main_url(embedded_test_server()->GetURL("/title1.html")); + GURL slow_url(embedded_test_server()->GetURL("/title2.html")); + EXPECT_TRUE(NavigateToURL(shell(), main_url)); + TestNavigationManager subframe_delayer(web_contents, slow_url); + { + std::string script = + "var iframe = document.createElement('iframe');" + "iframe.src = '" + + slow_url.spec() + + "';" + "document.body.appendChild(iframe);"; + EXPECT_TRUE(ExecuteScript(web_contents->GetMainFrame(), script)); + } + EXPECT_TRUE(subframe_delayer.WaitForRequestStart()); + + // Show an interstitial. The underlying RenderWidgetHostView should not be + // showing. + SetUpInterstitialPage(); + EXPECT_FALSE(web_contents->GetMainFrame()->GetView()->IsShowing()); + EXPECT_TRUE(web_contents->GetMainFrame()->GetRenderWidgetHost()->is_hidden()); + + // Allow the subframe to commit. + subframe_delayer.WaitForNavigationFinished(); + + // The underlying RenderWidgetHostView should still not be showing. + EXPECT_FALSE(web_contents->GetMainFrame()->GetView()->IsShowing()); + EXPECT_TRUE(web_contents->GetMainFrame()->GetRenderWidgetHost()->is_hidden()); + + TearDownInterstitialPage(); +} + } // namespace content
diff --git a/content/browser/frame_host/navigator_delegate.h b/content/browser/frame_host/navigator_delegate.h index 408a06ab..93a3e437 100644 --- a/content/browser/frame_host/navigator_delegate.h +++ b/content/browser/frame_host/navigator_delegate.h
@@ -127,6 +127,10 @@ // embedder and |nullptr| is returned. virtual std::unique_ptr<NavigationUIData> GetNavigationUIData( NavigationHandle* navigation_handle); + + // Whether the delegate is displaying an interstitial page over the current + // page. + virtual bool ShowingInterstitialPage() const = 0; }; } // namspace content
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc index 22a40a6..8268976 100644 --- a/content/browser/frame_host/navigator_impl.cc +++ b/content/browser/frame_host/navigator_impl.cc
@@ -263,9 +263,7 @@ // in the previous tab type. If you navigate somewhere that activates the // tab with the interstitial again, you'll see a flash before the new load // commits of the interstitial page. - FrameTreeNode* root = - render_frame_host->frame_tree_node()->frame_tree()->root(); - if (root->render_manager()->interstitial_page() != NULL) { + if (delegate_ && delegate_->ShowingInterstitialPage()) { LOG(WARNING) << "Discarding message during interstitial."; return; }
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc index 8dfa783..8da3cb7c 100644 --- a/content/browser/frame_host/render_frame_host_manager.cc +++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -61,7 +61,6 @@ delegate_(delegate), render_frame_delegate_(render_frame_delegate), render_widget_delegate_(render_widget_delegate), - interstitial_page_(nullptr), weak_factory_(this) { DCHECK(frame_tree_node_); } @@ -133,8 +132,8 @@ } RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { - if (interstitial_page_) - return interstitial_page_->GetView(); + if (delegate_->GetInterstitialForRenderManager()) + return delegate_->GetInterstitialForRenderManager()->GetView(); if (render_frame_host_) return render_frame_host_->GetView(); return nullptr; @@ -1424,7 +1423,7 @@ // SiteInstances if you type in a cross-site URL. This means we have to // compare the entry's URL to the last committed entry's URL. NavigationEntry* current_entry = controller.GetLastCommittedEntry(); - if (interstitial_page_) { + if (delegate_->GetInterstitialForRenderManager()) { // The interstitial is currently the last committed entry, but we want to // compare against the last non-interstitial entry. current_entry = controller.GetEntryAtOffset(-1); @@ -2825,13 +2824,13 @@ } void RenderFrameHostManager::EnsureRenderFrameHostVisibilityConsistent() { - if (render_frame_host_->GetView() && - render_frame_host_->render_view_host()->GetWidget()->is_hidden() != - delegate_->IsHidden()) { + RenderWidgetHostView* view = GetRenderWidgetHostView(); + if (view && static_cast<RenderWidgetHostImpl*>(view->GetRenderWidgetHost()) + ->is_hidden() != delegate_->IsHidden()) { if (delegate_->IsHidden()) { - render_frame_host_->GetView()->Hide(); + view->Hide(); } else { - render_frame_host_->GetView()->Show(); + view->Show(); } } }
diff --git a/content/browser/frame_host/render_frame_host_manager.h b/content/browser/frame_host/render_frame_host_manager.h index 24810ed1..da2d654 100644 --- a/content/browser/frame_host/render_frame_host_manager.h +++ b/content/browser/frame_host/render_frame_host_manager.h
@@ -156,6 +156,10 @@ virtual NavigationEntry* GetLastCommittedNavigationEntryForRenderManager() = 0; + // Returns the interstitial page showing in the delegate, or null if there + // is none. + virtual InterstitialPageImpl* GetInterstitialForRenderManager() = 0; + // Returns true if the location bar should be focused by default rather than // the page contents. The view calls this function when the tab is focused // to see what it should do. @@ -344,25 +348,6 @@ // SiteInstance. void CreateProxiesForChildFrame(FrameTreeNode* child); - // Sets the passed passed interstitial as the currently showing interstitial. - // |interstitial_page| should be non NULL (use the remove_interstitial_page - // method to unset the interstitial) and no interstitial page should be set - // when there is already a non NULL interstitial page set. - void set_interstitial_page(InterstitialPageImpl* interstitial_page) { - DCHECK(!interstitial_page_ && interstitial_page); - interstitial_page_ = interstitial_page; - } - - // Unsets the currently showing interstitial. - void remove_interstitial_page() { - DCHECK(interstitial_page_); - interstitial_page_ = NULL; - } - - // Returns the currently showing interstitial, NULL if no interstitial is - // showing. - InterstitialPageImpl* interstitial_page() const { return interstitial_page_; } - // Returns the swapped out RenderViewHost for the given SiteInstance, if any. // This method is *deprecated* and GetRenderFrameProxyHost should be used. RenderViewHostImpl* GetSwappedOutRenderViewHost(SiteInstance* instance) const; @@ -800,10 +785,6 @@ using RFHPendingDeleteList = std::list<std::unique_ptr<RenderFrameHostImpl>>; RFHPendingDeleteList pending_delete_hosts_; - // The intersitial page currently shown if any, not own by this class - // (the InterstitialPage is self-owned, it deletes itself when hidden). - InterstitialPageImpl* interstitial_page_; - // PlzNavigate // Stores a speculative RenderFrameHost which is created early in a navigation // so a renderer process can be started in parallel, if needed.
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index 40fbc05..58e04bd 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc
@@ -66,6 +66,7 @@ #include "services/service_manager/public/cpp/interface_provider.h" #include "services/service_manager/runner/common/client_util.h" #include "ui/display/display_switches.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gfx/switches.h" #include "ui/gl/gl_switches.h" #include "ui/latency/latency_info.h"
diff --git a/content/browser/indexed_db/indexed_db_backing_store_unittest.cc b/content/browser/indexed_db/indexed_db_backing_store_unittest.cc index f612670..36a2178 100644 --- a/content/browser/indexed_db/indexed_db_backing_store_unittest.cc +++ b/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
@@ -252,26 +252,22 @@ origin, url_request_context_getter_); // useful keys and values during tests - m_value1 = IndexedDBValue("value1", std::vector<IndexedDBBlobInfo>()); - m_value2 = IndexedDBValue("value2", std::vector<IndexedDBBlobInfo>()); + value1_ = IndexedDBValue("value1", std::vector<IndexedDBBlobInfo>()); + value2_ = IndexedDBValue("value2", std::vector<IndexedDBBlobInfo>()); - m_blob_info.push_back( + blob_info_.push_back( IndexedDBBlobInfo("uuid 3", base::UTF8ToUTF16("blob type"), 1)); - m_blob_info.push_back( - IndexedDBBlobInfo("uuid 4", - base::FilePath(FILE_PATH_LITERAL("path/to/file")), - base::UTF8ToUTF16("file name"), - base::UTF8ToUTF16("file type"))); - m_blob_info.push_back( - IndexedDBBlobInfo("uuid 5", - base::FilePath(), - base::UTF8ToUTF16("file name"), - base::UTF8ToUTF16("file type"))); - m_value3 = IndexedDBValue("value3", m_blob_info); + blob_info_.push_back(IndexedDBBlobInfo( + "uuid 4", base::FilePath(FILE_PATH_LITERAL("path/to/file")), + base::UTF8ToUTF16("file name"), base::UTF8ToUTF16("file type"))); + blob_info_.push_back(IndexedDBBlobInfo("uuid 5", base::FilePath(), + base::UTF8ToUTF16("file name"), + base::UTF8ToUTF16("file type"))); + value3_ = IndexedDBValue("value3", blob_info_); - m_key1 = IndexedDBKey(99, blink::kWebIDBKeyTypeNumber); - m_key2 = IndexedDBKey(ASCIIToUTF16("key2")); - m_key3 = IndexedDBKey(ASCIIToUTF16("key3")); + key1_ = IndexedDBKey(99, blink::kWebIDBKeyTypeNumber); + key2_ = IndexedDBKey(ASCIIToUTF16("key2")); + key3_ = IndexedDBKey(ASCIIToUTF16("key3")); } void TearDown() override { @@ -281,10 +277,10 @@ // This just checks the data that survive getting stored and recalled, e.g. // the file path and UUID will change and thus aren't verified. bool CheckBlobInfoMatches(const std::vector<IndexedDBBlobInfo>& reads) const { - if (m_blob_info.size() != reads.size()) + if (blob_info_.size() != reads.size()) return false; - for (size_t i = 0; i < m_blob_info.size(); ++i) { - const IndexedDBBlobInfo& a = m_blob_info[i]; + for (size_t i = 0; i < blob_info_.size(); ++i) { + const IndexedDBBlobInfo& a = blob_info_[i]; const IndexedDBBlobInfo& b = reads[i]; if (a.is_file() != b.is_file()) return false; @@ -318,12 +314,12 @@ } bool CheckBlobWrites() const { - if (backing_store_->writes().size() != m_blob_info.size()) + if (backing_store_->writes().size() != blob_info_.size()) return false; for (size_t i = 0; i < backing_store_->writes().size(); ++i) { const IndexedDBBackingStore::Transaction::WriteDescriptor& desc = backing_store_->writes()[i]; - const IndexedDBBlobInfo& info = m_blob_info[i]; + const IndexedDBBlobInfo& info = blob_info_[i]; if (desc.is_file() != info.is_file()) { if (!info.is_file() || !info.file_path().empty()) return false; @@ -363,13 +359,13 @@ scoped_refptr<TestableIndexedDBBackingStore> backing_store_; // Sample keys and values that are consistent. - IndexedDBKey m_key1; - IndexedDBKey m_key2; - IndexedDBKey m_key3; - IndexedDBValue m_value1; - IndexedDBValue m_value2; - IndexedDBValue m_value3; - std::vector<IndexedDBBlobInfo> m_blob_info; + IndexedDBKey key1_; + IndexedDBKey key2_; + IndexedDBKey key3_; + IndexedDBValue value1_; + IndexedDBValue value2_; + IndexedDBValue value3_; + std::vector<IndexedDBBlobInfo> blob_info_; private: DISALLOW_COPY_AND_ASSIGN(IndexedDBBackingStoreTest); @@ -407,8 +403,8 @@ transaction1.Begin(); std::vector<std::unique_ptr<storage::BlobDataHandle>> handles; IndexedDBBackingStore::RecordIdentifier record; - leveldb::Status s = backing_store_->PutRecord( - &transaction1, 1, 1, m_key1, &m_value1, &handles, &record); + leveldb::Status s = backing_store_->PutRecord(&transaction1, 1, 1, key1_, + &value1_, &handles, &record); EXPECT_TRUE(s.ok()); scoped_refptr<TestCallback> callback(new TestCallback()); EXPECT_TRUE(transaction1.CommitPhaseOne(callback).ok()); @@ -422,14 +418,14 @@ transaction2.Begin(); IndexedDBValue result_value; EXPECT_TRUE( - backing_store_->GetRecord(&transaction2, 1, 1, m_key1, &result_value) + backing_store_->GetRecord(&transaction2, 1, 1, key1_, &result_value) .ok()); scoped_refptr<TestCallback> callback(new TestCallback()); EXPECT_TRUE(transaction2.CommitPhaseOne(callback).ok()); EXPECT_TRUE(callback->called); EXPECT_TRUE(callback->succeeded); EXPECT_TRUE(transaction2.CommitPhaseTwo().ok()); - EXPECT_EQ(m_value1.bits, result_value.bits); + EXPECT_EQ(value1_.bits, result_value.bits); } } @@ -439,13 +435,10 @@ transaction1.Begin(); std::vector<std::unique_ptr<storage::BlobDataHandle>> handles; IndexedDBBackingStore::RecordIdentifier record; - EXPECT_TRUE(backing_store_->PutRecord(&transaction1, - 1, - 1, - m_key3, - &m_value3, - &handles, - &record).ok()); + EXPECT_TRUE( + backing_store_ + ->PutRecord(&transaction1, 1, 1, key3_, &value3_, &handles, &record) + .ok()); scoped_refptr<TestCallback> callback(new TestCallback()); EXPECT_TRUE(transaction1.CommitPhaseOne(callback).ok()); task_runner_->RunUntilIdle(); @@ -460,14 +453,14 @@ transaction2.Begin(); IndexedDBValue result_value; EXPECT_TRUE( - backing_store_->GetRecord(&transaction2, 1, 1, m_key3, &result_value) + backing_store_->GetRecord(&transaction2, 1, 1, key3_, &result_value) .ok()); scoped_refptr<TestCallback> callback(new TestCallback()); EXPECT_TRUE(transaction2.CommitPhaseOne(callback).ok()); EXPECT_TRUE(callback->called); EXPECT_TRUE(callback->succeeded); EXPECT_TRUE(transaction2.CommitPhaseTwo().ok()); - EXPECT_EQ(m_value3.bits, result_value.bits); + EXPECT_EQ(value3_.bits, result_value.bits); EXPECT_TRUE(CheckBlobInfoMatches(result_value.blob_info)); EXPECT_TRUE(CheckBlobReadsMatchWrites(result_value.blob_info)); } @@ -476,10 +469,9 @@ IndexedDBBackingStore::Transaction transaction3(backing_store_.get()); transaction3.Begin(); IndexedDBValue result_value; - EXPECT_TRUE( - backing_store_ - ->DeleteRange(&transaction3, 1, 1, IndexedDBKeyRange(m_key3)) - .ok()); + EXPECT_TRUE(backing_store_ + ->DeleteRange(&transaction3, 1, 1, IndexedDBKeyRange(key3_)) + .ok()); scoped_refptr<TestCallback> callback(new TestCallback()); EXPECT_TRUE(transaction3.CommitPhaseOne(callback).ok()); task_runner_->RunUntilIdle(); @@ -672,8 +664,10 @@ transaction1.Begin(); std::vector<std::unique_ptr<storage::BlobDataHandle>> handles1; IndexedDBBackingStore::RecordIdentifier record1; - EXPECT_TRUE(backing_store_->PutRecord(&transaction1, 1, 1, m_key3, &m_value3, - &handles1, &record1).ok()); + EXPECT_TRUE( + backing_store_ + ->PutRecord(&transaction1, 1, 1, key3_, &value3_, &handles1, &record1) + .ok()); scoped_refptr<TestCallback> callback1(new TestCallback()); EXPECT_TRUE(transaction1.CommitPhaseOne(callback1).ok()); task_runner_->RunUntilIdle(); @@ -686,8 +680,10 @@ transaction2.Begin(); std::vector<std::unique_ptr<storage::BlobDataHandle>> handles2; IndexedDBBackingStore::RecordIdentifier record2; - EXPECT_TRUE(backing_store_->PutRecord(&transaction2, 1, 1, m_key1, &m_value1, - &handles2, &record2).ok()); + EXPECT_TRUE( + backing_store_ + ->PutRecord(&transaction2, 1, 1, key1_, &value1_, &handles2, &record2) + .ok()); scoped_refptr<TestCallback> callback2(new TestCallback()); EXPECT_TRUE(transaction2.CommitPhaseOne(callback2).ok()); task_runner_->RunUntilIdle(); @@ -709,13 +705,10 @@ transaction1.Begin(); std::vector<std::unique_ptr<storage::BlobDataHandle>> handles; IndexedDBBackingStore::RecordIdentifier record; - EXPECT_TRUE(backing_store_->PutRecord(&transaction1, - 1, - 1, - m_key3, - &m_value3, - &handles, - &record).ok()); + EXPECT_TRUE( + backing_store_ + ->PutRecord(&transaction1, 1, 1, key3_, &value3_, &handles, &record) + .ok()); scoped_refptr<TestCallback> callback(new TestCallback()); EXPECT_TRUE(transaction1.CommitPhaseOne(callback).ok()); task_runner_->RunUntilIdle(); @@ -729,16 +722,15 @@ { IndexedDBBackingStore::Transaction transaction2(backing_store_.get()); transaction2.Begin(); - EXPECT_TRUE( - backing_store_->GetRecord( - &transaction2, 1, 1, m_key3, &read_result_value) - .ok()); + EXPECT_TRUE(backing_store_ + ->GetRecord(&transaction2, 1, 1, key3_, &read_result_value) + .ok()); scoped_refptr<TestCallback> callback(new TestCallback()); EXPECT_TRUE(transaction2.CommitPhaseOne(callback).ok()); EXPECT_TRUE(callback->called); EXPECT_TRUE(callback->succeeded); EXPECT_TRUE(transaction2.CommitPhaseTwo().ok()); - EXPECT_EQ(m_value3.bits, read_result_value.bits); + EXPECT_EQ(value3_.bits, read_result_value.bits); EXPECT_TRUE(CheckBlobInfoMatches(read_result_value.blob_info)); EXPECT_TRUE(CheckBlobReadsMatchWrites(read_result_value.blob_info)); for (size_t i = 0; i < read_result_value.blob_info.size(); ++i) { @@ -749,10 +741,9 @@ { IndexedDBBackingStore::Transaction transaction3(backing_store_.get()); transaction3.Begin(); - EXPECT_TRUE( - backing_store_ - ->DeleteRange(&transaction3, 1, 1, IndexedDBKeyRange(m_key3)) - .ok()); + EXPECT_TRUE(backing_store_ + ->DeleteRange(&transaction3, 1, 1, IndexedDBKeyRange(key3_)) + .ok()); scoped_refptr<TestCallback> callback(new TestCallback()); EXPECT_TRUE(transaction3.CommitPhaseOne(callback).ok()); task_runner_->RunUntilIdle(); @@ -780,7 +771,7 @@ const int64_t invalid_high_index_id = 1ULL << 37; - const IndexedDBKey& index_key = m_key2; + const IndexedDBKey& index_key = key2_; std::string index_key_raw; EncodeIDBKey(index_key, &index_key_raw); { @@ -788,13 +779,9 @@ transaction1.Begin(); std::vector<std::unique_ptr<storage::BlobDataHandle>> handles; IndexedDBBackingStore::RecordIdentifier record; - leveldb::Status s = backing_store_->PutRecord(&transaction1, - high_database_id, - high_object_store_id, - m_key1, - &m_value1, - &handles, - &record); + leveldb::Status s = backing_store_->PutRecord( + &transaction1, high_database_id, high_object_store_id, key1_, &value1_, + &handles, &record); EXPECT_TRUE(s.ok()); s = backing_store_->PutIndexDataForRecord(&transaction1, @@ -826,13 +813,11 @@ IndexedDBBackingStore::Transaction transaction2(backing_store_.get()); transaction2.Begin(); IndexedDBValue result_value; - leveldb::Status s = backing_store_->GetRecord(&transaction2, - high_database_id, - high_object_store_id, - m_key1, - &result_value); + leveldb::Status s = + backing_store_->GetRecord(&transaction2, high_database_id, + high_object_store_id, key1_, &result_value); EXPECT_TRUE(s.ok()); - EXPECT_EQ(m_value1.bits, result_value.bits); + EXPECT_EQ(value1_.bits, result_value.bits); std::unique_ptr<IndexedDBKey> new_primary_key; s = backing_store_->GetPrimaryKeyViaIndex(&transaction2, @@ -850,7 +835,7 @@ index_key, &new_primary_key); EXPECT_TRUE(s.ok()); - EXPECT_TRUE(new_primary_key->Equals(m_key1)); + EXPECT_TRUE(new_primary_key->Equals(key1_)); scoped_refptr<TestCallback> callback(new TestCallback()); s = transaction2.CommitPhaseOne(callback); @@ -878,77 +863,54 @@ std::vector<std::unique_ptr<storage::BlobDataHandle>> handles; IndexedDBBackingStore::RecordIdentifier record; - leveldb::Status s = backing_store_->PutRecord(&transaction1, - database_id, - KeyPrefix::kInvalidId, - m_key1, - &m_value1, - &handles, - &record); + leveldb::Status s = backing_store_->PutRecord(&transaction1, database_id, + KeyPrefix::kInvalidId, key1_, + &value1_, &handles, &record); EXPECT_FALSE(s.ok()); - s = backing_store_->PutRecord( - &transaction1, database_id, 0, m_key1, &m_value1, &handles, &record); + s = backing_store_->PutRecord(&transaction1, database_id, 0, key1_, &value1_, + &handles, &record); EXPECT_FALSE(s.ok()); - s = backing_store_->PutRecord(&transaction1, - KeyPrefix::kInvalidId, - object_store_id, - m_key1, - &m_value1, - &handles, + s = backing_store_->PutRecord(&transaction1, KeyPrefix::kInvalidId, + object_store_id, key1_, &value1_, &handles, &record); EXPECT_FALSE(s.ok()); - s = backing_store_->PutRecord( - &transaction1, 0, object_store_id, m_key1, &m_value1, &handles, &record); + s = backing_store_->PutRecord(&transaction1, 0, object_store_id, key1_, + &value1_, &handles, &record); EXPECT_FALSE(s.ok()); - s = backing_store_->GetRecord( - &transaction1, database_id, KeyPrefix::kInvalidId, m_key1, &result_value); + s = backing_store_->GetRecord(&transaction1, database_id, + KeyPrefix::kInvalidId, key1_, &result_value); EXPECT_FALSE(s.ok()); - s = backing_store_->GetRecord( - &transaction1, database_id, 0, m_key1, &result_value); - EXPECT_FALSE(s.ok()); - s = backing_store_->GetRecord(&transaction1, - KeyPrefix::kInvalidId, - object_store_id, - m_key1, + s = backing_store_->GetRecord(&transaction1, database_id, 0, key1_, &result_value); EXPECT_FALSE(s.ok()); - s = backing_store_->GetRecord( - &transaction1, 0, object_store_id, m_key1, &result_value); + s = backing_store_->GetRecord(&transaction1, KeyPrefix::kInvalidId, + object_store_id, key1_, &result_value); + EXPECT_FALSE(s.ok()); + s = backing_store_->GetRecord(&transaction1, 0, object_store_id, key1_, + &result_value); EXPECT_FALSE(s.ok()); std::unique_ptr<IndexedDBKey> new_primary_key; - s = backing_store_->GetPrimaryKeyViaIndex(&transaction1, - database_id, - object_store_id, - KeyPrefix::kInvalidId, - m_key1, - &new_primary_key); - EXPECT_FALSE(s.ok()); - s = backing_store_->GetPrimaryKeyViaIndex(&transaction1, - database_id, - object_store_id, - invalid_low_index_id, - m_key1, - &new_primary_key); + s = backing_store_->GetPrimaryKeyViaIndex( + &transaction1, database_id, object_store_id, KeyPrefix::kInvalidId, key1_, + &new_primary_key); EXPECT_FALSE(s.ok()); s = backing_store_->GetPrimaryKeyViaIndex( - &transaction1, database_id, object_store_id, 0, m_key1, &new_primary_key); + &transaction1, database_id, object_store_id, invalid_low_index_id, key1_, + &new_primary_key); + EXPECT_FALSE(s.ok()); + s = backing_store_->GetPrimaryKeyViaIndex( + &transaction1, database_id, object_store_id, 0, key1_, &new_primary_key); EXPECT_FALSE(s.ok()); - s = backing_store_->GetPrimaryKeyViaIndex(&transaction1, - KeyPrefix::kInvalidId, - object_store_id, - index_id, - m_key1, - &new_primary_key); + s = backing_store_->GetPrimaryKeyViaIndex( + &transaction1, KeyPrefix::kInvalidId, object_store_id, index_id, key1_, + &new_primary_key); EXPECT_FALSE(s.ok()); - s = backing_store_->GetPrimaryKeyViaIndex(&transaction1, - database_id, - KeyPrefix::kInvalidId, - index_id, - m_key1, - &new_primary_key); + s = backing_store_->GetPrimaryKeyViaIndex(&transaction1, database_id, + KeyPrefix::kInvalidId, index_id, + key1_, &new_primary_key); EXPECT_FALSE(s.ok()); }
diff --git a/content/browser/loader/resource_dispatcher_host_browsertest.cc b/content/browser/loader/resource_dispatcher_host_browsertest.cc index 806df8c..e328092 100644 --- a/content/browser/loader/resource_dispatcher_host_browsertest.cc +++ b/content/browser/loader/resource_dispatcher_host_browsertest.cc
@@ -17,7 +17,6 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "base/threading/sequenced_worker_pool.h" #include "build/build_config.h" #include "content/browser/download/download_manager_impl.h" #include "content/browser/loader/resource_dispatcher_host_impl.h" @@ -62,9 +61,7 @@ base::FilePath path = GetTestFilePath("", ""); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, - base::Bind( - &net::URLRequestMockHTTPJob::AddUrlHandlers, path, - make_scoped_refptr(content::BrowserThread::GetBlockingPool()))); + base::Bind(&net::URLRequestMockHTTPJob::AddUrlHandlers, path)); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(&net::URLRequestFailedJob::AddUrlHandler));
diff --git a/content/browser/loader/url_loader_factory_impl_unittest.cc b/content/browser/loader/url_loader_factory_impl_unittest.cc index b7aa147..825991714 100644 --- a/content/browser/loader/url_loader_factory_impl_unittest.cc +++ b/content/browser/loader/url_loader_factory_impl_unittest.cc
@@ -20,7 +20,6 @@ #include "base/message_loop/message_loop.h" #include "base/path_service.h" #include "base/run_loop.h" -#include "base/threading/sequenced_worker_pool.h" #include "content/browser/child_process_security_policy_impl.h" #include "content/browser/loader/mojo_async_resource_handler.h" #include "content/browser/loader/navigation_resource_throttle.h" @@ -153,8 +152,7 @@ mojom::URLLoaderAssociatedPtr loader; base::FilePath root; PathService::Get(DIR_TEST_DATA, &root); - net::URLRequestMockHTTPJob::AddUrlHandlers(root, - BrowserThread::GetBlockingPool()); + net::URLRequestMockHTTPJob::AddUrlHandlers(root); ResourceRequest request; TestURLLoaderClient client; // Assume the file contents is small enough to be stored in the data pipe. @@ -349,8 +347,7 @@ mojom::URLLoaderAssociatedPtr loader; base::FilePath root; PathService::Get(DIR_TEST_DATA, &root); - net::URLRequestMockHTTPJob::AddUrlHandlers(root, - BrowserThread::GetBlockingPool()); + net::URLRequestMockHTTPJob::AddUrlHandlers(root); ResourceRequest request; TestURLLoaderClient client; @@ -477,8 +474,7 @@ mojom::URLLoaderAssociatedPtr loader; base::FilePath root; PathService::Get(DIR_TEST_DATA, &root); - net::URLRequestMockHTTPJob::AddUrlHandlers(root, - BrowserThread::GetBlockingPool()); + net::URLRequestMockHTTPJob::AddUrlHandlers(root); ResourceRequest request; TestURLLoaderClient client; // Assume the file contents is small enough to be stored in the data pipe.
diff --git a/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc b/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc deleted file mode 100644 index 78dd9fc98..0000000 --- a/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc +++ /dev/null
@@ -1,239 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/test/scoped_feature_list.h" -#include "content/browser/renderer_host/render_widget_host_impl.h" -#include "content/browser/renderer_host/render_widget_host_input_event_router.h" -#include "content/browser/web_contents/web_contents_impl.h" -#include "content/common/input/synthetic_web_input_event_builders.h" -#include "content/public/common/content_features.h" -#include "content/public/test/browser_test_utils.h" -#include "content/public/test/content_browser_test.h" -#include "content/public/test/content_browser_test_utils.h" -#include "content/shell/browser/shell.h" -#include "ui/events/gesture_detection/gesture_configuration.h" - -#if defined(OS_ANDROID) -#include "content/browser/renderer_host/render_widget_host_view_android.h" -#endif - -using blink::WebMouseWheelEvent; - -namespace { -void GiveItSomeTime() { - base::RunLoop run_loop; - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, run_loop.QuitClosure(), base::TimeDelta::FromMilliseconds(10)); - run_loop.Run(); -} - -const char kWheelEventLatchingDataURL[] = - "data:text/html;charset=utf-8," - "<!DOCTYPE html>" - "<style>" - "body {" - " height: 10000px;" - "}" - "#scrollableDiv {" - " position: absolute;" - " left: 100px;" - " top: 200px;" - " width: 400px;" - " height: 800px;" - " overflow: scroll;" - " background: red;" - "}" - "#nestedDiv {" - " width: 400px;" - " height: 8000px;" - " opacity: 0;" - "}" - "</style>" - "<div id='scrollableDiv'>" - " <div id='nestedDiv'></div>" - "</div>" - "<script>" - " var scrollableDiv = document.getElementById('scrollableDiv');" - " var scrollableDivWheelEventCounter = 0;" - " var documentWheelEventCounter = 0;" - " scrollableDiv.addEventListener('wheel'," - " function(e) { scrollableDivWheelEventCounter++;" - " e.stopPropagation(); });" - " document.scrollingElement.addEventListener('wheel'," - " function(e) { documentWheelEventCounter++; });" - "</script>"; -} // namespace - -namespace content { -class WheelScrollLatchingBrowserTest : public ContentBrowserTest { - public: - WheelScrollLatchingBrowserTest(bool wheel_scroll_latching_enabled = true) - : wheel_scroll_latching_enabled_(wheel_scroll_latching_enabled) { - ui::GestureConfiguration::GetInstance()->set_scroll_debounce_interval_in_ms( - 0); - - if (wheel_scroll_latching_enabled_) - EnableWheelScrollLatching(); - else - DisableWheelScrollLatching(); - } - ~WheelScrollLatchingBrowserTest() override {} - - protected: - RenderWidgetHostImpl* GetWidgetHost() { - return RenderWidgetHostImpl::From( - web_contents()->GetRenderViewHost()->GetWidget()); - } - - WebContentsImpl* web_contents() const { - return static_cast<WebContentsImpl*>(shell()->web_contents()); - } - - RenderWidgetHostInputEventRouter* GetRouter() { - return web_contents()->GetInputEventRouter(); - } - - RenderWidgetHostViewBase* GetRootView() { - return static_cast<RenderWidgetHostViewBase*>(web_contents() - ->GetFrameTree() - ->root() - ->current_frame_host() - ->GetView()); - } - - float GetPageScaleFactor() { - return GetWidgetHost()->last_frame_metadata().page_scale_factor; - } - - void LoadURL() { - const GURL data_url(kWheelEventLatchingDataURL); - NavigateToURL(shell(), data_url); - - RenderWidgetHostImpl* host = GetWidgetHost(); - host->GetView()->SetSize(gfx::Size(600, 600)); - - // The page is loaded in the renderer, wait for a new frame to arrive. - while (!host->ScheduleComposite()) - GiveItSomeTime(); - } - int ExecuteScriptAndExtractInt(const std::string& script) { - int value = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - shell(), "domAutomationController.send(" + script + ")", &value)); - return value; - } - void EnableWheelScrollLatching() { - feature_list_.InitFromCommandLine( - features::kTouchpadAndWheelScrollLatching.name, ""); - } - void DisableWheelScrollLatching() { - feature_list_.InitFromCommandLine( - "", features::kTouchpadAndWheelScrollLatching.name); - } - - void WheelEventTargetTest() { - LoadURL(); - EXPECT_EQ(0, ExecuteScriptAndExtractInt("documentWheelEventCounter")); - EXPECT_EQ(0, ExecuteScriptAndExtractInt("scrollableDivWheelEventCounter")); - - FrameWatcher frame_watcher(shell()->web_contents()); - scoped_refptr<InputMsgWatcher> input_msg_watcher(new InputMsgWatcher( - GetWidgetHost(), blink::WebInputEvent::kMouseWheel)); - float scale_factor = GetPageScaleFactor(); - - float scrollable_div_top = - ExecuteScriptAndExtractInt("scrollableDiv.getBoundingClientRect().top"); - float x = scale_factor * - (ExecuteScriptAndExtractInt( - "scrollableDiv.getBoundingClientRect().left") + - ExecuteScriptAndExtractInt( - "scrollableDiv.getBoundingClientRect().right")) / - 2; - float y = scale_factor * 0.5 * scrollable_div_top; - float delta_x = 0; - float delta_y = -0.5 * scrollable_div_top; - blink::WebMouseWheelEvent wheel_event = - SyntheticWebMouseWheelEventBuilder::Build(x, y, x, y, delta_x, delta_y, - 0, true); - - wheel_event.phase = blink::WebMouseWheelEvent::kPhaseBegan; - GetRouter()->RouteMouseWheelEvent(GetRootView(), &wheel_event, - ui::LatencyInfo()); - - // Runs until we get the InputMsgAck callback. - EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, - input_msg_watcher->WaitForAck()); - - while (ExecuteScriptAndExtractInt("document.scrollingElement.scrollTop") < - -delta_y) { - frame_watcher.WaitFrames(1); - } - - EXPECT_EQ(0, ExecuteScriptAndExtractInt("scrollableDiv.scrollTop")); - EXPECT_EQ(1, ExecuteScriptAndExtractInt("documentWheelEventCounter")); - EXPECT_EQ(0, ExecuteScriptAndExtractInt("scrollableDivWheelEventCounter")); - - wheel_event.phase = blink::WebMouseWheelEvent::kPhaseChanged; - GetRouter()->RouteMouseWheelEvent(GetRootView(), &wheel_event, - ui::LatencyInfo()); - - // Runs until we get the InputMsgAck callback. - EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, - input_msg_watcher->WaitForAck()); - - if (wheel_scroll_latching_enabled_) { - while (ExecuteScriptAndExtractInt("document.scrollingElement.scrollTop") < - -2 * delta_y) { - frame_watcher.WaitFrames(1); - } - - EXPECT_EQ(0, ExecuteScriptAndExtractInt("scrollableDiv.scrollTop")); - EXPECT_EQ(2, ExecuteScriptAndExtractInt("documentWheelEventCounter")); - EXPECT_EQ(0, - ExecuteScriptAndExtractInt("scrollableDivWheelEventCounter")); - } else { // !wheel_scroll_latching_enabled_ - while (ExecuteScriptAndExtractInt("scrollableDiv.scrollTop") < -delta_y) - frame_watcher.WaitFrames(1); - - EXPECT_EQ(1, ExecuteScriptAndExtractInt("documentWheelEventCounter")); - EXPECT_EQ(1, - ExecuteScriptAndExtractInt("scrollableDivWheelEventCounter")); - } - } - - private: - base::test::ScopedFeatureList feature_list_; - bool wheel_scroll_latching_enabled_; -}; - -class WheelScrollLatchingDisabledBrowserTest - : public WheelScrollLatchingBrowserTest { - public: - WheelScrollLatchingDisabledBrowserTest() - : WheelScrollLatchingBrowserTest(false) {} - ~WheelScrollLatchingDisabledBrowserTest() override {} -}; - -// Start scrolling by mouse wheel on the document: the wheel event will be sent -// to the document's scrolling element, the scrollable div will be under the -// cursor after applying the scrolling. Continue scrolling by mouse wheel, since -// wheel scroll latching is enabled the wheel event will be still sent to the -// document's scrolling element and the document's scrolling element will -// continue scrolling. -IN_PROC_BROWSER_TEST_F(WheelScrollLatchingBrowserTest, WheelEventTarget) { - WheelEventTargetTest(); -} - -// Start scrolling by mouse wheel on the document: the wheel event will be sent -// to the document's scrolling element, the scrollable div will be under the -// cursor after applying the scrolloffsets. Continue scrolling by mouse wheel, -// since wheel scroll latching is disabled the wheel event will be still sent to -// the scrollable div which is currently under the cursor. The div will start -// scrolling. -IN_PROC_BROWSER_TEST_F(WheelScrollLatchingDisabledBrowserTest, - WheelEventTarget) { - WheelEventTargetTest(); -} - -} // namespace content \ No newline at end of file
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index bbb68141..2c2d83dc 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -202,7 +202,7 @@ #include "third_party/skia/include/core/SkBitmap.h" #include "ui/base/ui_base_switches.h" #include "ui/display/display_switches.h" -#include "ui/gfx/switches.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gl/gl_switches.h" #include "ui/gl/gpu_switching_manager.h" #include "ui/native_theme/native_theme_features.h"
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc index 7e8adbe..2b9c1d5 100644 --- a/content/browser/renderer_host/render_view_host_impl.cc +++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -88,9 +88,9 @@ #include "ui/display/display_switches.h" #include "ui/gfx/animation/animation.h" #include "ui/gfx/color_space.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gfx/image/image_skia.h" #include "ui/gfx/native_widget_types.h" -#include "ui/gfx/switches.h" #include "ui/native_theme/native_theme_features.h" #include "url/url_constants.h"
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router.cc b/content/browser/renderer_host/render_widget_host_input_event_router.cc index c88f7d6..fe73293b 100644 --- a/content/browser/renderer_host/render_widget_host_input_event_router.cc +++ b/content/browser/renderer_host/render_widget_host_input_event_router.cc
@@ -284,27 +284,7 @@ event->PositionInWidget().y), target, &transformed_point)) return; - } else if (root_view->wheel_scroll_latching_enabled()) { - if (event->phase == blink::WebMouseWheelEvent::kPhaseBegan) { - wheel_target_.target = FindEventTarget( - root_view, - gfx::Point(event->PositionInWidget().x, event->PositionInWidget().y), - &transformed_point); - wheel_target_.delta = - transformed_point - - gfx::Point(event->PositionInWidget().x, event->PositionInWidget().y); - target = wheel_target_.target; - } else { - if (wheel_target_.target) { - target = wheel_target_.target; - transformed_point = gfx::Point(event->PositionInWidget().x, - event->PositionInWidget().y) + - wheel_target_.delta; - } - } - - } else { // !root_view->IsMouseLocked() && - // !root_view->wheel_scroll_latching_enabled() + } else { target = FindEventTarget( root_view, gfx::Point(event->PositionInWidget().x, event->PositionInWidget().y), @@ -316,12 +296,6 @@ event->SetPositionInWidget(transformed_point.x(), transformed_point.y()); target->ProcessMouseWheelEvent(*event, latency); - - DCHECK(root_view->wheel_scroll_latching_enabled() || !wheel_target_.target); - if (event->phase == blink::WebMouseWheelEvent::kPhaseEnded || - event->momentum_phase == blink::WebMouseWheelEvent::kPhaseEnded) { - wheel_target_.target = nullptr; - } } void RenderWidgetHostInputEventRouter::RouteGestureEvent(
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router.h b/content/browser/renderer_host/render_widget_host_input_event_router.h index 08bb689..f12ba5ddc 100644 --- a/content/browser/renderer_host/render_widget_host_input_event_router.h +++ b/content/browser/renderer_host/render_widget_host_input_event_router.h
@@ -164,9 +164,6 @@ TargetData touchpad_gesture_target_; TargetData bubbling_gesture_scroll_target_; TargetData first_bubbling_scroll_target_; - // Used to target wheel events for the duration of a scroll when wheel scroll - // latching is enabled. - TargetData wheel_target_; // Maintains the same target between mouse down and mouse up. TargetData mouse_capture_target_;
diff --git a/content/browser/theme_helper_mac.h b/content/browser/theme_helper_mac.h index be507d95..52da98f1 100644 --- a/content/browser/theme_helper_mac.h +++ b/content/browser/theme_helper_mac.h
@@ -9,7 +9,7 @@ #include "base/memory/singleton.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" -#include "third_party/WebKit/public/web/mac/WebScrollbarTheme.h" +#include "third_party/WebKit/public/platform/mac/WebScrollbarTheme.h" namespace content {
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 40429d51..928e5369 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -488,6 +488,7 @@ upload_size_(0), upload_position_(0), is_resume_pending_(false), + interstitial_page_(nullptr), has_accessed_initial_document_(false), theme_color_(SK_ColorTRANSPARENT), last_sent_theme_color_(SK_ColorTRANSPARENT), @@ -1286,8 +1287,7 @@ bool WebContentsImpl::IsLoading() const { return frame_tree_.IsLoading() && - !(ShowingInterstitialPage() && - GetRenderManager()->interstitial_page()->pause_throbber()); + !(ShowingInterstitialPage() && interstitial_page_->pause_throbber()); } bool WebContentsImpl::IsLoadingToDifferentDocument() const { @@ -1976,9 +1976,7 @@ // interstitial's widget. if (focused_contents->ShowingInterstitialPage()) { return static_cast<RenderFrameHostImpl*>( - focused_contents->GetRenderManager() - ->interstitial_page() - ->GetMainFrame()) + focused_contents->interstitial_page_->GetMainFrame()) ->GetRenderWidgetHost(); } @@ -2011,9 +2009,7 @@ if (focused_web_contents->ShowingInterstitialPage()) { return static_cast<RenderFrameHostImpl*>( - focused_web_contents->GetRenderManager() - ->interstitial_page() - ->GetMainFrame()) + focused_web_contents->interstitial_page_->GetMainFrame()) ->GetRenderWidgetHost(); } @@ -2857,8 +2853,8 @@ void WebContentsImpl::AttachInterstitialPage( InterstitialPageImpl* interstitial_page) { - DCHECK(interstitial_page); - GetRenderManager()->set_interstitial_page(interstitial_page); + DCHECK(!interstitial_page_ && interstitial_page); + interstitial_page_ = interstitial_page; // Cancel any visible dialogs so that they don't interfere with the // interstitial. @@ -2887,8 +2883,7 @@ void WebContentsImpl::DidProceedOnInterstitial() { // The interstitial page should no longer be pausing the throbber. - DCHECK(!(ShowingInterstitialPage() && - GetRenderManager()->interstitial_page()->pause_throbber())); + DCHECK(!(ShowingInterstitialPage() && interstitial_page_->pause_throbber())); // Restart the throbber now that the interstitial page no longer pauses it. if (ShowingInterstitialPage() && frame_tree_.IsLoading()) @@ -2910,10 +2905,9 @@ } bool interstitial_pausing_throbber = - ShowingInterstitialPage() && - GetRenderManager()->interstitial_page()->pause_throbber(); + ShowingInterstitialPage() && interstitial_page_->pause_throbber(); if (ShowingInterstitialPage()) - GetRenderManager()->remove_interstitial_page(); + interstitial_page_ = nullptr; for (auto& observer : observers_) observer.DidDetachInterstitialPage(); @@ -3121,7 +3115,7 @@ void WebContentsImpl::FocusThroughTabTraversal(bool reverse) { if (ShowingInterstitialPage()) { - GetRenderManager()->interstitial_page()->FocusThroughTabTraversal(reverse); + interstitial_page_->FocusThroughTabTraversal(reverse); return; } RenderWidgetHostView* const fullscreen_view = @@ -3134,11 +3128,11 @@ } bool WebContentsImpl::ShowingInterstitialPage() const { - return GetRenderManager()->interstitial_page() != NULL; + return interstitial_page_ != nullptr; } InterstitialPage* WebContentsImpl::GetInterstitialPage() const { - return GetRenderManager()->interstitial_page(); + return interstitial_page_; } bool WebContentsImpl::IsSavable() { @@ -4277,8 +4271,7 @@ LoadNotificationDetails* details) { // Do not send notifications about loading changes in the FrameTree while the // interstitial page is pausing the throbber. - if (ShowingInterstitialPage() && - GetRenderManager()->interstitial_page()->pause_throbber() && + if (ShowingInterstitialPage() && interstitial_page_->pause_throbber() && !due_to_interstitial) { return; } @@ -5018,8 +5011,7 @@ GetRenderManager()->GetProxyToOuterDelegate()->SetFocusedFrame(); if (ShowingInterstitialPage()) { - static_cast<RenderFrameHostImpl*>( - GetRenderManager()->interstitial_page()->GetMainFrame()) + static_cast<RenderFrameHostImpl*>(interstitial_page_->GetMainFrame()) ->GetRenderWidgetHost() ->SetPageFocus(true); } else { @@ -5228,6 +5220,10 @@ return controller_.GetLastCommittedEntry(); } +InterstitialPageImpl* WebContentsImpl::GetInterstitialForRenderManager() { + return interstitial_page_; +} + void WebContentsImpl::CreateRenderWidgetHostViewForRenderManager( RenderViewHost* render_view_host) { RenderWidgetHostViewBase* rwh_view =
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index e6fe43f9..d683bb9 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h
@@ -757,6 +757,7 @@ RenderViewHost* new_host) override; NavigationControllerImpl& GetControllerForRenderManager() override; NavigationEntry* GetLastCommittedNavigationEntryForRenderManager() override; + InterstitialPageImpl* GetInterstitialForRenderManager() override; bool FocusLocationBarByDefault() override; void SetFocusToLocationBar(bool select_all) override; bool IsHidden() override; @@ -1363,6 +1364,12 @@ // See ResumeLoadingCreatedWebContents. bool is_resume_pending_; + // The interstitial page currently shown, if any. Not owned by this class: the + // InterstitialPage is self-owned and deletes itself asynchronously when + // hidden. Because it may outlive this WebContents, it enters a disabled state + // when hidden or preparing for destruction. + InterstitialPageImpl* interstitial_page_; + // Data for current page ----------------------------------------------------- // When a title cannot be taken from any entry, this title will be used.
diff --git a/content/common/DEPS b/content/common/DEPS index 2ecbdeb..74e46d7 100644 --- a/content/common/DEPS +++ b/content/common/DEPS
@@ -36,6 +36,7 @@ "+third_party/WebKit/public/platform/WebStorageArea.h", "+third_party/WebKit/public/platform/WebTouchEvent.h", "+third_party/WebKit/public/platform/linux/WebFallbackFont.h", + "+third_party/WebKit/public/platform/mac/WebScrollbarTheme.h", "+third_party/WebKit/public/platform/modules/bluetooth/web_bluetooth.mojom.h", "+third_party/WebKit/public/platform/modules/device_orientation/WebDeviceMotionData.h", "+third_party/WebKit/public/platform/modules/device_orientation/WebDeviceOrientationData.h", @@ -75,6 +76,5 @@ "+third_party/WebKit/public/web/WebSharedWorkerCreationErrors.h", "+third_party/WebKit/public/web/WebTextDirection.h", "+third_party/WebKit/public/web/WebTreeScopeType.h", - "+third_party/WebKit/public/web/mac/WebScrollbarTheme.h", "+third_party/WebKit/public/web/win/WebFontRendering.h" ]
diff --git a/content/common/native_types_mac.typemap b/content/common/native_types_mac.typemap index d614f04..6a9fef2 100644 --- a/content/common/native_types_mac.typemap +++ b/content/common/native_types_mac.typemap
@@ -5,7 +5,7 @@ mojom = "//content/common/native_types.mojom" public_headers = [ "//third_party/WebKit/public/platform/WebScrollbarButtonsPlacement.h", - "//third_party/WebKit/public/web/mac/WebScrollbarTheme.h", + "//third_party/WebKit/public/platform/mac/WebScrollbarTheme.h", ] traits_headers = [ "//content/common/view_messages.h" ] deps = [
diff --git a/content/common/view_messages.h b/content/common/view_messages.h index b07a8370..119838d 100644 --- a/content/common/view_messages.h +++ b/content/common/view_messages.h
@@ -68,7 +68,7 @@ #if defined(OS_MACOSX) #include "third_party/WebKit/public/platform/WebScrollbarButtonsPlacement.h" -#include "third_party/WebKit/public/web/mac/WebScrollbarTheme.h" +#include "third_party/WebKit/public/platform/mac/WebScrollbarTheme.h" #endif #undef IPC_MESSAGE_EXPORT
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/LollipopWebContentsAccessibility.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/LollipopWebContentsAccessibility.java index dd71f4c5..75cb232 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/LollipopWebContentsAccessibility.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/LollipopWebContentsAccessibility.java
@@ -9,6 +9,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.ReceiverCallNotAllowedException; import android.os.Build; import android.text.SpannableString; import android.text.style.LocaleSpan; @@ -40,13 +41,19 @@ super(context, containerView, webContents, renderCoordinates, shouldFocusOnPageLoad); // Cache the system language and set up a listener for when it changes. - IntentFilter filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED); - context.registerReceiver(new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - mSystemLanguageTag = Locale.getDefault().toLanguageTag(); - } - }, filter); + // TODO(dmazzoni): the try/catch is because this fails in AndroidWebView + // sometimes. Is there a different context we can use or is this just not + // always possible depending on the app permissions? http://crbug.com/732933 + try { + IntentFilter filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED); + context.registerReceiver(new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + mSystemLanguageTag = Locale.getDefault().toLanguageTag(); + } + }, filter); + } catch (ReceiverCallNotAllowedException e) { + } mSystemLanguageTag = Locale.getDefault().toLanguageTag(); }
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc index 9b8547c..e6fd186 100644 --- a/content/renderer/gpu/render_widget_compositor.cc +++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -67,6 +67,7 @@ #include "third_party/WebKit/public/web/WebKit.h" #include "third_party/WebKit/public/web/WebSelection.h" #include "third_party/skia/include/core/SkImage.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gfx/switches.h" #include "ui/gl/gl_switches.h" #include "ui/native_theme/native_theme_features.h"
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index aff4d74..5049df8 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -1801,6 +1801,12 @@ proxy = RenderFrameProxy::CreateProxyToReplaceFrame( this, proxy_routing_id, replicated_frame_state.scope); + // Synchronously run the unload handler before sending the ACK. + // TODO(creis): Call dispatchUnloadEvent unconditionally here to support + // unload on subframes as well. + if (is_main_frame_) + frame_->DispatchUnloadEvent(); + // Swap out and stop sending any IPC messages that are not ACKs. if (is_main_frame_) render_view_->SetSwappedOut(true);
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h index 08b6939..23f3aee7 100644 --- a/content/renderer/render_thread_impl.h +++ b/content/renderer/render_thread_impl.h
@@ -60,7 +60,7 @@ #include "ui/gfx/native_widget_types.h" #if defined(OS_MACOSX) -#include "third_party/WebKit/public/web/mac/WebScrollbarTheme.h" +#include "third_party/WebKit/public/platform/mac/WebScrollbarTheme.h" #endif class SkBitmap;
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index e5ca796..6c6c3133 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc
@@ -2206,6 +2206,25 @@ EXPECT_EQ(gfx::Size(800, 800), size); } +TEST_F(RenderViewImplScaleFactorTest, PreferredSizeWithScaleFactor) { + DoSetUp(); + LoadHTML("<body style='margin:0;'><div style='display:inline-block; " + "width:400px; height:400px;'/></body>"); + view()->webview()->MainFrame()->ToWebLocalFrame()->SetCanHaveScrollbars( + false); + EnablePreferredSizeMode(); + + gfx::Size size = GetPreferredSize(); + EXPECT_EQ(gfx::Size(400, 400), size); + + // The size is in DIP. Changing the scale factor should not change + // the preferred size. (Caveat: a page may apply different layout for + // high DPI, in which case, the size may differ.) + SetDeviceScaleFactor(2.f); + size = GetPreferredSize(); + EXPECT_EQ(gfx::Size(400, 400), size); +} + // Ensure the RenderViewImpl history list is properly updated when starting a // new browser-initiated navigation. TEST_F(RenderViewImplTest, HistoryIsProperlyUpdatedOnNavigation) {
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 9aa953a..50d6749 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc
@@ -1880,8 +1880,10 @@ // message. if (!send_preferred_size_changes_ || !webview()) return; - - gfx::Size size = webview()->ContentsPreferredMinimumSize(); + blink::WebSize tmp_size = webview()->ContentsPreferredMinimumSize(); + blink::WebRect tmp_rect(0, 0, tmp_size.width, tmp_size.height); + ConvertViewportToWindow(&tmp_rect); + gfx::Size size(tmp_rect.width, tmp_rect.height); if (size == preferred_size_) return;
diff --git a/content/shell/app/shell_main_delegate.cc b/content/shell/app/shell_main_delegate.cc index 546b0126a..f496af7 100644 --- a/content/shell/app/shell_main_delegate.cc +++ b/content/shell/app/shell_main_delegate.cc
@@ -44,7 +44,7 @@ #include "ui/base/ui_base_paths.h" #include "ui/base/ui_base_switches.h" #include "ui/display/display_switches.h" -#include "ui/gfx/switches.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_switches.h"
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 45bb5a8..45103a4 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -692,7 +692,6 @@ "../browser/renderer_host/input/touch_action_browsertest.cc", "../browser/renderer_host/input/touch_input_browsertest.cc", "../browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc", - "../browser/renderer_host/input/wheel_scroll_latching_browsertest.cc", "../browser/renderer_host/media/video_capture_browsertest.cc", "../browser/renderer_host/render_process_host_browsertest.cc", "../browser/renderer_host/render_view_host_browsertest.cc",
diff --git a/content/test/layouttest_support.cc b/content/test/layouttest_support.cc index bcb6d396..43bf078 100644 --- a/content/test/layouttest_support.cc +++ b/content/test/layouttest_support.cc
@@ -53,9 +53,9 @@ #include "third_party/WebKit/public/web/WebHistoryItem.h" #include "third_party/WebKit/public/web/WebView.h" #include "ui/events/blink/blink_event_util.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gfx/geometry/vector2d.h" #include "ui/gfx/icc_profile.h" -#include "ui/gfx/switches.h" #include "ui/gfx/test/icc_profiles.h" #if defined(OS_MACOSX)
diff --git a/docs/speed/README.md b/docs/speed/README.md new file mode 100644 index 0000000..7c7ac07c --- /dev/null +++ b/docs/speed/README.md
@@ -0,0 +1,33 @@ +# Chrome Speed + +## Contact information + + * **Contact**: **speed@chromium.org** + * **Escalation**: rschoen@chromium.org (PM), benhenry@chromium.org (TPM), + parisa@chromium.org (eng director) + * **[File a bug](https://bugs.chromium.org/p/chromium/issues/entry?template=Speed%20Bug)** + * **Regression postmortem**: [template](https://docs.google.com/document/d/1fvfhFNOoUL9rB0XAEe1MYefyM_9yriR1IPjdxdm7PaQ/edit?disco=AAAABKdHwCg) + +## User Docs + + * [How does Chrome measure performance?](how_does_chrome_measure_performance.md) + * [My CL caused a performance regression! What do I do?](addressing_performance_regressions.md) + * [I want Chrome to have better performance](help_improve_performance.md) + * [Perf sheriffing documentation](perf_regression_sheriffing.md) + * [I want to add tests or platforms to the perf waterfall](adding_tests_bots.md) + * [I'm looking for more information on the Speed Progam](speed_program.md) + +## Core Teams and Work + + * **[Performance tracks](performance_tracks.md)**: Most of the performance + work on Chrome is organized into these tracks. + * **[Chrome Speed Operations](chrome_speed_operations.md)**: provides the + benchmarks, infrastructure, and releasing oversight to track regressions. + <!--- TODO: General discussion: chrome-speed-operations mailing list link --> + <!--- TODO: Tracking releases and regressions: chrome-speed-releasing mailing list link --> + * Benchmark-specific discussion: benchmarking-dev@chromium.org + <!--- TODO: Requests for new benchmarks: chrome-benchmarking-request mailing list link --> + * Performance dashboard, bisect, try jobs: speed-services-dev@chromium.org + * **[Chrome Speed Metrics](https://docs.google.com/document/d/1wBT5fauGf8bqW2Wcg2A5Z-3_ZvgPhE8fbp1Xe6xfGRs/edit#heading=h.8ieoiiwdknwt)**: provides a set of high-quality metrics that represent real-world user experience, and exposes these metrics to both Chrome and Web Developers. + * General discussion: progressive-web-metrics@chromium.org + * The actual metrics: [tracking](https://docs.google.com/spreadsheets/d/1gY5hkKPp8RNVqmOw1d-bo-f9EXLqtq4wa3Z7Q8Ek9Tk/edit#gid=0) \ No newline at end of file
diff --git a/docs/speed/addressing_performance_regressions.md b/docs/speed/addressing_performance_regressions.md new file mode 100644 index 0000000..dd75ce1 --- /dev/null +++ b/docs/speed/addressing_performance_regressions.md
@@ -0,0 +1,214 @@ +# Addressing Performance Regressions + +The bisect bot just picked your CL as the culprit in a performance regression +and assigned a bug to you! What should you do? Read on... + +## About our performance tests + +The [chromium.perf waterfall](perf_waterfall.md) is a continuous build which +runs performance tests on dozens of devices across Windows, Mac, Linux, and +Android Chrome and WebView. Often, a performance regression only affects a +certain type of hardware or a certain operating system, which may be different +than what you tested locally before landing your CL. + +Each test has an owner, named in +[this spreasheet](https://docs.google.com/spreadsheets/d/1xaAo0_SU3iDfGdqDJZX_jRV0QtkufwHUKH3kQKF3YQs/edit#gid=0), +who you can cc on a performance bug if you have questions. + +## Understanding the bisect results + +The bisect bot spits out a comment on the bug that looks like this: + +``` +=== BISECT JOB RESULTS === +Perf regression found with culprit + +Suspected Commit +Author : Your Name +Commit : 15092e9195954cbc331cd58e344d0895fe03d0cd +Date : Wed Jun 14 03:09:47 2017 +Subject: Your CL Description. + +Bisect Details +Configuration: mac_pro_perf_bisect +Benchmark : system_health.common_desktop +Metric : timeToFirstContentfulPaint_avg/load_search/load_search_taobao +Change : 15.25% | 1010.02 -> 1164.04 + +Revision Result N +chromium@479147 1010.02 +- 1535.41 14 good +chromium@479209 699.332 +- 1282.01 6 good +chromium@479240 383.617 +- 917.038 6 good +chromium@479255 649.186 +- 1896.26 14 good +chromium@479262 788.828 +- 1897.91 14 good +chromium@479268 880.727 +- 2235.29 21 good +chromium@479269 886.511 +- 1150.91 6 good +chromium@479270 1164.04 +- 979.746 14 bad <-- + +To Run This Test +src/tools/perf/run_benchmark -v --browser=release --output-format=chartjson --upload-results --pageset-repeat=1 --also-run-disabled-tests --story-filter=load.search.taobao system_health.common_desktop +``` + +There's a lot of information packed in that bug comment! Here's a breakdown: + + * **What regressed exactly?** The comment gives you several details: + * **The benchmark that regressed**: Under `Bisect Details`, you can see + `Benchmark :`. In this case, the `system_health.common_desktop` + benchmark regressed. + * **What platform did it regress on?** Under `Configuration`, you can find + some details on the bot that regressed. In this example, it is a Mac Pro + laptop. + * **How do I run that locally?** Follow the instructions under + `To Run This Test`. But be aware that if it regressed on Android and + you're developing on Windows, you may not be able to reproduce locally. + (See Debugging regressions below) + * **What is this testing?** Generally the metric + (`timeToFirstContentfulPaint_avg`) gives some information. If you're not + familiar, you can cc the [benchmark owner](https://docs.google.com/spreadsheets/d/1xaAo0_SU3iDfGdqDJZX_jRV0QtkufwHUKH3kQKF3YQs/edit#gid=0) + to ask for help. + * **How severe is this regression?** There are different axes on which to + answer that question: + * **How much did performance regress?** The bisect bot answers this both + in relative terms (`Change : 15.25%`) and absolute terms + (`1010.02 -> 1164.04`). To understand the absolute terms, you'll need + to look at the units on the performance graphs linked in comment #1 + of the bug (`https://chromeperf.appspot.com/group_report?bug_id=XXX`). + In this example, the units are milliseconds; the time to load taobao + regressed from ~1.02 second to 1.16 seconds. + * **How widespread is the regression?** The graphs linked in comment #1 + of the bug (`https://chromeperf.appspot.com/group_report?bug_id=XXX`) + will give you an idea how widespread the regression is. The `Bot` + column shows all the different bots the regression occurred on, and the + `Test` column shows the metrics it regressed on. Often, the same metric + is gathered on many different web pages. If you see a long list of + pages, it's likely that the regression affects most pages; if it's + short maybe your regression is an edge case. + +## Debugging regressions + + * **How do I run the test locally???** Follow the instructions under + `To Run This Test` in the bisect comment. But be aware that regressions + are often hardware and/or platform-specific. + * **What do I do if I don't have the right hardware to test locally?** If + you don't have a local machine that matches the specs of the hardware that + regressed, you can run a perf tryjob on the same lab machines that ran the + bisect that blamed your CL. + [Here are the instructions for perf tryjobs](perf_trybots.md). + Drop the `perf_bisect` from the bot name and substitute dashes for + underscores to get the trybot name (`mac_pro_perf_bisect` -> `mac_pro` + in the example above). + * **Can I get a trace?** For most metrics, yes. Here are the steps: + 1. Click on the `All graphs for this bug` link in comment #1. It should + look like this: + `https://chromeperf.appspot.com/group_report?bug_id=XXXX` + 2. Select a bot/test combo that looks like what the bisect bot originally + caught. You might want to look through various regressions for a really + large increase. + 3. On the graph, click on the exclamation point icon at the regression, and + a tooltip comes up. There is a "trace" link in the tooltip, click it to + open a the trace that was recorded during the performance test. + * **Wait, what's a trace?** See the + [documentation on tracing](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool) + to learn how to use traces to debug performance issues. + * **Are there debugging tips specific to certain benchmarks?** + * **[Memory](https://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra/memory_benchmarks.md)** + * **[Android binary size](apk_size_regressions.md)** + +## If you don't believe your CL could be the cause + +There are some clear reasons to believe the bisect bot made a mistake: + + * Your CL changes a test or some code that isn't compiled on the platform + that regressed. + * Your CL is completely unrelated to the metric that regressed. + * You looked at the numbers the bisect spit out (see example above; the first + column is the revision, the second column is the value at that revision, + and the third column is the standard deviation), and: + * The change attributed to your CL seems well within the noise, or + * The change at your CL is an improvement (for example, the metric is bytes + of memory used, and the value goes **down** at your CL) or + * The change is far smaller that what's reported in the bug summary (for + example, the bug says there is a 15% memory regression but the bisect + found that your CL increases memory by 0.77%) + +Do the following: + + * Add a comment to the bug explaining why you believe your CL is not the + cause of the regression. + * **Unassign yourself from the bug**. This lets our triage process know that + you are not actively working on the bug. + * Kick off another bisect. You can do this by: + 1. Click on the `All graphs for this bug` link in comment #1. It should + look like this: + `https://chromeperf.appspot.com/group_report?bug_id=XXXX` + 2. Sign in to the dashboard with your chromium.org account in the upper + right corner. + 3. Select a bot/test combo that looks like what the bisect bot originally + caught. You might want to look through various regressions for a really + clear increase. + 4. On the graph, click on the exclamation point icon at the regression, and + a tooltip comes up. Click the `Bisect` button on the tooltip. + + +## If you believe the regression is justified + +Sometimes you are aware that your CL caused a performance regression, but you +believe the CL should be landed as-is anyway. Chrome's +[core principles](https://www.chromium.org/developers/core-principles) state: + +> If you make a change that regresses measured performance, you will be required to fix it or revert. + +**It is your responsibility to justify the regression.** You must add a comment +on the bug explaining your justification clearly before WontFix-ing. + +Here are some common justification scenarios: + + * **Your change regresses this metric, but is a net positive for performance.** + There are a few ways to demonstrate that this is true: + * **Use benchmark results.** If your change has a positive impact, there + should be clear improvements detected in benchmarks. You can look at all + the changes (positive and negative) the perf dashboard detected by + entering the commit position of a change into this url: + `https://chromeperf.appspot.com/group_report?rev=YOUR_COMMIT_POS_HERE` + All of these changes are generally changes found on a CL range, and may + not be attributable to your CL. You can bisect any of these to find if + your CL caused the improvement, just like you can bisect to find if it + caused the regression. + * **Use finch trial results.** There are some types of changes that cannot + be measured well in benchmarks. If you believe your case falls into this + category, you can show that end users are not affected via a finch trial. + See the "End-user metrics" section of + [How does Chrome measure performance](how_does_chrome_measure_performance.md) + * **Your change is a critical correctness or security fix.** + It's true that sometimes something was "fast" because it was implemented + incorrectly. In this case, a justification should clarify the performance + cost we are paying for the fix and why it is worth it. Some things to + include: + * **What did the benchmark regression cost?** Look at the + list of regressions in bug comment 1: + `https://chromeperf.appspot.com/group_report?bug_id=XXXX` + What is the absolute cost (5MiB RAM? 200ms on page load?) + How many pages regressed? How many platforms? + * **What do we gain?** It could be something like: + * Reduced code complexity + * Optimal code or UI correctness + * Additional security + * Knowledge via an experiment + * Marketing - something good for users + * **Is there a more performant way to solve the problem?** + The [benchmark owner](https://docs.google.com/spreadsheets/d/1xaAo0_SU3iDfGdqDJZX_jRV0QtkufwHUKH3kQKF3YQs/edit#gid=0) + can generally give you an idea how much work it would take to make a + similarly-sized performance gain. For example, it might take 1.5 + engineering years to save 3MiB of RAM on Android; could you solve the + problem in a way that takes less memory than that in less than 1.5 years? + * **This performance metric is incorrect.** Not all tests are perfect. It's + possible that your change did not regress performance, and only appears to + be a problem because the test is measuring incorrectly. If this is the + case, you must explain clearly what the issue with the test is, and why you + believe your change is performance neutral. Please include data from traces + or other performance tools to clarify your claim. + +**In all cases,** make sure to cc the [benchmark owner](https://docs.google.com/spreadsheets/d/1xaAo0_SU3iDfGdqDJZX_jRV0QtkufwHUKH3kQKF3YQs/edit#gid=0) +when writing a justification and WontFix-ing a bug. If you cannot come to an +agreement with the benchmark owner, you can escalate to benhenry@chromium.org, +the owner of speed releasing. \ No newline at end of file
diff --git a/docs/speed/chrome_speed_operations.md b/docs/speed/chrome_speed_operations.md new file mode 100644 index 0000000..f9f62d8a --- /dev/null +++ b/docs/speed/chrome_speed_operations.md
@@ -0,0 +1,52 @@ +# Chrome Speed Operations + +Chrome Speed Operations exists to prevent Chrome from regressing on +responsiveness, smoothness, memory, power or other key performance metrics. +We seek to integrate a world-class benchmarking framework and performance +monitoring tools into Chrome's release process. + +TL: sullivan@chromium.org<br> +TPM: benhenry@chromium.org + +Speed Operations consists of 3 teams, working in tandem: + +## Benchmarks +The benchmarks team provides: + * A set of [releasing-oriented benchmarks](https://docs.google.com/document/d/1BM_6lBrPzpMNMtcyi2NFKGIzmzIQ1oH3OlNG27kDGNU/edit) + that measure key user-visible performance metrics in important scenarios. + We work closely with Chrome Speed Metrics team on the metrics and with + Releasing team on the scenarios. + * A set of [opinionated benchmarking frameworks](https://docs.google.com/document/d/1ni2MIeVnlH4bTj4yvEDMVNxgL73PqK_O9_NUm3NW3BA/edit) + that make it easy for Chromium developers to add lower-level benchmarks for + the areas of Chrome performance important to them. + * Automation to run these benchmarks on our continuous build on several dozen + real device types, on Windows, Mac, Linux, and Android, with hardware power + monitoring. + +TL: nednguyen@chromium.org<br> +Contact: benchmarking-dev@chromium.org + +## Services +The [services](chrome_speed_services.md) team provides: + * The [Chrome performance dashboard](https://chromeperf.appspot.com), which + stores performance timeseries and related debugging data. The dashboard + automatically detects regressions in these timeseries and has integration + with Chromium's bug tracker for easy tracking. + * Tools for [bisecting regressions](bisects.md) on our continuous build down + to an exact culprit CL. + * A [performance try job service](perf_trybots.md) which allows chromium + developers to run benchmarks on unsubmitted CLs using the same hardware + we use in the continuous build. + +TL: simonhatch@chromium.org<br> +Contact: speed-services-dev@chromium.org + +## Releasing +The releasing team provides: + * Tracking of all performance regressions seen in user-visible performance + both in the wild and in the lab. + * A per-milestone report on Chrome's performance. + * Recommendations about lab hardware and new test scenarios. + * Management of performance sheriff rotations. + +TPM: benhenry@chromium.org \ No newline at end of file
diff --git a/docs/speed/chrome_speed_services.md b/docs/speed/chrome_speed_services.md new file mode 100644 index 0000000..cf5f0e7 --- /dev/null +++ b/docs/speed/chrome_speed_services.md
@@ -0,0 +1,52 @@ +# Speed Operations: Services + +TL: simonhatch@<br> +Team: simonhatch@ benjhayden@, dtu@, eakuefner@<br> +TPM: benhenry@<br> +Mailing List: speed-services-dev@chromium.org<br> +**[go/chrome-speed-services](https://goto.google.com/chrome-speed-services)** + +## Mission +The mission of the Chrome Speed Services team is to develop the tools and +infrastructure necessary for teams to detect, help diagnose, and follow through +on performance regressions in Chrome. We accomplish this through a set of +interconnected tools, which process data from the Chrome Benchmarking Team and +automate the Chrome Speed Releasing workflow: + + * The [Chrome Performance Dashboard](https://chromeperf.appspot.com) stores + over 4 million performance timeseries, and monitors hundreds of thousands + of them for performance regressions. It integrates with Chrome's bug + tracker for follow-through. + * Most of our automated builds take too long to get performance data on every + revision, so we have [bisect bots](bisects.md) to narrow down regressions. + These bots also support running performance try jobs on unsubmitted CLs. + * Whether a performance test is run locally or in the lab, right now or last + year, we want to make it easy to understand and share the results. We + develop [data formats](https://github.com/catapult-project/catapult/blob/master/docs/histogram-set-json-format.md) + and user interfaces that make it easy to dig deeply into performance + regressions. + +Here is a diagram of how our tooling fits into the chromium performance +continuous build: + + + +## 2017 Roadmap + * **Improve our ability to bisect to root causes**. + [Pinpoint](https://docs.google.com/document/d/1FKPRNU2kbPJ15p6XHO0itCjYtfvCpGt2IHblriTX1tg/edit) + is a rewrite of the existing bisect system, design to address the + shortcomings of a fully automated system running on buildbot. Tighter + integration with the dashboard will allow better code sharing, more + thorough test coverage, and a greatly improved and interactive user + interface. + * **Enable deep debugging and better numerics across our products.** + We are working to make the dashboard, pinpoint, and telemetry all use our new + [HistogramSet](https://github.com/catapult-project/catapult/blob/master/docs/histogram-set-json-format.md) + data format, which stores full histograms and statistics about test + results, as well as diagnostics with built-in UIs which help users dig in + when something's wrong. + * **Improve the sheriffing process.** We're working on burning down bugs in + the sheriffing workflow, and also adding + [milestone-level reports](https://docs.google.com/document/d/1MgTs2TBEHcKqgil_zqy72GlZr_74udyDKznTZixhrrI/edit) + that give a high-level overview of how Chrome is performing from release to + release, so that we can better focus our performance efforts.
diff --git a/docs/speed/how_does_chrome_measure_performance.md b/docs/speed/how_does_chrome_measure_performance.md new file mode 100644 index 0000000..6b61984 --- /dev/null +++ b/docs/speed/how_does_chrome_measure_performance.md
@@ -0,0 +1,63 @@ +# How Chrome Measures Performance + +Chrome collects performance data both in the lab, and from end users. There are +thousands of individual metrics. This is an overview of how to sort through +them at a high level. + +## Tracks and Metrics + +At a high level, performance work in Chrome is categorized into **tracks**, +like loading, memory, and power. Each track has high-level metrics associated +with it. + + * **[An overview of tracks](performance_tracks.md)**: lists the tracks and key contact points. + * **[Speed Launch Metrics](https://docs.google.com/document/d/1Ww487ZskJ-xBmJGwPO-XPz_QcJvw-kSNffm0nPhVpj8/edit): + the important high-level metrics we measure for each track. + +## Laboratory Metrics + +Chrome has multiple performance labs in which benchmarks are run on continuous +builds to pinpoint performance regressions down to individual changelists. + +### The chromium.perf lab + +The main lab for performance monitoring is chromium.perf. It continuously tests +chromium commits and is monitored by the perf sheriff rotation. + + * **[What is the perf waterfall?](perf_waterfall.md)** An overview of the + waterfall that runs the continuous build. + * **[How telemetry works](https://github.com/catapult-project/catapult/blob/master/telemetry/README.md): + An overview of telemetry, our performance testing harness. + * **[How perf bisects work](bisects.md): An overview of the bisect bots, + which narrow down regressions over a CL range to a specific commit. + * **Benchmarks* + * **[Benchmark Policy](https://docs.google.com/document/d/1ni2MIeVnlH4bTj4yvEDMVNxgL73PqK_O9_NUm3NW3BA/edit)**: + An overview of the benchmark harnesses available in Chrome, and how to + find the right place to add a new test case. + * **[System health benchmarks](https://docs.google.com/document/d/1BM_6lBrPzpMNMtcyi2NFKGIzmzIQ1oH3OlNG27kDGNU/edit?ts=57e92782)**: + The system health benchmarks measure the speed launch metrics on + real-world web use scenarios. + * **[How to run on perf trybots](perf_trybots.md)**: Have an unsubmitted + CL and want to run benchmarks on it? Need to try a variety of hardware and + operating systems? Use the perf trybots. + * **[How to run telemetry locally](https://github.com/catapult-project/catapult/blob/master/telemetry/docs/run_benchmarks_locally.md)**: + Instructions on running telemetry benchmarks on your local machine. + * **[List of platforms in the lab](perf_lab_platforms.md)**: Devices, + configurations, and OSes the chromium.perf lab tests on. + +### Other performance labs + +There are several other performance labs for specialized use: + + * **[Lab Spotlight: AV Lab (Googlers only)](http://goto.google.com/av-analysis-service)**: + Learn all about audio/video quality testing. + * **[Lab Spotlight: Cluster telemetry](https://docs.google.com/document/d/1GhqosQcwsy6F-eBAmFn_ITDF7_Iv_rY9FhCKwAnk9qQ/edit)**: + Need to run a performance test over thousands of pages? Check out cluster + telemetry! + +## End-user metrics + +The **[Speed Launch Metrics](https://docs.google.com/document/d/1Ww487ZskJ-xBmJGwPO-XPz_QcJvw-kSNffm0nPhVpj8/edit)** +doc explains metrics available in UMA for end user performance. If you want to +test how your change impacts these metrics for end users, you'll probably want +to **[Run a Finch Trial](http://goto.google.com/finch101)**. \ No newline at end of file
diff --git a/docs/speed/images/speed_services.png b/docs/speed/images/speed_services.png new file mode 100644 index 0000000..2a2ff1e --- /dev/null +++ b/docs/speed/images/speed_services.png Binary files differ
diff --git a/docs/webui_explainer.md b/docs/webui_explainer.md new file mode 100644 index 0000000..bd298d96 --- /dev/null +++ b/docs/webui_explainer.md
@@ -0,0 +1,676 @@ +<style> +.note::before { + content: 'Note: '; + font-variant: small-caps; + font-style: italic; +} + +.doc h1 { + margin: 0; +} +</style> + +# WebUI Explainer + +[TOC] + +<a name="What_is_webui"></a> +## What is "WebUI"? + +"WebUI" is a term used to loosely describe **parts of Chrome's UI +implemented with web technologies** (i.e. HTML, CSS, JavaScript). + +Examples of WebUI in Chromium: + +* Settings (chrome://settings) +* History (chrome://history) +* Downloads (chrome://downloads) + +<div class="note"> +Not all web-based UIs in Chrome have chrome:// URLs. +</div> + +This document explains how WebUI works. + +<a name="bindings"></a> +## What's different from a web page? + +WebUIs are granted super powers so that they can manage Chrome itself. For +example, it'd be very hard to implement the Settings UI without access to many +different privacy and security sensitive services. Access to these services are +not granted by default. + +Only special URLs are granted WebUI "bindings" via the child security process. + +Specifically, these bindings: + +* give a renderer access to load [`chrome:`](#chrome_urls) URLS + * this is helpful for shared libraries, i.e. `chrome://resources/` +* allow the browser to execute arbitrary JavaScript in that renderer via + [`CallJavascriptFunction()`](#CallJavascriptFunction) +* allow communicating from the renderer to the browser with + [`chrome.send()`](#chrome_send) and friends +* ignore content settings regarding showing images or executing JavaScript + +<a name="chrome_urls"></a> +## How `chrome:` URLs work + +<div class="note"> +A URL is of the format <protocol>://<host>/<path>. +</div> + +A `chrome:` URL loads a file from disk, memory, or can respond dynamically. + +Because Chrome UIs generally need access to the browser (not just the current +tab), much of the C++ that handles requests or takes actions lives in the +browser process. The browser has many more privileges than a renderer (which is +sandboxed and doesn't have file access), so access is only granted for certain +URLs. + +### `chrome:` protocol + +Chrome recognizes a list of special protocols, which it registers while starting +up. + +Examples: + +* chrome-devtools: +* chrome-extensions: +* chrome: +* file: +* view-source: + +This document mainly cares about the **chrome:** protocol, but others can also +be granted [WebUI bindings](#bindings) or have special +properties. + +### `chrome:` hosts + +After registering the `chrome:` protocol, a set of factories are created. These +factories contain a list of valid host names. A valid hostname generates a +controller. + +In the case of `chrome:` URLs, these factories are registered early in the +browser process lifecycle. + +```c++ +// ChromeBrowserMainParts::PreMainMessageLoopRunImpl(): +content::WebUIControllerFactory::RegisterFactory( + ChromeWebUIControllerFactory::GetInstance()); +``` + +When a URL is requested, a new renderer is created to load the URL, and a +corresponding class in the browser is set up to handle messages from the +renderer to the browser (a `RenderFrameHost`). + +The URL of the request is inspected: + +```c++ +if (url.SchemeIs("chrome") && url.host_piece() == "donuts") // chrome://donuts + return &NewWebUI<DonutsUI>; +return nullptr; // Not a known host; no special access. +``` + +and if a factory knows how to handle a host (returns a `WebUIFactoryFunction`), +the navigation machinery [grants the renderer process WebUI +bindings](#bindings) via the child security policy. + +```c++ +// RenderFrameHostImpl::AllowBindings(): +if (bindings_flags & BINDINGS_POLICY_WEB_UI) { + ChildProcessSecurityPolicyImpl::GetInstance()->GrantWebUIBindings( + GetProcess()->GetID()); +} +``` + +The factory creates a [`WebUIController`](#WebUIController) for a tab. +Here's an example: + +```c++ +// Controller for chrome://donuts. +class DonutsUI : public content::WebUIController { + public: + DonutsUI(content::WebUI* web_ui) : content::WebUIController(web_ui) { + content::WebUIDataSource* source = + content::WebUIDataSource::Create("donuts"); // "donuts" == hostname + source->AddString("mmmDonuts", "Mmm, donuts!"); // Translations. + source->SetDefaultResource(IDR_DONUTS_HTML); // Home page. + content::WebUIDataSource::Add(source); + + // Handles messages from JavaScript to C++ via chrome.send(). + web_ui->AddMessageHandler(base::MakeUnique<OvenHandler>()); + } +}; +``` + +If we assume the contents of `IDR_DONUTS_HTML` yields: + +```html +<h1>$i18n{mmmDonuts}</h1> +``` + +Visiting `chrome://donuts` should show in something like: + +<div style="border: 1px solid black; padding: 10px;"> +<h1>Mmmm, donuts!</h1> +</div> + +Delicious success. + +## C++ classes + +### WebUI + +`WebUI` is a high-level class and pretty much all HTML-based Chrome UIs have +one. `WebUI` lives in the browser process, and is owned by a `RenderFrameHost`. +`WebUI`s have a concrete implementation (`WebUIImpl`) in `content/` and are +created in response to navigation events. + +A `WebUI` knows very little about the page it's showing, and it owns a +[`WebUIController`](#WebUIController) that is set after creation based on the +hostname of a requested URL. + +A `WebUI` *can* handle messages itself, but often defers these duties to +separate [`WebUIMessageHandler`](#WebUIMessageHandler)s, which are generally +designed for handling messages on certain topics. + +A `WebUI` can be created speculatively, and are generally fairly lightweight. +Heavier duty stuff like hard initialization logic or accessing services that may +have side effects are more commonly done in a +[`WebUIController`](#WebUIController) or +[`WebUIMessageHandler`s](#WebUIMessageHandler). + +`WebUI` are created synchronously on the UI thread in response to a URL request, +and are re-used where possible between navigations (i.e. refreshing a page). +Because they run in a separate process and can exist before a corresponding +renderer process has been created, special care is required to communicate with +the renderer if reliable message passing is required. + +<a name="WebUIController"></a> +### WebUIController + +A `WebUIController` is the brains of the operation, and is responsible for +application-specific logic, setting up translations and resources, creating +message handlers, and potentially responding to requests dynamically. In complex +pages, logic is often split across multiple +[`WebUIMessageHandler`s](#WebUIMessageHandler) instead of solely in the +controller for organizational benefits. + +A `WebUIController` is owned by a [`WebUI`](#WebUI), and is created and set on +an existing [`WebUI`](#WebUI) when the correct one is determined via URL +inspection (i.e. chrome://settings creates a generic [`WebUI`](#WebUI) with a +settings-specific `WebUIController`). + +### WebUIDataSource + +<a name="WebUIMessageHandler"></a> +### WebUIMessageHandler + +Because some pages have many messages or share code that sends messages, message +handling is often split into discrete classes called `WebUIMessageHandler`s. +These handlers respond to specific invocations from JavaScript. + +So, the given C++ code: + +```c++ +void OvenHandler::RegisterMessages() { + web_ui()->RegisterMessageHandler("bakeDonuts", + base::Bind(&OvenHandler::HandleBakeDonuts, base::Unretained(this))); +} + +void OverHandler::HandleBakeDonuts(const base::ListValue* args) { + double num_donuts; + CHECK(args->GetDouble(0, &num_donuts)); // JavaScript numbers are doubles. + GetOven()->BakeDonuts(static_cast<int>(num_donuts)); +} +``` + +Can be triggered in JavaScript with this example code: + +```js +$('bakeDonutsButton').onclick = function() { + chrome.send('bakeDonuts', [5]); // bake 5 donuts! +}; +``` + +## Browser (C++) → Renderer (JS) + +<a name="AllowJavascript"></a> +### WebUIMessageHandler::AllowJavascript() + +This method determines whether browser → renderer communication is allowed. +It is called in response to a signal from JavaScript that the page is ready to +communicate. + +In the JS: + +```js +window.onload = function() { + app.initialize(); + chrome.send('startPilotLight'); +}; +``` + +In the C++: + +```c++ +void OvenHandler::HandleStartPilotLight(cont base::ListValue* /*args*/) { + AllowJavascript(); + // CallJavascriptFunction() and FireWebUIListener() are now safe to do. + GetOven()->StartPilotLight(); +} +``` + +<div class="note"> +Relying on the <code>'load'</code> event or browser-side navigation callbacks to +detect page readiness omits <i>application-specific</i> initialization, and a +custom <code>'initialized'</code> message is often necessary. +</div> + +<a name="CallJavascriptFunction"></a> +### WebUIMessageHandler::CallJavascriptFunction() + +When the browser process needs to tell the renderer/JS of an event or otherwise +execute code, it can use `CallJavascriptFunction()`. + +<div class="note"> +Javascript must be <a href="#AllowJavascript">allowed</a> to use +<code>CallJavscriptFunction()</code>. +</div> + +```c++ +void OvenHandler::OnPilotLightExtinguished() { + CallJavascriptFunction("app.pilotLightExtinguished"); +} +``` + +This works by crafting a string to be evaluated in the renderer. Any arguments +to the call are serialized to JSON and the parameter list is wrapped with + +``` +// See WebUI::GetJavascriptCall() for specifics: +"functionCallName(" + argumentsAsJson + ")" +``` + +and sent to the renderer via a `FrameMsg_JavaScriptExecuteRequest` IPC message. + +While this works, it implies that: + +* a global method must exist to successfully run the Javascript request +* any method can be called with any parameter (far more access than required in + practice) + +^ These factors have resulted in less use of `CallJavascriptFunction()` in the +webui codebase. This functionality can easily be accomplished with the following +alternatives: + +* [`FireWebUIListener()`](#FireWebUIListener) allows easily notifying the page + when an event occurs in C++ and is more loosely coupled (nothing blows up if + the event dispatch is ignored). JS subscribes to notifications via + [`cr.addWebUIListener`](#cr_addWebUIListener). +* [`ResolveJavascriptCallback`](#ResolveJavascriptCallback) and + [`RejectJavascriptCallback`](#RejectJavascriptCallback) are useful + when Javascript requires a response to an inquiry about C++-canonical state + (i.e. "Is Autofill enabled?", "Is the user incognito?") + +<a name="FireWebUIListener"></a> +### WebUIMessageHandler::FireWebUIListener() + +`FireWebUIListener()` is used to notify a registered set of listeners that an +event has occurred. This is generally used for events that are not guaranteed to +happen in timely manner, or may be caused to happen by unpredictable events +(i.e. user actions). + +Here's some example to detect a change to Chrome's theme: + +```js +cr.addWebUIListener("theme-changed", refreshThemeStyles); +``` + +This Javascript event listener can be triggered in C++ via: + +```c++ +void MyHandler::OnThemeChanged() { + FireWebUIListener("theme-changed"); +} +``` + +Because it's not clear when a user might want to change their theme nor what +theme they'll choose, this is a good candidate for an event listener. + +If you simply need to get a response in Javascript from C++, consider using +[`cr.sendWithPromise()`](#cr_sendWithPromise) and +[`ResolveJavascriptCallback`](#ResolveJavascriptCallback). + +<a name="OnJavascriptAllowed"></a> +### WebUIMessageHandler::OnJavascriptAllowed() + +`OnJavascriptDisallowed()` is a lifecycle method called in response to +[`AllowJavascript()`](#AllowJavascript). It is a good place to register +observers of global services or other callbacks that might call at unpredictable +times. + +For example: + +```c++ +class MyHandler : public content::WebUIMessageHandler { + MyHandler() { + GetGlobalService()->AddObserver(this); // <-- DON'T DO THIS. + } + void OnGlobalServiceEvent() { + FireWebUIListener("global-thing-happened"); + } +}; +``` + +Because browser-side C++ handlers are created before a renderer is ready, the +above code may result in calling [`FireWebUIListener`](#FireWebUIListener) +before the renderer is ready, which may result in dropped updates or +accidentally running Javascript in a renderer that has navigated to a new URL. + +A safer way to set up communication is: + +```c++ +class MyHandler : public content::WebUIMessageHandler { + public: + MyHandler() : observer_(this) {} + void OnJavascriptAllowed() override { + observer_.Add(GetGlobalService()); // <-- DO THIS. + } + void OnJavascriptDisallowed() override { + observer_.RemoveAll(); // <-- AND THIS. + } + ScopedObserver<MyHandler, GlobalService> observer_; // <-- ALSO HANDY. +``` +when a renderer has been created and the +document has loaded enough to signal to the C++ that it's ready to respond to +messages. + +<a name="OnJavascriptDisallowed"></a> +### WebUIMessageHandler::OnJavascriptDisallowed() + +`OnJavascriptDisallowed` is a lifecycle method called when it's unclear whether +it's safe to send JavaScript messsages to the renderer. + +There's a number of situations that result in this method being called: + +* renderer doesn't exist yet +* renderer exists but isn't ready +* renderer is ready but application-specifici JS isn't ready yet +* tab refresh +* renderer crash + +Though it's possible to programmatically disable Javascript, it's uncommon to +need to do so. + +Because there's no single strategy that works for all cases of a renderer's +state (i.e. queueing vs dropping messages), these lifecycle methods were +introduced so a WebUI application can implement these decisions itself. + +Often, it makes sense to disconnect from observers in +`OnJavascriptDisallowed()`: + +```c++ +void OvenHandler::OnJavascriptDisallowed() { + scoped_oven_observer_.RemoveAll() +} +``` + +Because `OnJavascriptDisallowed()` is not guaranteed to be called before a +`WebUIMessageHandler`'s destructor, it is often advisable to use some form of +scoped observer that automatically unsubscribes on destruction but can also +imperatively unsubscribe in `OnJavascriptDisallowed()`. + +<a name="RejectJavascriptCallback"></a> +### WebUIMessageHandler::RejectJavascriptCallback() + +This method is called in response to +[`cr.sendWithPromise()`](#cr_sendWithPromise) to reject the issued Promise. This +runs the rejection (second) callback in the [Promise's +executor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) +and any +[`catch()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch) +callbacks in the chain. + +```c++ +void OvenHandler::HandleBakeDonuts(const base::ListValue* args) { +base::Value* callback_id; +args->Get(0, &callback_id); +if (!GetOven()->HasGas()) { + RejectJavascriptCallback(callback_id, + base::StringValue("need gas to cook the donuts!")); +} +``` + +This method is basically just a +[`CallJavascriptFunction()`](#CallJavascriptFunction) wrapper that calls a +global "cr.webUIResponse" method with a success value of false. + +```c++ +// WebUIMessageHandler::RejectJavascriptCallback(): +CallJavascriptFunction("cr.webUIResponse", callback_id, base::Value(false), + response); +``` + +See also: [`ResolveJavascriptCallback`](#ResolveJavascriptCallback) + +<a name="ResolveJavascriptCallback"></a> +### WebUIMessageHandler::ResolveJavascriptCallback() + +This method is called in response to +[`cr.sendWithPromise()`](#cr_sendWithPromise) to fulfill an issued Promise, +often with a value. This results in runnings any fulfillment (first) callbacks +in the associate Promise executor and any registered +[`then()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) +callbacks. + +So, given this JS code: + +```js +cr.sendWithPromise('bakeDonuts').then(function(numDonutsBaked) { + shop.donuts += numDonutsBaked; +}); +``` + +Some handling C++ might do this: + +```c++ +void OvenHandler::HandleBakeDonuts(const base::ListValue* args) { + base::Value* callback_id; + args->Get(0, &callback_id); + double num_donuts_baked = GetOven()->BakeDonuts(); + ResolveJavascriptCallback(*callback_id, num_donuts_baked); +} +``` + +## Renderer (JS) → Browser (C++) + +<a name="chrome_send"></a> +### chrome.send() + +When the JavaScript `window` object is created, a renderer is checked for [WebUI +bindings](#bindings). + +```c++ +// RenderFrameImpl::DidClearWindowObject(): +if (enabled_bindings_ & BINDINGS_POLICY_WEB_UI) + WebUIExtension::Install(frame_); +``` + +If the bindings exist, a global `chrome.send()` function is exposed to the +renderer: + +```c++ +// WebUIExtension::Install(): +v8::Local<v8::Object> chrome = + GetOrCreateChromeObject(isolate, context->Global()); +chrome->Set(gin::StringToSymbol(isolate, "send"), + gin::CreateFunctionTemplate( + isolate, base::Bind(&WebUIExtension::Send))->GetFunction()); +``` + +The `chrome.send()` method takes a message name and argument list. + +```js +chrome.send('messageName', [arg1, arg2, ...]); +``` + +The message name and argument list are serialized to JSON and sent via the +`ViewHostMsg_WebUISend` IPC message from the renderer to the browser. + +```c++ +// In the renderer (WebUIExtension::Send()): +render_view->Send(new ViewHostMsg_WebUISend(render_view->GetRoutingID(), + frame->GetDocument().Url(), + message, *content)); +``` +```c++ +// In the browser (WebUIImpl::OnMessageReceived()): +IPC_MESSAGE_HANDLER(ViewHostMsg_WebUISend, OnWebUISend) +``` + +The browser-side code does a map lookup for the message name and calls the found +callback with the deserialized arguments: + +```c++ +// WebUIImpl::ProcessWebUIMessage(): +message_callbacks_.find(message)->second.Run(&args); +``` + +<a name="cr_addWebUIListener"> +### cr.addWebUIListener() + +WebUI listeners are a convenient way for C++ to inform JavaScript of events. + +Older WebUI code exposed public methods for event notification, similar to how +responses to [chrome.send()](#chrome_send) used to work. They both +resulted in global namespace polution, but it was additionally hard to stop +listening for events in some cases. **cr.addWebUIListener** is preferred in new +code. + +Adding WebUI listeners creates and inserts a unique ID into a map in JavaScript, +just like [cr.sendWithPromise()](#cr_sendWithPromise). + +```js +// addWebUIListener(): +webUIListenerMap[eventName] = webUIListenerMap[eventName] || {}; +webUIListenerMap[eventName][createUid()] = callback; +``` + +The C++ responds to a globally exposed function (`cr.webUIListenerCallback`) +with an event name and a variable number of arguments. + +```c++ +// WebUIMessageHandler: +template <typename... Values> +void FireWebUIListener(const std::string& event_name, const Values&... values) { + CallJavascriptFunction("cr.webUIListenerCallback", base::Value(event_name), + values...); +} +``` + +C++ handlers call this `FireWebUIListener` method when an event occurs that +should be communicated to the JavaScript running in a tab. + +```c++ +void OvenHandler::OnBakingDonutsFinished(size_t num_donuts) { + FireWebUIListener("donuts-baked", base::FundamentalValue(num_donuts)); +} +``` + +JavaScript can listen for WebUI events via: + +```js +var donutsReady = 0; +cr.addWebUIListener('donuts-baked', function(numFreshlyBakedDonuts) { + donutsReady += numFreshlyBakedDonuts; +}); +``` + +<a name="cr_sendWithPromise"></a> +### cr.sendWithPromise() + +`cr.sendWithPromise()` is a wrapper around `chrome.send()`. It's used when +triggering a message requires a response: + +```js +chrome.send('getNumberOfDonuts'); // No easy way to get response! +``` + +In older WebUI pages, global methods were exposed simply so responses could be +sent. **This is discouraged** as it pollutes the global namespace and is harder +to make request specific or do from deeply nested code. + +In newer WebUI pages, you see code like this: + +```js +cr.sendWithPromise('getNumberOfDonuts').then(function(numDonuts) { + alert('Yay, there are ' + numDonuts + ' delicious donuts left!'); +}); +``` + +On the C++ side, the message registration is similar to +[`chrome.send()`](#chrome_send) except that the first argument in the +message handler's list is a callback ID. That ID is passed to +`ResolveJavascriptCallback()`, which ends up resolving the `Promise` in +JavaScript and calling the `then()` function. + +```c++ +void DonutHandler::HandleGetNumberOfDonuts(const base::ListValue* args) { + base::Value* callback_id; + args->Get(0, &callback_id); + size_t num_donuts = GetOven()->GetNumberOfDonuts(); + ResolveJavascriptCallback(*callback_id, base::FundamentalValue(num_donuts)); +} +``` + +Under the covers, a map of `Promise`s are kept in JavaScript. + +The callback ID is just a namespaced, ever-increasing number. It's used to +insert a `Promise` into the JS-side map when created. + +```js +// cr.sendWithPromise(): +var id = methodName + '_' + uidCounter++; +chromeSendResolverMap[id] = new PromiseResolver; +chrome.send(methodName, [id].concat(args)); +``` + +The corresponding number is used to look up a `Promise` and reject or resolve it +when the outcome is known. + +```js +// cr.webUIResponse(): +var resolver = chromeSendResolverMap[id]; +if (success) + resolver.resolve(response); +else + resolver.reject(response); +``` + +This approach still relies on the C++ calling a globally exposed method, but +reduces the surface to only a single global (`cr.webUIResponse`) instead of +many. It also makes per-request responses easier, which is helpful when multiple +are in flight. + +## See also + +* WebUI's C++ code follows the [Chromium C++ styleguide](../c++/c++.md). +* WebUI's HTML/CSS/JS code follows the [Chromium Web + Development Style Guide](../styleguide/web/web.md) + + +<script> +let nameEls = Array.from(document.querySelectorAll('[id], a[name]')); +let names = nameEls.map(nameEl => nameEl.name || nameEl.id); + +let localLinks = Array.from(document.querySelectorAll('a[href^="#"]')); +let hrefs = localLinks.map(a => a.href.split('#')[1]); + +hrefs.forEach(href => { + if (names.includes(href)) + console.info('found: ' + href); + else + console.error('broken href: ' + href); +}) +</script>
diff --git a/extensions/common/api/_permission_features.json b/extensions/common/api/_permission_features.json index 7a2afec..3092c9a 100644 --- a/extensions/common/api/_permission_features.json +++ b/extensions/common/api/_permission_features.json
@@ -260,7 +260,7 @@ ] }, "mediaPerceptionPrivate": [{ - "channel": "dev", + "channel": "stable", "extension_types": ["platform_app"], "session_types": ["kiosk"], "platforms": ["chromeos"],
diff --git a/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm index 69edcda..f346763 100644 --- a/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/address_edit_coordinator_unittest.mm
@@ -141,7 +141,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_TRUE([base_view_controller.presentedViewController isMemberOfClass:[PaymentRequestEditViewController class]]); @@ -181,7 +181,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_NE(nil, base_view_controller.presentedViewController); @@ -240,7 +240,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_NE(nil, base_view_controller.presentedViewController); @@ -290,7 +290,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_NE(nil, base_view_controller.presentedViewController);
diff --git a/ios/chrome/browser/ui/payments/billing_address_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/billing_address_selection_coordinator_unittest.mm index 9407c4a..0abd0549 100644 --- a/ios/chrome/browser/ui/payments/billing_address_selection_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/billing_address_selection_coordinator_unittest.mm
@@ -67,7 +67,7 @@ EXPECT_EQ(1u, GetNavigationController().viewControllers.count); [GetCoordinator() start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, GetNavigationController().viewControllers.count); @@ -77,7 +77,7 @@ isMemberOfClass:[PaymentRequestSelectorViewController class]]); [GetCoordinator() stop]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(1u, GetNavigationController().viewControllers.count); } @@ -98,7 +98,7 @@ EXPECT_EQ(1u, GetNavigationController().viewControllers.count); [GetCoordinator() start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, GetNavigationController().viewControllers.count); @@ -129,7 +129,7 @@ EXPECT_EQ(1u, GetNavigationController().viewControllers.count); [GetCoordinator() start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, GetNavigationController().viewControllers.count);
diff --git a/ios/chrome/browser/ui/payments/contact_info_edit_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/contact_info_edit_coordinator_unittest.mm index 76dc1a2..6522712 100644 --- a/ios/chrome/browser/ui/payments/contact_info_edit_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/contact_info_edit_coordinator_unittest.mm
@@ -132,7 +132,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_TRUE([base_view_controller.presentedViewController isMemberOfClass:[PaymentRequestEditViewController class]]); @@ -172,7 +172,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_NE(nil, base_view_controller.presentedViewController); @@ -231,7 +231,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_NE(nil, base_view_controller.presentedViewController); @@ -281,7 +281,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_NE(nil, base_view_controller.presentedViewController);
diff --git a/ios/chrome/browser/ui/payments/contact_info_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/contact_info_selection_coordinator_unittest.mm index 3f117ca6..fdccc17 100644 --- a/ios/chrome/browser/ui/payments/contact_info_selection_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/contact_info_selection_coordinator_unittest.mm
@@ -57,7 +57,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); @@ -67,7 +67,7 @@ isMemberOfClass:[PaymentRequestSelectorViewController class]]); [coordinator stop]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(1u, navigation_controller.viewControllers.count); } @@ -97,7 +97,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); @@ -137,7 +137,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count);
diff --git a/ios/chrome/browser/ui/payments/country_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/country_selection_coordinator_unittest.mm index 646c547..771345a 100644 --- a/ios/chrome/browser/ui/payments/country_selection_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/country_selection_coordinator_unittest.mm
@@ -27,12 +27,12 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); [coordinator stop]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(1u, navigation_controller.viewControllers.count); }
diff --git a/ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm index 34aafdc..fb0c5ab 100644 --- a/ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm
@@ -128,7 +128,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_TRUE([base_view_controller.presentedViewController isMemberOfClass:[PaymentRequestEditViewController class]]); @@ -168,7 +168,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_NE(nil, base_view_controller.presentedViewController); @@ -221,7 +221,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_NE(nil, base_view_controller.presentedViewController); @@ -274,7 +274,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_NE(nil, base_view_controller.presentedViewController); @@ -319,7 +319,7 @@ EXPECT_EQ(nil, base_view_controller.presentedViewController); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_NE(nil, base_view_controller.presentedViewController);
diff --git a/ios/chrome/browser/ui/payments/payment_items_display_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/payment_items_display_coordinator_unittest.mm index ee10378e..71e68a93 100644 --- a/ios/chrome/browser/ui/payments/payment_items_display_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/payment_items_display_coordinator_unittest.mm
@@ -51,12 +51,12 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); [coordinator stop]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(1u, navigation_controller.viewControllers.count); } @@ -84,7 +84,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); @@ -120,7 +120,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count);
diff --git a/ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm index 5d4a2ba6..dec60fa1 100644 --- a/ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm
@@ -59,7 +59,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); @@ -69,7 +69,7 @@ isMemberOfClass:[PaymentRequestSelectorViewController class]]); [coordinator stop]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(1u, navigation_controller.viewControllers.count); } @@ -100,7 +100,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); @@ -140,7 +140,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count);
diff --git a/ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm index 1b2ce034..7723af8 100644 --- a/ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm
@@ -112,25 +112,24 @@ [coordinator setBrowserState:browser_state_.get()]; [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1)); - id presented_view_controller = - [coordinator baseViewController].presentedViewController; - EXPECT_TRUE([presented_view_controller + EXPECT_TRUE([base_view_controller.presentedViewController isMemberOfClass:[UINavigationController class]]); UINavigationController* navigation_controller = base::mac::ObjCCastStrict<UINavigationController>( - presented_view_controller); + base_view_controller.presentedViewController); EXPECT_EQ(1u, navigation_controller.viewControllers.count); - id view_controller = navigation_controller.visibleViewController; - EXPECT_TRUE( - [view_controller isMemberOfClass:[PaymentRequestViewController class]]); + EXPECT_TRUE([navigation_controller.visibleViewController + isMemberOfClass:[PaymentRequestViewController class]]); [coordinator stop]; - // Delay to allow animation to complete. - base::test::ios::SpinRunLoopWithMinDelay(base::TimeDelta::FromSecondsD(2)); - - EXPECT_EQ(nil, [coordinator baseViewController].presentedViewController); + // Wait until the animation completes and the presented view controller is + // dismissed. + base::test::ios::WaitUntilCondition(^bool() { + return !base_view_controller.presentedViewController; + }); + EXPECT_EQ(nil, base_view_controller.presentedViewController); } // Tests that calling the card unmasking delegate method which notifies the @@ -275,7 +274,7 @@ [coordinator setBrowserState:browser_state_.get()]; [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1)); // Call the controller delegate method.
diff --git a/ios/chrome/browser/ui/payments/payment_request_error_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_error_coordinator_unittest.mm index 9caebeaa..bec1d303 100644 --- a/ios/chrome/browser/ui/payments/payment_request_error_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/payment_request_error_coordinator_unittest.mm
@@ -28,17 +28,18 @@ initWithBaseViewController:base_view_controller]; [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); - id presented_view_controller = - [coordinator baseViewController].presentedViewController; - EXPECT_TRUE([presented_view_controller + EXPECT_TRUE([base_view_controller.presentedViewController isMemberOfClass:[PaymentRequestErrorViewController class]]); [coordinator stop]; - // Delay to allow animation to complete. - base::test::ios::SpinRunLoopWithMinDelay(base::TimeDelta::FromSecondsD(2)); - EXPECT_EQ(nil, [coordinator baseViewController].presentedViewController); + // Wait until the animation completes and the presented view controller is + // dismissed. + base::test::ios::WaitUntilCondition(^bool() { + return !base_view_controller.presentedViewController; + }); + EXPECT_EQ(nil, base_view_controller.presentedViewController); } // Tests that calling the view controller delegate method which notifies the @@ -60,15 +61,13 @@ [coordinator setDelegate:delegate]; [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); // Call the controller delegate method. - id presented_view_controller = - [coordinator baseViewController].presentedViewController; PaymentRequestErrorViewController* view_controller = base::mac::ObjCCastStrict<PaymentRequestErrorViewController>( - presented_view_controller); + base_view_controller.presentedViewController); [coordinator paymentRequestErrorViewControllerDidDismiss:view_controller]; EXPECT_OCMOCK_VERIFY(delegate);
diff --git a/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm index f837750..3eb3d51 100644 --- a/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm
@@ -58,7 +58,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); @@ -68,7 +68,7 @@ isMemberOfClass:[PaymentRequestSelectorViewController class]]); [coordinator stop]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(1u, navigation_controller.viewControllers.count); } @@ -99,7 +99,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); @@ -139,7 +139,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count);
diff --git a/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm index e3262ca3..678bccaf 100644 --- a/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm
@@ -52,7 +52,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); @@ -62,7 +62,7 @@ isMemberOfClass:[PaymentRequestSelectorViewController class]]); [coordinator stop]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(1u, navigation_controller.viewControllers.count); } @@ -93,7 +93,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count); @@ -133,7 +133,7 @@ EXPECT_EQ(1u, navigation_controller.viewControllers.count); [coordinator start]; - // Short delay to allow animation to complete. + // Spin the run loop to trigger the animation. base::test::ios::SpinRunLoopWithMaxDelay(base::TimeDelta::FromSecondsD(1.0)); EXPECT_EQ(2u, navigation_controller.viewControllers.count);
diff --git a/ios/web_view/internal/cwv_scroll_view_internal.h b/ios/web_view/internal/cwv_scroll_view_internal.h index 5328719..9ede6b0 100644 --- a/ios/web_view/internal/cwv_scroll_view_internal.h +++ b/ios/web_view/internal/cwv_scroll_view_internal.h
@@ -5,7 +5,6 @@ #ifndef IOS_WEB_VIEW_INTERNAL_CWV_SCROLL_VIEW_INTERNAL_H_ #define IOS_WEB_VIEW_INTERNAL_CWV_SCROLL_VIEW_INTERNAL_H_ -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> #import "ios/web_view/public/cwv_scroll_view.h"
diff --git a/ios/web_view/public/ChromeWebView.h b/ios/web_view/public/ChromeWebView.h index c0b07b6..2e28fad2 100644 --- a/ios/web_view/public/ChromeWebView.h +++ b/ios/web_view/public/ChromeWebView.h
@@ -5,20 +5,24 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CHROMEWEBVIEW_H_ #define IOS_WEB_VIEW_PUBLIC_CHROMEWEBVIEW_H_ -#import <ChromeWebView/cwv_export.h> -#import <ChromeWebView/cwv_html_element.h> -#import <ChromeWebView/cwv_language_detection_result.h> -#import <ChromeWebView/cwv_navigation_action.h> -#import <ChromeWebView/cwv_navigation_delegate.h> -#import <ChromeWebView/cwv_scroll_view.h> -#import <ChromeWebView/cwv_scroll_view_delegate.h> -#import <ChromeWebView/cwv_translation_controller.h> -#import <ChromeWebView/cwv_translation_controller_delegate.h> -#import <ChromeWebView/cwv_translation_language.h> -#import <ChromeWebView/cwv_ui_delegate.h> -#import <ChromeWebView/cwv_user_content_controller.h> -#import <ChromeWebView/cwv_user_script.h> -#import <ChromeWebView/cwv_web_view.h> -#import <ChromeWebView/cwv_web_view_configuration.h> +// NOTE: Relative imports are used throughout the implementation of +// ChromeWebView. Framework style imports can't be used because multiple +// frameworks are built from ios/web_view with different output names. + +#import "cwv_export.h" +#import "cwv_html_element.h" +#import "cwv_language_detection_result.h" +#import "cwv_navigation_action.h" +#import "cwv_navigation_delegate.h" +#import "cwv_scroll_view.h" +#import "cwv_scroll_view_delegate.h" +#import "cwv_translation_controller.h" +#import "cwv_translation_controller_delegate.h" +#import "cwv_translation_language.h" +#import "cwv_ui_delegate.h" +#import "cwv_user_content_controller.h" +#import "cwv_user_script.h" +#import "cwv_web_view.h" +#import "cwv_web_view_configuration.h" #endif // IOS_WEB_VIEW_PUBLIC_CHROMEWEBVIEW_H_
diff --git a/ios/web_view/public/cwv_html_element.h b/ios/web_view/public/cwv_html_element.h index 05e773d2..e860546 100644 --- a/ios/web_view/public/cwv_html_element.h +++ b/ios/web_view/public/cwv_html_element.h
@@ -5,9 +5,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_HTML_ELEMENT_H_ #define IOS_WEB_VIEW_PUBLIC_CWV_HTML_ELEMENT_H_ -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + // Encapsulates information about HTML element. Used in // delegate methods. CWV_EXPORT
diff --git a/ios/web_view/public/cwv_language_detection_result.h b/ios/web_view/public/cwv_language_detection_result.h index 78115c8..a8d0944 100644 --- a/ios/web_view/public/cwv_language_detection_result.h +++ b/ios/web_view/public/cwv_language_detection_result.h
@@ -5,9 +5,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_LANGUAGE_DETECTION_RESULT_H #define IOS_WEB_VIEW_PUBLIC_CWV_LANGUAGE_DETECTION_RESULT_H -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + NS_ASSUME_NONNULL_BEGIN @class CWVTranslationLanguage;
diff --git a/ios/web_view/public/cwv_navigation_action.h b/ios/web_view/public/cwv_navigation_action.h index 124b0175..a302eb7 100644 --- a/ios/web_view/public/cwv_navigation_action.h +++ b/ios/web_view/public/cwv_navigation_action.h
@@ -5,9 +5,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_NAVIGATION_ACTION_H_ #define IOS_WEB_VIEW_PUBLIC_CWV_NAVIGATION_ACTION_H_ -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + // Encapsulates information about an action which caused a navigation. CWV_EXPORT @interface CWVNavigationAction : NSObject
diff --git a/ios/web_view/public/cwv_navigation_delegate.h b/ios/web_view/public/cwv_navigation_delegate.h index 52ca51e48..4561d619 100644 --- a/ios/web_view/public/cwv_navigation_delegate.h +++ b/ios/web_view/public/cwv_navigation_delegate.h
@@ -5,9 +5,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_NAVIGATION_DELEGATE_H_ #define IOS_WEB_VIEW_PUBLIC_CWV_NAVIGATION_DELEGATE_H_ -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + @protocol CRIWVTranslateDelegate; @class CWVWebView;
diff --git a/ios/web_view/public/cwv_scroll_view.h b/ios/web_view/public/cwv_scroll_view.h index 66142dd1..ba202a8 100644 --- a/ios/web_view/public/cwv_scroll_view.h +++ b/ios/web_view/public/cwv_scroll_view.h
@@ -5,11 +5,12 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_SCROLL_VIEW_H_ #define IOS_WEB_VIEW_PUBLIC_CWV_SCROLL_VIEW_H_ -#import <ChromeWebView/cwv_export.h> #import <CoreGraphics/CoreGraphics.h> #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> +#import "cwv_export.h" + @protocol CWVScrollViewDelegate; // Scroll view inside the web view. This is not a subclass of UIScrollView
diff --git a/ios/web_view/public/cwv_scroll_view_delegate.h b/ios/web_view/public/cwv_scroll_view_delegate.h index f9bc5cac..0947a64 100644 --- a/ios/web_view/public/cwv_scroll_view_delegate.h +++ b/ios/web_view/public/cwv_scroll_view_delegate.h
@@ -7,6 +7,8 @@ #import <CoreGraphics/CoreGraphics.h> +#import "cwv_export.h" + @class CWVScrollView; // Delegete for CWVScrollView.
diff --git a/ios/web_view/public/cwv_translation_controller.h b/ios/web_view/public/cwv_translation_controller.h index 598ab0d5..ef216c53 100644 --- a/ios/web_view/public/cwv_translation_controller.h +++ b/ios/web_view/public/cwv_translation_controller.h
@@ -5,9 +5,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_CONTROLLER_H #define IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_CONTROLLER_H -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + NS_ASSUME_NONNULL_BEGIN @class CWVTranslationLanguage;
diff --git a/ios/web_view/public/cwv_translation_controller_delegate.h b/ios/web_view/public/cwv_translation_controller_delegate.h index ef09de64..eee7c433 100644 --- a/ios/web_view/public/cwv_translation_controller_delegate.h +++ b/ios/web_view/public/cwv_translation_controller_delegate.h
@@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + #ifndef IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_CONTROLLER_DELEGATE_H #define IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_CONTROLLER_DELEGATE_H
diff --git a/ios/web_view/public/cwv_translation_language.h b/ios/web_view/public/cwv_translation_language.h index 4138cd5..58808ae1 100644 --- a/ios/web_view/public/cwv_translation_language.h +++ b/ios/web_view/public/cwv_translation_language.h
@@ -5,9 +5,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_LANGUAGE_H #define IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_LANGUAGE_H -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + NS_ASSUME_NONNULL_BEGIN // Represents a single translatable language.
diff --git a/ios/web_view/public/cwv_translation_policy.h b/ios/web_view/public/cwv_translation_policy.h index 6cdde9f..0d05069 100644 --- a/ios/web_view/public/cwv_translation_policy.h +++ b/ios/web_view/public/cwv_translation_policy.h
@@ -5,9 +5,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_POLICY_H #define IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_POLICY_H -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + NS_ASSUME_NONNULL_BEGIN @class CWVTranslationLanguage;
diff --git a/ios/web_view/public/cwv_ui_delegate.h b/ios/web_view/public/cwv_ui_delegate.h index 7a5f22a..2a94cb6 100644 --- a/ios/web_view/public/cwv_ui_delegate.h +++ b/ios/web_view/public/cwv_ui_delegate.h
@@ -5,10 +5,11 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_UI_DELEGATE_H_ #define IOS_WEB_VIEW_PUBLIC_CWV_UI_DELEGATE_H_ -#import <ChromeWebView/cwv_export.h> #import <CoreGraphics/CoreGraphics.h> #import <UIKit/UIKit.h> +#import "cwv_export.h" + @class CWVHTMLElement; @class CWVWebView; @class CWVWebViewConfiguration;
diff --git a/ios/web_view/public/cwv_user_content_controller.h b/ios/web_view/public/cwv_user_content_controller.h index ad25c37e..2003899 100644 --- a/ios/web_view/public/cwv_user_content_controller.h +++ b/ios/web_view/public/cwv_user_content_controller.h
@@ -5,9 +5,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_USER_CONTENT_CONTROLLER_H_ #define IOS_WEB_VIEW_PUBLIC_CWV_USER_CONTENT_CONTROLLER_H_ -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + @class CWVUserScript; // Allows injecting custom scripts into CWVWebView created with the
diff --git a/ios/web_view/public/cwv_user_script.h b/ios/web_view/public/cwv_user_script.h index 5ead98c..5b5a574 100644 --- a/ios/web_view/public/cwv_user_script.h +++ b/ios/web_view/public/cwv_user_script.h
@@ -5,9 +5,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_USER_SCRIPT_H_ #define IOS_WEB_VIEW_PUBLIC_CWV_USER_SCRIPT_H_ -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + // User Script to be injected into main frame of CWVWebView after // window.document is created, but before other content is loaded (i.e., at the // same timing as WKUserScriptInjectionTimeAtDocumentStart).
diff --git a/ios/web_view/public/cwv_web_view.h b/ios/web_view/public/cwv_web_view.h index 1265614..3fb82c2 100644 --- a/ios/web_view/public/cwv_web_view.h +++ b/ios/web_view/public/cwv_web_view.h
@@ -4,9 +4,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_WEB_VIEW_H_ #define IOS_WEB_VIEW_PUBLIC_CWV_WEB_VIEW_H_ -#import <ChromeWebView/cwv_export.h> #import <UIKit/UIKit.h> +#import "cwv_export.h" + @class CWVScrollView; @class CWVTranslationController; @class CWVWebViewConfiguration;
diff --git a/ios/web_view/public/cwv_web_view_configuration.h b/ios/web_view/public/cwv_web_view_configuration.h index f826257..e1de098 100644 --- a/ios/web_view/public/cwv_web_view_configuration.h +++ b/ios/web_view/public/cwv_web_view_configuration.h
@@ -5,9 +5,10 @@ #ifndef IOS_WEB_VIEW_PUBLIC_CWV_WEB_VIEW_CONFIGURATION_H_ #define IOS_WEB_VIEW_PUBLIC_CWV_WEB_VIEW_CONFIGURATION_H_ -#import <ChromeWebView/cwv_export.h> #import <Foundation/Foundation.h> +#import "cwv_export.h" + @class CWVUserContentController; @class CWVWebsiteDataStore;
diff --git a/net/test/url_request/url_request_mock_http_job.cc b/net/test/url_request/url_request_mock_http_job.cc index fb4ec8a..f2fb63b 100644 --- a/net/test/url_request/url_request_mock_http_job.cc +++ b/net/test/url_request/url_request_mock_http_job.cc
@@ -4,14 +4,13 @@ #include "net/test/url_request/url_request_mock_http_job.h" +#include "base/bind.h" #include "base/files/file_util.h" #include "base/macros.h" -#include "base/message_loop/message_loop.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "base/task_runner_util.h" -#include "base/threading/sequenced_worker_pool.h" +#include "base/task_scheduler/post_task.h" #include "base/threading/thread_restrictions.h" #include "net/base/filename_util.h" #include "net/base/net_errors.h" @@ -34,13 +33,10 @@ // contents of the file at |base_path|. When |map_all_requests_to_base_path| // is false, |base_path| is the file path leading to the root of the directory // to use as the root of the HTTP server. - MockJobInterceptor( - const base::FilePath& base_path, - bool map_all_requests_to_base_path, - const scoped_refptr<base::SequencedWorkerPool>& worker_pool) + MockJobInterceptor(const base::FilePath& base_path, + bool map_all_requests_to_base_path) : base_path_(base_path), - map_all_requests_to_base_path_(map_all_requests_to_base_path), - worker_pool_(worker_pool) {} + map_all_requests_to_base_path_(map_all_requests_to_base_path) {} ~MockJobInterceptor() override {} // URLRequestJobFactory::ProtocolHandler implementation @@ -48,11 +44,8 @@ URLRequest* request, NetworkDelegate* network_delegate) const override { return new URLRequestMockHTTPJob( - request, - network_delegate, - map_all_requests_to_base_path_ ? base_path_ : GetOnDiskPath(request), - worker_pool_->GetTaskRunnerWithShutdownBehavior( - base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); + request, network_delegate, + map_all_requests_to_base_path_ ? base_path_ : GetOnDiskPath(request)); } private: @@ -70,7 +63,6 @@ const base::FilePath base_path_; const bool map_all_requests_to_base_path_; - const scoped_refptr<base::SequencedWorkerPool> worker_pool_; DISALLOW_COPY_AND_ASSIGN(MockJobInterceptor); }; @@ -98,15 +90,13 @@ } // namespace // static -void URLRequestMockHTTPJob::AddUrlHandlers( - const base::FilePath& base_path, - const scoped_refptr<base::SequencedWorkerPool>& worker_pool) { +void URLRequestMockHTTPJob::AddUrlHandlers(const base::FilePath& base_path) { // Add kMockHostname to URLRequestFilter, for both HTTP and HTTPS. URLRequestFilter* filter = URLRequestFilter::GetInstance(); - filter->AddHostnameInterceptor( - "http", kMockHostname, CreateInterceptor(base_path, worker_pool)); + filter->AddHostnameInterceptor("http", kMockHostname, + CreateInterceptor(base_path)); filter->AddHostnameInterceptor("https", kMockHostname, - CreateInterceptor(base_path, worker_pool)); + CreateInterceptor(base_path)); } // static @@ -121,30 +111,27 @@ // static std::unique_ptr<URLRequestInterceptor> URLRequestMockHTTPJob::CreateInterceptor( - const base::FilePath& base_path, - const scoped_refptr<base::SequencedWorkerPool>& worker_pool) { + const base::FilePath& base_path) { return std::unique_ptr<URLRequestInterceptor>( - new MockJobInterceptor(base_path, false, worker_pool)); + new MockJobInterceptor(base_path, false)); } // static std::unique_ptr<URLRequestInterceptor> URLRequestMockHTTPJob::CreateInterceptorForSingleFile( - const base::FilePath& file, - const scoped_refptr<base::SequencedWorkerPool>& worker_pool) { + const base::FilePath& file) { return std::unique_ptr<URLRequestInterceptor>( - new MockJobInterceptor(file, true, worker_pool)); + new MockJobInterceptor(file, true)); } -URLRequestMockHTTPJob::URLRequestMockHTTPJob( - URLRequest* request, - NetworkDelegate* network_delegate, - const base::FilePath& file_path, - const scoped_refptr<base::TaskRunner>& task_runner) - : URLRequestFileJob(request, network_delegate, file_path, task_runner), - task_runner_(task_runner), - weak_ptr_factory_(this) { -} +URLRequestMockHTTPJob::URLRequestMockHTTPJob(URLRequest* request, + NetworkDelegate* network_delegate, + const base::FilePath& file_path) + : URLRequestFileJob(request, + network_delegate, + file_path, + base::CreateTaskRunnerWithTraits({base::MayBlock()})), + weak_ptr_factory_(this) {} URLRequestMockHTTPJob::~URLRequestMockHTTPJob() { } @@ -169,10 +156,8 @@ // Public virtual version. void URLRequestMockHTTPJob::Start() { - base::PostTaskAndReplyWithResult( - task_runner_.get(), - FROM_HERE, - base::Bind(&DoFileIO, file_path_), + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, {base::MayBlock()}, base::Bind(&DoFileIO, file_path_), base::Bind(&URLRequestMockHTTPJob::SetHeadersAndStart, weak_ptr_factory_.GetWeakPtr())); }
diff --git a/net/test/url_request/url_request_mock_http_job.h b/net/test/url_request/url_request_mock_http_job.h index 376f64f..f9dc2cf 100644 --- a/net/test/url_request/url_request_mock_http_job.h +++ b/net/test/url_request/url_request_mock_http_job.h
@@ -13,13 +13,11 @@ #include <string> #include "base/macros.h" -#include "base/memory/ref_counted.h" #include "net/url_request/url_request_file_job.h" #include "url/gurl.h" namespace base { class FilePath; -class SequencedWorkerPool; } namespace net { @@ -30,11 +28,10 @@ class URLRequestMockHTTPJob : public URLRequestFileJob { public: - // Note that all file IO is done using |worker_pool|. + // Note that all file I/O is done using TaskScheduler. URLRequestMockHTTPJob(URLRequest* request, NetworkDelegate* network_delegate, - const base::FilePath& file_path, - const scoped_refptr<base::TaskRunner>& task_runner); + const base::FilePath& file_path); // URLRequestJob overrides. void Start() override; @@ -48,9 +45,7 @@ void OnReadComplete(net::IOBuffer* buffer, int result) override; // Adds the testing URLs to the URLRequestFilter, both under HTTP and HTTPS. - static void AddUrlHandlers( - const base::FilePath& base_path, - const scoped_refptr<base::SequencedWorkerPool>& worker_pool); + static void AddUrlHandlers(const base::FilePath& base_path); // Given the path to a file relative to the path passed to AddUrlHandler(), // construct a mock URL. @@ -62,15 +57,13 @@ // file path leading to the root of the directory to use as the root of the // HTTP server. static std::unique_ptr<URLRequestInterceptor> CreateInterceptor( - const base::FilePath& base_path, - const scoped_refptr<base::SequencedWorkerPool>& worker_pool); + const base::FilePath& base_path); // Returns a URLRequestJobFactory::ProtocolHandler that serves // URLRequestMockHTTPJob's responding like an HTTP server. It responds to all // requests with the contents of |file|. static std::unique_ptr<URLRequestInterceptor> CreateInterceptorForSingleFile( - const base::FilePath& file, - const scoped_refptr<base::SequencedWorkerPool>& worker_pool); + const base::FilePath& file); protected: ~URLRequestMockHTTPJob() override; @@ -81,7 +74,6 @@ std::string raw_headers_; int64_t total_received_bytes_ = 0; - const scoped_refptr<base::TaskRunner> task_runner_; base::WeakPtrFactory<URLRequestMockHTTPJob> weak_ptr_factory_;
diff --git a/sdch/BUILD.gn b/sdch/BUILD.gn index 1cab0b3..76bbbd4 100644 --- a/sdch/BUILD.gn +++ b/sdch/BUILD.gn
@@ -59,7 +59,7 @@ "//third_party/zlib", ] - if (is_linux || is_android) { + if (is_linux || is_android || is_fuchsia) { include_dirs = [ "linux" ] } else if (is_ios) { include_dirs = [ "ios" ]
diff --git a/testing/scripts/run_under_valgrind.py b/testing/scripts/run_under_valgrind.py deleted file mode 100755 index 789aa55..0000000 --- a/testing/scripts/run_under_valgrind.py +++ /dev/null
@@ -1,38 +0,0 @@ -#!/usr/bin/env python -# Copyright 2016 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import json -import os -import sys - - -import common - - -def main_run(args): - rc = common.run_runtest(args, [ - os.path.join(common.SRC_DIR, 'tools', 'valgrind', 'chrome_tests.sh'), - '--tool', 'memcheck', - '--build-dir', os.path.join(common.SRC_DIR, 'out', args.build_config_fs), - ] + args.args) - - json.dump({ - 'valid': True, - 'failures': ['failed'] if rc else [] - }, args.output) - - return rc - - -def main_compile_targets(args): - json.dump(['$name'], args.output) - - -if __name__ == '__main__': - funcs = { - 'run': main_run, - 'compile_targets': main_compile_targets, - } - sys.exit(common.run_script(sys.argv[1:], funcs))
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG index 0ac02b2..d5372222 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -40,13 +40,8 @@ crbug.com/591099 accessibility/aria-none-role.html [ Failure ] crbug.com/591099 accessibility/aria-option-role.html [ Failure ] crbug.com/591099 accessibility/aria-orientation.html [ Failure ] -crbug.com/591099 accessibility/aria-owns-dynamic-changes.html [ Crash ] -crbug.com/591099 accessibility/aria-owns-ignores-leafs.html [ Crash Failure ] -crbug.com/591099 accessibility/aria-owns-sends-notification.html [ Crash ] -crbug.com/591099 accessibility/aria-owns.html [ Crash ] crbug.com/591099 accessibility/aria-presentational-role.html [ Failure ] crbug.com/591099 accessibility/aria-readonly.html [ Failure ] -crbug.com/591099 accessibility/aria-relations-should-ignore-hidden-targets.html [ Crash ] crbug.com/591099 accessibility/aria-roles.html [ Crash Failure ] crbug.com/591099 accessibility/aria-scrollbar-role.html [ Failure ] crbug.com/591099 accessibility/aria-setsize-posinset.html [ Failure ] @@ -55,7 +50,6 @@ crbug.com/591099 accessibility/aria-tables.html [ Failure ] crbug.com/591099 accessibility/aria-text-role.html [ Failure ] crbug.com/591099 accessibility/aria-toggle-button-with-title.html [ Failure ] -crbug.com/591099 accessibility/aria-tree.html [ Crash ] crbug.com/591099 accessibility/aria-used-on-image-maps.html [ Failure ] crbug.com/591099 accessibility/bounds-calc.html [ Crash ] crbug.com/591099 accessibility/br-element-has-correct-title.html [ Failure ] @@ -89,7 +83,6 @@ crbug.com/591099 accessibility/description-calc-aria-describedby.html [ Crash ] crbug.com/591099 accessibility/description-calc-inputs.html [ Crash ] crbug.com/591099 accessibility/description-calc-native-markup-input-buttons.html [ Crash ] -crbug.com/591099 accessibility/description-calc-summary.html [ Crash ] crbug.com/591099 accessibility/dimensions-include-descendants.html [ Failure ] crbug.com/591099 accessibility/disabled-controls-not-focusable.html [ Crash ] crbug.com/591099 accessibility/display-inline-block-crash.html [ Failure ] @@ -99,7 +92,7 @@ crbug.com/591099 accessibility/dl-role.html [ Failure ] crbug.com/591099 accessibility/duplicate-child-nodes.html [ Failure ] crbug.com/591099 accessibility/element-role-mapping-focusable.html [ Crash Failure ] -crbug.com/591099 accessibility/element-role-mapping-normal.html [ Crash Failure ] +crbug.com/591099 accessibility/element-role-mapping-normal.html [ Crash Failure Timeout ] crbug.com/591099 accessibility/ellipsis-text.html [ Failure ] crbug.com/591099 accessibility/file-upload-button-with-axpress.html [ Crash Failure ] crbug.com/591099 accessibility/first-letter-text-transform-causes-crash.html [ Failure ] @@ -164,17 +157,14 @@ crbug.com/591099 accessibility/name-calc-aria-labelledby.html [ Crash ] crbug.com/591099 accessibility/name-calc-aria-owns.html [ Crash ] crbug.com/591099 accessibility/name-calc-figure.html [ Crash ] -crbug.com/591099 accessibility/name-calc-group-inside-treeitem.html [ Crash ] crbug.com/591099 accessibility/name-calc-img.html [ Crash ] crbug.com/591099 accessibility/name-calc-inputs.html [ Crash ] crbug.com/591099 accessibility/name-calc-native-markup-buttons.html [ Crash ] crbug.com/591099 accessibility/name-calc-native-markup-input-buttons.html [ Crash ] crbug.com/591099 accessibility/name-calc-presentational.html [ Crash ] -crbug.com/591099 accessibility/name-calc-summary.html [ Crash ] crbug.com/591099 accessibility/name-calc-svg.html [ Crash ] crbug.com/591099 accessibility/name-calc-visibility.html [ Crash ] crbug.com/591099 accessibility/nested-layout-crash.html [ Crash Failure ] -crbug.com/591099 accessibility/nochildren-elements.html [ Crash ] crbug.com/591099 accessibility/non-native-image-crash.html [ Failure ] crbug.com/591099 accessibility/not-ignore-landmark-roles.html [ Failure ] crbug.com/591099 accessibility/notification-listeners.html [ Failure ] @@ -256,7 +246,6 @@ crbug.com/591099 animations/composition/caret-color-composition.html [ Crash ] crbug.com/591099 animations/composition/stroke-dasharray-composition.html [ Crash ] crbug.com/591099 animations/computed-style.html [ Failure ] -crbug.com/591099 animations/cross-fade-list-style-image.html [ Crash ] crbug.com/591099 animations/css-animation-overrides-svg-presentation-attribute-animation.html [ Crash ] crbug.com/591099 animations/delay-start-event.html [ Failure ] crbug.com/591099 animations/display-change-does-not-terminate-animation.html [ Crash ] @@ -296,7 +285,6 @@ crbug.com/591099 animations/interpolation/font-weight-interpolation.html [ Crash ] crbug.com/591099 animations/interpolation/height-interpolation.html [ Crash ] crbug.com/591099 animations/interpolation/line-height-interpolation.html [ Crash ] -crbug.com/591099 animations/interpolation/list-style-image-interpolation.html [ Crash ] crbug.com/591099 animations/interpolation/margin-interpolation.html [ Crash ] crbug.com/591099 animations/interpolation/max-height-interpolation.html [ Crash ] crbug.com/591099 animations/interpolation/min-height-interpolation.html [ Crash ] @@ -545,798 +533,10 @@ crbug.com/591099 canvas/feimage-with-foreignobject-taint-canvas.html [ Crash ] crbug.com/591099 canvas/image-with-foreignobject-taint-canvas-2.html [ Crash ] crbug.com/591099 canvas/image-with-foreignobject-taint-canvas.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.canvas.readonly.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.canvas.reference.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect+fillRect.alpha0.5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect+fillRect.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect.clip.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect.globalalpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect.globalcomposite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect.path.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect.shadow.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect.transform.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.clearRect.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.copy.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.destination-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.destination-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.destination-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.destination-over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.lighter.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.source-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.source-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.source-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.source-over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.canvas.xor.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.copy.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.destination-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.destination-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.destination-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.destination-over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.lighter.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.source-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.source-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.source-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.source-over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.clip.xor.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.globalAlpha.canvas.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.globalAlpha.canvaspattern.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.globalAlpha.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.globalAlpha.fill.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.globalAlpha.image.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.globalAlpha.imagepattern.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.globalAlpha.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.globalAlpha.range.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.copy.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.destination-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.destination-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.destination-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.destination-over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.lighter.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.source-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.source-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.source-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.source-over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.image.xor.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.operation.casesensitive.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.operation.clear.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.operation.darker.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.operation.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.operation.foobar.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.operation.get.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.operation.highlight.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.operation.nullsuffix.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.operation.over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.operation.unrecognised.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.copy.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.destination-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.destination-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.destination-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.destination-over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.lighter.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.source-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.source-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.source-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.source-over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.solid.xor.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.copy.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.destination-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.destination-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.destination-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.destination-over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.lighter.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.source-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.source-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.source-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.source-over.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.transparent.xor.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.fill.copy.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.fill.destination-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.fill.destination-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.fill.source-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.fill.source-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.image.copy.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.image.destination-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.image.destination-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.image.source-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.image.source-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.nocontext.copy.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.nocontext.destination-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.nocontext.destination-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.nocontext.source-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.nocontext.source-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.pattern.copy.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.pattern.destination-atop.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.pattern.destination-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.pattern.source-in.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.composite.uncovered.pattern.source-out.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.coordinatespace.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.3arg.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.5arg.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.9arg.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.9arg.destpos.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.9arg.destsize.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.9arg.sourcepos.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.9arg.sourcesize.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.alpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.animated.apng.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.animated.gif.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.animated.poster.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.broken.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.canvas.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.clip.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.composite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.floatsource.html [ Crash ] crbug.com/591099 canvas/philip/tests/2d.drawImage.image.incomplete.empty.html [ Crash Pass ] crbug.com/591099 canvas/philip/tests/2d.drawImage.image.incomplete.omitted.html [ Crash Pass ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.incomplete.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.negativeSourceHeight.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.negativeSourceHeight2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.negativeSourceHeightAndWidth.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.negativedest.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.negativedir.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.negativesource.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.nowrap.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.null.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.outsidesource.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.path.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.self.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.self.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.transform.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.wrongtype.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.zerocanvas.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.drawImage.zerosource.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillRect.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillRect.clip.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillRect.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillRect.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillRect.path.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillRect.shadow.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillRect.transform.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillRect.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.get.semitransparent.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.get.solid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.get.transparent.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.invalidstring.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.invalidtype.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.current.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.current.changed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.current.removed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hex3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hex6.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsl-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsl-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsl-3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsl-4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsl-5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsl-6.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsl-clamp-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsl-clamp-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsl-clamp-3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsl-clamp-4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsla-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsla-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsla-clamp-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsla-clamp-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsla-clamp-3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsla-clamp-4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsla-clamp-5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.hsla-clamp-6.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.html4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hex1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hex2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hex3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hex5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hex6.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hex7.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hsl-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hsl-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hsl-3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hsl-4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hsl-5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hsl-6.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hsla-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.hsla-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.name-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.name-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.name-3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.name-4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgb-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgb-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgb-3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgb-4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgb-5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgb-6.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgb-7.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgba-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgba-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgba-3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgba-4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgba-5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgba-6.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.invalid.rgba-7.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgb-clamp-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgb-clamp-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgb-clamp-3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgb-clamp-4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgb-clamp-5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgb-eof.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgb-num.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgb-percent.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgba-clamp-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgba-clamp-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgba-eof.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgba-num-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgba-num-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgba-percent.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgba-solid-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgba-solid-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgba-solid-3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.rgba-solid-4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.svg-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.svg-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.system.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.transparent-1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.fillStyle.parse.transparent-2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.getcontext.exists.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.getcontext.extraargs.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.getcontext.shared.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.getcontext.unique.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.empty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.interpolate.alpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.interpolate.colour.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.interpolate.colouralpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.interpolate.multiple.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.interpolate.outside.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.interpolate.overlap.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.interpolate.overlap2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.interpolate.solid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.interpolate.vertical.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.interpolate.zerosize.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.linear.transform.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.linear.transform.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.linear.transform.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.object.compare.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.object.crosscanvas.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.object.current.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.object.invalidcolour.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.object.return.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.object.update.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.cone.behind.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.cone.beside.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.cone.bottom.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.cone.cylinder.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.cone.front.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.cone.shape1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.cone.shape2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.cone.top.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.equal.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.inside1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.inside2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.inside3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.outside1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.outside2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.outside3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.touch1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.touch2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.touch3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.transform.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.transform.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.gradient.radial.transform.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create1.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create1.initial.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create1.type.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create1.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create2.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create2.initial.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create2.large.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create2.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create2.round.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create2.tiny.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create2.type.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.create2.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.clamp.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.length.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.nonpremul.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.order.alpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.order.cols.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.order.rgb.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.order.rows.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.range.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.source.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.source.outside.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.source.size.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.tiny.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.type.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.unaffected.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.get.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.object.clamp.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.object.nan.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.object.properties.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.object.readonly.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.object.round.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.object.set.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.object.string.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.object.undefined.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.alpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.clip.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.created.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.cross.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.dirty.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.dirty.outside.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.dirty.rect1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.dirty.rect2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.dirty.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.modified.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.null.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.path.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.unaffected.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.unchanged.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.imageData.put.wrongtype.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.cap.butt.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.cap.closed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.cap.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.cap.open.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.cap.round.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.cap.square.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.cap.valid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.cross.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.defaults.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.join.bevel.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.join.closed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.join.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.join.miter.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.join.open.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.join.parallel.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.join.round.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.join.valid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.miter.acute.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.miter.exceeded.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.miter.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.miter.lineedge.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.miter.obtuse.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.miter.rightangle.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.miter.valid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.miter.within.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.union.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.width.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.width.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.width.scaledefault.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.width.transformed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.line.width.valid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.missingargs.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.angle.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.angle.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.angle.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.angle.4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.angle.5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.angle.6.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.empty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.end.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.nonempty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.scale.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.scale.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.selfintersect.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.selfintersect.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.shape.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.shape.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.shape.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.shape.4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.shape.5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.twopie.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.twopie.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.twopie.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.twopie.4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.zero.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.zero.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arc.zeroradius.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.coincide.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.coincide.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.collinear.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.collinear.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.collinear.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.ensuresubpath.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.ensuresubpath.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.scale.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.shape.curve1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.shape.curve2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.shape.end.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.shape.start.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.transformation.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.zero.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.arcTo.zero.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.beginPath.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.bezierCurveTo.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.bezierCurveTo.ensuresubpath.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.bezierCurveTo.ensuresubpath.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.bezierCurveTo.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.bezierCurveTo.scaled.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.bezierCurveTo.shape.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.clip.basic.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.clip.basic.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.clip.empty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.clip.intersect.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.clip.unaffected.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.clip.winding.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.clip.winding.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.closePath.empty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.closePath.newline.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.closePath.nextpoint.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.fill.closed.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.fill.closed.unaffected.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.fill.overlap.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.fill.winding.add.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.fill.winding.subtract.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.fill.winding.subtract.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.fill.winding.subtract.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.initial.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.arc.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.basic.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.basic.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.bezier.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.bigarc.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.edge.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.empty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.outside.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.subpath.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.transform.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.transform.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.transform.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.unclosed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.isPointInPath.winding.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.lineTo.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.lineTo.ensuresubpath.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.lineTo.ensuresubpath.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.lineTo.nextpoint.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.lineTo.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.moveTo.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.moveTo.multiple.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.moveTo.newsubpath.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.moveTo.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.quadraticCurveTo.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.quadraticCurveTo.ensuresubpath.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.quadraticCurveTo.ensuresubpath.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.quadraticCurveTo.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.quadraticCurveTo.scaled.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.quadraticCurveTo.shape.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.closed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.end.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.end.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.newsubpath.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.selfintersect.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.winding.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.zero.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.zero.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.zero.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.zero.4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.zero.5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.rect.zero.6.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.empty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.overlap.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.prune.arc.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.prune.closed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.prune.corner.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.prune.curve.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.prune.line.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.prune.rect.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.scale1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.scale2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.skew.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.unaffected.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.stroke.union.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.transformation.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.transformation.changing.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.path.transformation.multiple.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.animated.gif.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.basic.canvas.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.basic.image.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.basic.nocontext.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.basic.type.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.basic.zerocanvas.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.crosscanvas.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.image.broken.html [ Crash ] crbug.com/591099 canvas/philip/tests/2d.pattern.image.incomplete.empty.html [ Crash Pass ] -crbug.com/591099 canvas/philip/tests/2d.pattern.image.incomplete.html [ Crash ] crbug.com/591099 canvas/philip/tests/2d.pattern.image.incomplete.omitted.html [ Crash Pass ] -crbug.com/591099 canvas/philip/tests/2d.pattern.image.null.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.image.string.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.image.undefined.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.modify.canvas1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.modify.canvas2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.modify.image1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.modify.image2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.norepeat.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.norepeat.coord1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.norepeat.coord2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.norepeat.coord3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.norepeat.outside.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.orientation.canvas.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.orientation.image.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeat.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeat.coord1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeat.coord2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeat.coord3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeat.outside.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeatx.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeatx.coord1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeatx.outside.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeaty.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeaty.coord1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.paint.repeaty.outside.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.repeat.case.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.repeat.empty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.repeat.null.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.repeat.nullsuffix.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.repeat.undefined.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.pattern.repeat.unrecognised.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.scaled.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.alpha.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.alpha.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.alpha.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.alpha.4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.alpha.5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.attributes.shadowBlur.initial.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.attributes.shadowBlur.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.attributes.shadowBlur.valid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.attributes.shadowColor.initial.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.attributes.shadowColor.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.attributes.shadowColor.valid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.attributes.shadowOffset.initial.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.attributes.shadowOffset.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.attributes.shadowOffset.valid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.blur.high.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.blur.low.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.canvas.alpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.canvas.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.canvas.transparent.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.canvas.transparent.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.clip.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.clip.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.clip.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.composite.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.composite.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.composite.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.enable.blur.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.enable.off.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.enable.off.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.enable.x.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.enable.y.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.gradient.alpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.gradient.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.gradient.transparent.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.gradient.transparent.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.image.alpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.image.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.image.scale.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.image.section.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.image.transparent.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.image.transparent.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.offset.negativeX.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.offset.negativeY.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.offset.positiveX.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.offset.positiveY.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.outside.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.pattern.alpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.pattern.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.pattern.transparent.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.pattern.transparent.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.stroke.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.stroke.cap.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.stroke.cap.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.stroke.join.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.stroke.join.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.stroke.join.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.transform.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.shadow.transform.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.bitmap.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.clip.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.fillStyle.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.font.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.globalAlpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.globalCompositeOperation.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.lineCap.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.lineJoin.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.lineWidth.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.miterLimit.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.path.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.shadowBlur.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.shadowColor.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.shadowOffsetX.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.shadowOffsetY.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.stack.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.stackdepth.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.strokeStyle.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.textAlign.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.textBaseline.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.transformation.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.state.saverestore.underflow.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.clip.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.globalalpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.globalcomposite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.path.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.shadow.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.transform.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.zero.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.zero.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.zero.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.zero.4.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeRect.zero.5.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.strokeStyle.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text-custom-font-load-crash.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.align.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.align.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.align.valid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.baseline.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.baseline.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.baseline.valid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.align.center.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.align.end.ltr.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.align.end.rtl.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.align.left.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.align.right.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.align.start.ltr.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.align.start.rtl.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.baseline.alphabetic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.baseline.bottom.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.baseline.hanging.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.baseline.ideographic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.baseline.middle.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.baseline.top.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fill.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fill.maxWidth.bound.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fill.maxWidth.fontface.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fill.maxWidth.large.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fill.maxWidth.small.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fill.maxWidth.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fill.rtl.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fill.unaffected.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fontface.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fontface.notinpage.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.fontface.repeat.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.kern.consistent.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.space.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.space.collapse.end.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.space.collapse.nonspace.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.space.collapse.other.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.space.collapse.space.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.space.collapse.start.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.stroke.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.draw.stroke.unaffected.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.font.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.font.parse.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.font.parse.complex.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.font.parse.invalid.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.font.parse.size.percentage.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.font.parse.size.percentage.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.font.parse.system.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.font.rem.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.measure.width.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.measure.width.empty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.text.measure.width.space.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.order.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.rotate.direction.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.rotate.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.rotate.radians.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.rotate.wrap.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.rotate.wrapnegative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.rotate.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.scale.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.scale.large.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.scale.multiple.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.scale.negative.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.scale.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.scale.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.setTransform.multiple.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.setTransform.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.setTransform.skewed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.transform.identity.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.transform.multiply.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.transform.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.transform.skewed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.translate.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.transformation.translate.nonfinite.html [ Crash ] -crbug.com/591099 canvas/philip/tests/2d.voidreturn.html [ Crash ] -crbug.com/591099 canvas/philip/tests/context.casesensitive.html [ Crash ] -crbug.com/591099 canvas/philip/tests/context.emptystring.html [ Crash ] -crbug.com/591099 canvas/philip/tests/context.unrecognised.badname.html [ Crash ] -crbug.com/591099 canvas/philip/tests/context.unrecognised.badsuffix.html [ Crash ] -crbug.com/591099 canvas/philip/tests/context.unrecognised.nullsuffix.html [ Crash ] -crbug.com/591099 canvas/philip/tests/context.unrecognised.unicode.html [ Crash ] -crbug.com/591099 canvas/philip/tests/fallback.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/fallback.multiple.html [ Crash ] -crbug.com/591099 canvas/philip/tests/fallback.nested.html [ Crash ] -crbug.com/591099 canvas/philip/tests/initial.colour.html [ Crash ] -crbug.com/591099 canvas/philip/tests/initial.reset.2dstate.html [ Crash ] -crbug.com/591099 canvas/philip/tests/initial.reset.clip.html [ Crash ] -crbug.com/591099 canvas/philip/tests/initial.reset.different.html [ Crash ] -crbug.com/591099 canvas/philip/tests/initial.reset.gradient.html [ Crash ] -crbug.com/591099 canvas/philip/tests/initial.reset.path.html [ Crash ] -crbug.com/591099 canvas/philip/tests/initial.reset.pattern.html [ Crash ] -crbug.com/591099 canvas/philip/tests/initial.reset.same.html [ Crash ] -crbug.com/591099 canvas/philip/tests/initial.reset.transform.html [ Crash ] -crbug.com/591099 canvas/philip/tests/security.dataURI.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.get.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.idl.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.idl.set.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.decimal.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.em.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.empty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.exp.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.hex.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.junk.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.minus.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.octal.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.onlyspace.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.percent.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.plus.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.space.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.trailingjunk.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.whitespace.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.parse.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.reflect.setcontent.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.reflect.setidl.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.reflect.setidlzero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.removed.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.set.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.decimal.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.em.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.empty.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.exp.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.hex.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.junk.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.minus.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.octal.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.onlyspace.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.percent.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.plus.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.space.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.trailingjunk.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.whitespace.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.setAttribute.zero.html [ Crash ] -crbug.com/591099 canvas/philip/tests/size.attributes.style.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.arguments.1.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.arguments.2.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.arguments.3.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.bogustype.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.default.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.jpeg.alpha.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.jpeg.primarycolours.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.jpeg.quality.basic.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.jpeg.quality.notnumber.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.jpeg.quality.outsiderange.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.lowercase.ascii.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.lowercase.unicode.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.nocontext.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.png.complexcolours.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.png.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.png.primarycolours.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.unrecognised.html [ Crash ] -crbug.com/591099 canvas/philip/tests/toDataURL.zerosize.html [ Crash ] -crbug.com/591099 canvas/philip/tests/type.exists.html [ Crash ] -crbug.com/591099 canvas/philip/tests/type.extend.html [ Crash ] -crbug.com/591099 canvas/philip/tests/type.name.html [ Crash ] -crbug.com/591099 canvas/philip/tests/type.prototype.html [ Crash ] -crbug.com/591099 canvas/philip/tests/type.replace.html [ Crash ] crbug.com/591099 compositing/3d-corners.html [ Failure ] crbug.com/591099 compositing/absolute-inside-out-of-view-fixed.html [ Failure Pass ] crbug.com/591099 compositing/animation/busy-indicator.html [ Failure ] @@ -1367,7 +567,6 @@ crbug.com/591099 compositing/contents-opaque/layer-opacity.html [ Failure Pass ] crbug.com/591099 compositing/contents-opaque/layer-transform.html [ Failure Pass ] crbug.com/591099 compositing/contents-opaque/overflow-hidden-child-layers.html [ Failure ] -crbug.com/591099 compositing/contents-opaque/visibility-hidden.html [ Crash ] crbug.com/591099 compositing/culling/clear-fixed-iframe.html [ Failure ] crbug.com/591099 compositing/culling/scrolled-within-boxshadow.html [ Failure Pass ] crbug.com/591099 compositing/culling/translated-boxshadow.html [ Failure Pass ] @@ -1574,7 +773,6 @@ crbug.com/591099 compositing/overflow/content-gains-scrollbars.html [ Failure ] crbug.com/591099 compositing/overflow/content-loses-scrollbars.html [ Failure ] crbug.com/591099 compositing/overflow/descendant-with-clip-path.html [ Failure Pass ] -crbug.com/591099 compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Crash Failure ] crbug.com/591099 compositing/overflow/fixed-position-ancestor-clip.html [ Failure ] crbug.com/591099 compositing/overflow/fractional-sized-scrolling-layer.html [ Failure ] crbug.com/591099 compositing/overflow/grandchild-composited-with-border-radius-ancestor.html [ Failure ] @@ -1648,7 +846,6 @@ crbug.com/591099 compositing/plugins/webplugin-reflection.html [ Failure Pass ] crbug.com/591099 compositing/reflections/animation-inside-reflection.html [ Failure ] crbug.com/591099 compositing/reflections/backface-hidden-reflection.html [ Failure Pass ] -crbug.com/591099 compositing/reflections/become-simple-composited-reflection.html [ Crash ] crbug.com/591099 compositing/reflections/compositing-change-inside-reflection.html [ Failure ] crbug.com/591099 compositing/reflections/deeply-nested-reflections.html [ Failure ] crbug.com/591099 compositing/reflections/enable-disable-compositing-reflection.html [ Failure Pass ] @@ -2045,9 +1242,7 @@ crbug.com/591099 css2.1/20110323/margin-collapse-012.htm [ Failure ] crbug.com/591099 css2.1/20110323/outline-color-001.htm [ Failure Pass ] crbug.com/591099 css2.1/20110323/outline-color-applies-to-008.htm [ Failure ] -crbug.com/591099 css2.1/20110323/outline-color-applies-to-010.htm [ Crash ] crbug.com/591099 css2.1/20110323/outline-color-applies-to-014.htm [ Failure Pass ] -crbug.com/591099 css2.1/20110323/overflow-applies-to-010.htm [ Crash Failure ] crbug.com/591099 css2.1/20110323/table-caption-001.htm [ Failure Pass ] crbug.com/591099 css2.1/20110323/table-caption-002.htm [ Crash Failure Pass ] crbug.com/591099 css2.1/20110323/table-caption-horizontal-alignment-001.htm [ Failure Pass ] @@ -2541,7 +1736,6 @@ crbug.com/591099 css3/background/background-color-gradient-alignment.html [ Failure Pass ] crbug.com/591099 css3/background/background-large-position-and-size-remains-stable.html [ Failure ] crbug.com/591099 css3/background/background-positioning-area-vrl.html [ Failure ] -crbug.com/591099 css3/bdi-element.html [ Crash ] crbug.com/591099 css3/blending/background-blend-mode-crossfade-image-gradient.html [ Failure ] crbug.com/591099 css3/blending/background-blend-mode-data-uri-svg-image.html [ Failure Pass ] crbug.com/591099 css3/blending/background-blend-mode-default-value.html [ Failure Pass ] @@ -2613,7 +1807,6 @@ crbug.com/591099 css3/filters/blur-filter-page-scroll-parents.html [ Failure Pass ] crbug.com/591099 css3/filters/blur-filter-page-scroll-self.html [ Failure Pass ] crbug.com/591099 css3/filters/blur-filter-page-scroll.html [ Failure Pass ] -crbug.com/591099 css3/filters/bug419429.html [ Crash ] crbug.com/591099 css3/filters/composited-during-animation.html [ Crash ] crbug.com/591099 css3/filters/composited-during-transition-layertree.html [ Failure ] crbug.com/591099 css3/filters/composited-layer-bounds-after-sw-blur-animation.html [ Failure Pass ] @@ -2691,7 +1884,6 @@ crbug.com/591099 css3/flexbox/auto-height-column-with-border-and-padding.html [ Failure ] crbug.com/591099 css3/flexbox/auto-margins.html [ Failure ] crbug.com/591099 css3/flexbox/box-orient-button.html [ Crash ] -crbug.com/591099 css3/flexbox/bug527039.html [ Crash ] crbug.com/591099 css3/flexbox/bug633212.html [ Crash ] crbug.com/591099 css3/flexbox/button.html [ Failure ] crbug.com/591099 css3/flexbox/change-flexitem-into-abspos.html [ Failure ] @@ -2740,7 +1932,6 @@ crbug.com/591099 css3/flexbox/min-size-auto.html [ Crash ] crbug.com/591099 css3/flexbox/multiline-align-self.html [ Failure ] crbug.com/591099 css3/flexbox/multiline-reverse-wrap-baseline.html [ Failure ] -crbug.com/591099 css3/flexbox/multiline-shrink-to-fit.html [ Crash ] crbug.com/591099 css3/flexbox/negative-flex-rounding-assert.html [ Failure ] crbug.com/591099 css3/flexbox/nested-stretch.html [ Failure ] crbug.com/591099 css3/flexbox/overflow-auto-dynamic-changes-abspos.html [ Failure ] @@ -2785,7 +1976,6 @@ crbug.com/591099 css3/masking/mask-repeat-space-content.html [ Failure ] crbug.com/591099 css3/masking/mask-repeat-space-padding.html [ Failure ] crbug.com/591099 css3/motion-path/combine-anchor-transform.html [ Failure Pass ] -crbug.com/591099 css3/motion-path/offset-anchor-rotation.html [ Crash ] crbug.com/591099 css3/motion-path/path-establishes-stacking-context.html [ Failure Pass ] crbug.com/591099 css3/parsing-css3-nthchild.html [ Failure ] crbug.com/591099 css3/selectors3/html/css3-modsel-1.html [ Crash Failure ] @@ -3626,10 +2816,8 @@ crbug.com/591099 dom/domparsing/xmlserializer-attribute-namespace.html [ Failure ] crbug.com/591099 dom/domparsing/xmlserializer-attribute-ns-prefix.html [ Failure ] crbug.com/591099 dom/domparsing/xmlserializer-attribute-special-namespaces.html [ Failure ] -crbug.com/591099 dom/domparsing/xmlserializer-doctype.html [ Crash ] crbug.com/591099 dom/domparsing/xmlserializer-doctype2.html [ Failure ] crbug.com/591099 dom/domparsing/xmlserializer-double-xmlns.html [ Failure ] -crbug.com/591099 dom/legacy_dom_conformance/html/level1/core/li-type-supported-case-insensitive.html [ Crash ] crbug.com/591099 dom/legacy_dom_conformance/html/level2/html/AppletsCollection.html [ Crash ] crbug.com/591099 dom/legacy_dom_conformance/html/level2/html/HTMLDocument01.html [ Crash Pass ] crbug.com/591099 dom/legacy_dom_conformance/html/level2/html/HTMLDocument02.html [ Crash Pass ] @@ -4023,11 +3211,9 @@ crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLIFrameElement10.xhtml [ Crash Pass ] crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLIFrameElement11.xhtml [ Crash ] crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLImageElement01.xhtml [ Crash ] -crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLImageElement02.xhtml [ Crash ] crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLImageElement03.xhtml [ Crash Pass ] crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLImageElement04.xhtml [ Crash Pass ] crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLImageElement05.xhtml [ Crash ] -crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLImageElement06.xhtml [ Crash ] crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLImageElement08.xhtml [ Crash Pass ] crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLImageElement09.xhtml [ Crash Pass ] crbug.com/591099 dom/legacy_dom_conformance/xhtml/level2/html/HTMLImageElement12.xhtml [ Crash ] @@ -4089,7 +3275,6 @@ crbug.com/591099 editing/caret/caret-color.html [ Failure ] crbug.com/591099 editing/caret/caret-direction-auto.html [ Crash Failure ] crbug.com/591099 editing/caret/caret-height.html [ Failure ] -crbug.com/591099 editing/caret/caret-is-hidden-when-no-focus.html [ Crash ] crbug.com/591099 editing/caret/caret-position.html [ Failure ] crbug.com/591099 editing/caret/selection-with-caret-type-progress.html [ Failure ] crbug.com/591099 editing/composition-marker-basic.html [ Failure ] @@ -4111,8 +3296,6 @@ crbug.com/591099 editing/deleting/5433862-2.html [ Failure ] crbug.com/591099 editing/deleting/5483370.html [ Failure ] crbug.com/591099 editing/deleting/5729680.html [ Failure ] -crbug.com/591099 editing/deleting/backspace-merge-into-block.html [ Crash ] -crbug.com/591099 editing/deleting/backspace-merge-into-list-item.html [ Crash ] crbug.com/591099 editing/deleting/delete-3608430-fix.html [ Crash ] crbug.com/591099 editing/deleting/delete-3865854-fix.html [ Failure ] crbug.com/591099 editing/deleting/delete-all-text-in-text-field-assertion.html [ Crash ] @@ -4127,7 +3310,6 @@ crbug.com/591099 editing/deleting/delete-character-002.html [ Crash ] crbug.com/591099 editing/deleting/delete-contiguous-ws-001.html [ Crash Failure ] crbug.com/591099 editing/deleting/delete-empty-table.html [ Failure ] -crbug.com/591099 editing/deleting/delete-first-list-item.html [ Crash ] crbug.com/591099 editing/deleting/delete-inline-br.html [ Crash ] crbug.com/591099 editing/deleting/delete-last-char-in-table.html [ Crash Failure ] crbug.com/591099 editing/deleting/delete-leading-ws-001.html [ Failure ] @@ -4146,7 +3328,6 @@ crbug.com/591099 editing/deleting/delete-line-015.html [ Failure ] crbug.com/591099 editing/deleting/delete-line-016.html [ Failure ] crbug.com/591099 editing/deleting/delete-line-017.html [ Failure ] -crbug.com/591099 editing/deleting/delete-list-items-in-table-cell.html [ Crash ] crbug.com/591099 editing/deleting/delete-node-after-DOMNodeRemoved.html [ Failure ] crbug.com/591099 editing/deleting/delete-selection-001.html [ Failure ] crbug.com/591099 editing/deleting/delete-surrogatepair.html [ Failure ] @@ -4156,25 +3337,18 @@ crbug.com/591099 editing/deleting/delete_block_merge_whitespace.html [ Crash ] crbug.com/591099 editing/deleting/delete_image.html [ Crash ] crbug.com/591099 editing/deleting/delete_line_end_ws.html [ Failure ] -crbug.com/591099 editing/deleting/delete_list_item.html [ Crash ] -crbug.com/591099 editing/deleting/delete_select_all.html [ Crash ] crbug.com/591099 editing/deleting/delete_trailing_ws.html [ Crash ] -crbug.com/591099 editing/deleting/delete_with_unfocused_selection.html [ Crash ] crbug.com/591099 editing/deleting/delete_ws_fixup.html [ Crash ] crbug.com/591099 editing/deleting/forward-delete-key.html [ Failure ] -crbug.com/591099 editing/deleting/list-item-1.html [ Crash ] crbug.com/591099 editing/deleting/merge-at-end-of-document.html [ Failure ] crbug.com/591099 editing/deleting/merge-different-styles.html [ Failure ] crbug.com/591099 editing/deleting/merge-endOfParagraph.html [ Failure ] -crbug.com/591099 editing/deleting/merge-list-items-in-same-list.html [ Crash ] -crbug.com/591099 editing/deleting/merge-lists.html [ Crash ] crbug.com/591099 editing/deleting/merge-no-br.html [ Failure ] crbug.com/591099 editing/deleting/merge-paragraph-from-address.html [ Failure ] crbug.com/591099 editing/deleting/merge-paragraph-from-listing.html [ Failure ] crbug.com/591099 editing/deleting/merge-paragraph-into-blockquote.html [ Failure ] crbug.com/591099 editing/deleting/merge-paragraph-into-pre.html [ Failure ] crbug.com/591099 editing/deleting/merge-whitespace-pre.html [ Failure ] -crbug.com/591099 editing/deleting/merge_into_empty_block.html [ Crash ] crbug.com/591099 editing/deleting/merge_paragraph_into_h1.html [ Crash ] crbug.com/591099 editing/deleting/move-nodes-001.html [ Failure ] crbug.com/591099 editing/deleting/non-smart-delete.html [ Failure ] @@ -4199,7 +3373,6 @@ crbug.com/591099 editing/execCommand/4916583.html [ Crash Failure ] crbug.com/591099 editing/execCommand/4917055.html [ Crash Failure ] crbug.com/591099 editing/execCommand/4920742-2.html [ Crash Failure ] -crbug.com/591099 editing/execCommand/4924441.html [ Crash ] crbug.com/591099 editing/execCommand/4928635.html [ Crash Failure ] crbug.com/591099 editing/execCommand/4976800.html [ Failure ] crbug.com/591099 editing/execCommand/5080333-1.html [ Crash ] @@ -4221,19 +3394,12 @@ crbug.com/591099 editing/execCommand/5469868.html [ Crash Failure ] crbug.com/591099 editing/execCommand/5481523.html [ Failure ] crbug.com/591099 editing/execCommand/5483526.html [ Crash Failure ] -crbug.com/591099 editing/execCommand/5543472-1.html [ Crash ] -crbug.com/591099 editing/execCommand/5543472-2.html [ Crash ] -crbug.com/591099 editing/execCommand/5543472-3.html [ Crash ] crbug.com/591099 editing/execCommand/5569741.html [ Crash Failure ] -crbug.com/591099 editing/execCommand/5573879.html [ Crash ] crbug.com/591099 editing/execCommand/5575101-1.html [ Crash Failure ] -crbug.com/591099 editing/execCommand/5575101-2.html [ Crash ] -crbug.com/591099 editing/execCommand/5575101-3.html [ Crash ] -crbug.com/591099 editing/execCommand/5685604-1.html [ Crash ] +crbug.com/591099 editing/execCommand/5575101-2.html [ Crash Failure ] +crbug.com/591099 editing/execCommand/5575101-3.html [ Crash Failure ] crbug.com/591099 editing/execCommand/5700414-1.html [ Failure ] crbug.com/591099 editing/execCommand/5700414-2.html [ Failure ] -crbug.com/591099 editing/execCommand/5763082.html [ Crash ] -crbug.com/591099 editing/execCommand/5939887.html [ Crash ] crbug.com/591099 editing/execCommand/align-in-span.html [ Failure ] crbug.com/591099 editing/execCommand/apply-inline-style-to-element-with-no-renderer-crash.html [ Crash ] crbug.com/591099 editing/execCommand/apply-style-command-crash.html [ Crash ] @@ -4248,19 +3414,11 @@ crbug.com/591099 editing/execCommand/clipboard-access-with-userGesture.html [ Failure ] crbug.com/591099 editing/execCommand/clipboard-access.html [ Failure ] crbug.com/591099 editing/execCommand/convert-style-elements-to-spans.html [ Failure ] -crbug.com/591099 editing/execCommand/crash-breaking-blockquote-with-list.html [ Crash ] -crbug.com/591099 editing/execCommand/crash-indenting-list-item.html [ Crash ] crbug.com/591099 editing/execCommand/crash-inserting-list.html [ Crash Pass ] crbug.com/591099 editing/execCommand/crash-line-break-after-outdent.html [ Crash ] crbug.com/591099 editing/execCommand/crash-object-cloning.html [ Crash ] -crbug.com/591099 editing/execCommand/crash-on-enter-in-contentEditable-list.html [ Crash ] -crbug.com/591099 editing/execCommand/crash-replacing-list-by-list.html [ Crash ] -crbug.com/591099 editing/execCommand/create-list-from-range-selection.html [ Crash ] -crbug.com/591099 editing/execCommand/create-list-with-hr.html [ Crash ] -crbug.com/591099 editing/execCommand/createLink.html [ Crash ] crbug.com/591099 editing/execCommand/default-paragraph-separator.html [ Failure ] crbug.com/591099 editing/execCommand/default-parameters.html [ Failure ] -crbug.com/591099 editing/execCommand/delete-image-in-anchor.html [ Crash ] crbug.com/591099 editing/execCommand/delete-selection-has-style.html [ Failure ] crbug.com/591099 editing/execCommand/editing-nontext-node-crash.xhtml [ Crash ] crbug.com/591099 editing/execCommand/empty-span-removal.html [ Failure ] @@ -4275,12 +3433,10 @@ crbug.com/591099 editing/execCommand/format-block-from-range-selection.html [ Failure ] crbug.com/591099 editing/execCommand/format-block-multiple-paragraphs-in-pre.html [ Crash ] crbug.com/591099 editing/execCommand/format-block-multiple-paragraphs.html [ Crash ] -crbug.com/591099 editing/execCommand/format-block-table.html [ Crash ] crbug.com/591099 editing/execCommand/format-block-with-trailing-br.html [ Failure ] crbug.com/591099 editing/execCommand/format_block/no-visible-content.html [ Failure ] crbug.com/591099 editing/execCommand/format_block/unrooted-selection-start-crash.html [ Crash ] crbug.com/591099 editing/execCommand/forward-delete-no-scroll.html [ Failure ] -crbug.com/591099 editing/execCommand/indent-block-in-list.html [ Crash ] crbug.com/591099 editing/execCommand/indent-crash-by-top-load-event.html [ Crash ] crbug.com/591099 editing/execCommand/indent-div-inside-list.html [ Failure ] crbug.com/591099 editing/execCommand/indent-empty-root.html [ Failure ] @@ -4289,43 +3445,25 @@ crbug.com/591099 editing/execCommand/indent-images-3.html [ Crash ] crbug.com/591099 editing/execCommand/indent-images.html [ Crash ] crbug.com/591099 editing/execCommand/indent-inline-box-crash.html [ Crash Pass ] -crbug.com/591099 editing/execCommand/indent-list-item-with-children.html [ Crash ] -crbug.com/591099 editing/execCommand/indent-list-item.html [ Crash ] crbug.com/591099 editing/execCommand/indent-nested-blockquotes-crash.html [ Crash Pass ] crbug.com/591099 editing/execCommand/indent-nested-blockquotes.html [ Failure ] crbug.com/591099 editing/execCommand/indent-nested-div.html [ Failure ] crbug.com/591099 editing/execCommand/indent-paragraphs.html [ Crash ] crbug.com/591099 editing/execCommand/indent-partial-table.html [ Failure ] -crbug.com/591099 editing/execCommand/indent-pre-list.html [ Crash ] crbug.com/591099 editing/execCommand/indent-right-after-table.html [ Failure ] crbug.com/591099 editing/execCommand/indent-second-paragraph-in-blockquote.html [ Failure ] -crbug.com/591099 editing/execCommand/indent-selection.html [ Crash ] -crbug.com/591099 editing/execCommand/indent-with-first-child-crash.html [ Crash ] -crbug.com/591099 editing/execCommand/indent/indent_nested_lists.html [ Crash ] -crbug.com/591099 editing/execCommand/indent/indent_with_style.html [ Crash ] crbug.com/591099 editing/execCommand/infinite-recursion-computeRectForRepaint.html [ Crash ] crbug.com/591099 editing/execCommand/inline-style-after-indentoutdent.html [ Crash Failure ] crbug.com/591099 editing/execCommand/insert-image-changing-visibility-crash.html [ Crash ] crbug.com/591099 editing/execCommand/insert-image-on-top-of-directional-text.html [ Failure ] crbug.com/591099 editing/execCommand/insert-image-with-selecting-document.html [ Crash ] crbug.com/591099 editing/execCommand/insert-line-break-no-scroll.html [ Failure ] -crbug.com/591099 editing/execCommand/insert-list-and-stitch.html [ Crash ] -crbug.com/591099 editing/execCommand/insert-list-and-strikethrough.html [ Crash ] crbug.com/591099 editing/execCommand/insert-list-br-with-child-crash.html [ Crash ] crbug.com/591099 editing/execCommand/insert-list-empty-div.html [ Failure ] crbug.com/591099 editing/execCommand/insert-list-in-noneditable-list-parent.html [ Failure ] -crbug.com/591099 editing/execCommand/insert-list-infinite-loop.html [ Crash ] -crbug.com/591099 editing/execCommand/insert-list-infinite-loop2.html [ Crash ] -crbug.com/591099 editing/execCommand/insert-list-into-list-crash.html [ Crash ] -crbug.com/591099 editing/execCommand/insert-list-items-inside-another-list.html [ Crash ] -crbug.com/591099 editing/execCommand/insert-list-nested-with-orphaned.html [ Crash ] -crbug.com/591099 editing/execCommand/insert-list-with-id.html [ Crash ] -crbug.com/591099 editing/execCommand/insert-list-with-noneditable-content.html [ Crash Failure ] crbug.com/591099 editing/execCommand/insert-list-with-progress-crash.html [ Crash ] -crbug.com/591099 editing/execCommand/insert-list-xml.xhtml [ Crash ] crbug.com/591099 editing/execCommand/insert-lists-inside-another-list.html [ Crash Failure ] crbug.com/591099 editing/execCommand/insert-ordered-list-crash.html [ Crash ] -crbug.com/591099 editing/execCommand/insert-ordered-list-crash2.html [ Crash ] crbug.com/591099 editing/execCommand/insert-ordered-list.html [ Crash ] crbug.com/591099 editing/execCommand/insert-paragraph-into-table.html [ Crash ] crbug.com/591099 editing/execCommand/insert-remove-block-list-inside-presentational-inline.html [ Crash Failure ] @@ -4334,17 +3472,12 @@ crbug.com/591099 editing/execCommand/insertHTML.html [ Failure ] crbug.com/591099 editing/execCommand/insertImage-src.html [ Failure ] crbug.com/591099 editing/execCommand/insertImage.html [ Failure ] -crbug.com/591099 editing/execCommand/insert_list/insert_list_in_link.html [ Crash ] crbug.com/591099 editing/execCommand/insert_list/insert_list_in_summary_crash.html [ Crash Pass ] -crbug.com/591099 editing/execCommand/insert_list/insert_list_ul_li_to_ol.html [ Crash ] -crbug.com/591099 editing/execCommand/insert_list_at_end_of_paragraph.html [ Crash ] crbug.com/591099 editing/execCommand/inserting-ordered-list-crash.html [ Crash ] crbug.com/591099 editing/execCommand/italic-crash-by-iframe-load.html [ Crash ] crbug.com/591099 editing/execCommand/italicizeByCharacter.html [ Crash Failure ] crbug.com/591099 editing/execCommand/justify-right-crash.html [ Crash ] crbug.com/591099 editing/execCommand/justify.html [ Failure Timeout ] -crbug.com/591099 editing/execCommand/list-wrapping-image-crash.html [ Crash ] -crbug.com/591099 editing/execCommand/listify-output-crash.html [ Crash ] crbug.com/591099 editing/execCommand/merge-text-decoration-with-typing-style.html [ Failure ] crbug.com/591099 editing/execCommand/modifyForeColorByCharacter.html [ Crash Failure ] crbug.com/591099 editing/execCommand/move-selection-back-line-rtl.html [ Failure ] @@ -4357,7 +3490,6 @@ crbug.com/591099 editing/execCommand/outdent-multiparagraph-list.html [ Crash Failure ] crbug.com/591099 editing/execCommand/outdent-regular-blockquote.html [ Crash Failure ] crbug.com/591099 editing/execCommand/outdent-selection.html [ Crash Failure ] -crbug.com/591099 editing/execCommand/outdent/outdent_nested_lists.html [ Crash ] crbug.com/591099 editing/execCommand/overtype-support.html [ Failure ] crbug.com/591099 editing/execCommand/paste-1.html [ Crash ] crbug.com/591099 editing/execCommand/paste-2.html [ Crash ] @@ -4367,10 +3499,8 @@ crbug.com/591099 editing/execCommand/query-format-block.html [ Crash ] crbug.com/591099 editing/execCommand/query-text-alignment.html [ Failure Timeout ] crbug.com/591099 editing/execCommand/query-text-decoration-with-typing-style.html [ Failure ] -crbug.com/591099 editing/execCommand/queryCommandState-01.html [ Crash ] crbug.com/591099 editing/execCommand/queryCommandState-02.html [ Crash Failure ] crbug.com/591099 editing/execCommand/queryCommandState-03.html [ Crash ] -crbug.com/591099 editing/execCommand/queryCommandState-list.html [ Crash ] crbug.com/591099 editing/execCommand/queryCommandValue-unsupported-commands.html [ Failure ] crbug.com/591099 editing/execCommand/remove-format-background-color.html [ Failure ] crbug.com/591099 editing/execCommand/remove-format-elements.html [ Crash ] @@ -4378,47 +3508,33 @@ crbug.com/591099 editing/execCommand/remove-format-image.html [ Crash ] crbug.com/591099 editing/execCommand/remove-format-multiple-elements-mac.html [ Failure ] crbug.com/591099 editing/execCommand/remove-format-multiple-elements-win.html [ Failure Timeout ] -crbug.com/591099 editing/execCommand/remove-format-orphaned-list-item.html [ Crash ] crbug.com/591099 editing/execCommand/remove-format-textdecoration-in-iframe.html [ Crash ] -crbug.com/591099 editing/execCommand/remove-list-1.html [ Crash ] -crbug.com/591099 editing/execCommand/remove-list-from-multi-list-items.html [ Crash ] crbug.com/591099 editing/execCommand/remove-list-from-range-selection.html [ Crash Failure ] -crbug.com/591099 editing/execCommand/remove-list-item-1.html [ Crash ] -crbug.com/591099 editing/execCommand/remove-list-items.html [ Crash ] crbug.com/591099 editing/execCommand/remove_format_and_extract_contents.html [ Failure ] crbug.com/591099 editing/execCommand/replace-crossing-mailblockquote-crash.html [ Crash ] crbug.com/591099 editing/execCommand/replaceSelectorCommand-crash.html [ Crash ] crbug.com/591099 editing/execCommand/selectAll-including-marquee-crash.html [ Crash ] crbug.com/591099 editing/execCommand/selection-after-insert-list.html [ Crash Failure ] -crbug.com/591099 editing/execCommand/selection-after-switch-type-of-listitem.html [ Crash ] crbug.com/591099 editing/execCommand/strikethrough-uses-strike-tag.html [ Failure ] crbug.com/591099 editing/execCommand/strikethroughSelection.html [ Crash Failure ] crbug.com/591099 editing/execCommand/style-with-css.html [ Failure ] -crbug.com/591099 editing/execCommand/switch-list-type-with-inner-list.html [ Crash ] -crbug.com/591099 editing/execCommand/switch-list-type-with-orphaned-li.html [ Crash ] -crbug.com/591099 editing/execCommand/switch-list-type.html [ Crash ] crbug.com/591099 editing/execCommand/switch-multiple-list-items-crash.html [ Crash ] -crbug.com/591099 editing/execCommand/switch-multiple-list-items.html [ Crash ] crbug.com/591099 editing/execCommand/toggle-compound-styles.html [ Crash ] crbug.com/591099 editing/execCommand/toggle-link-mac.html [ Failure ] crbug.com/591099 editing/execCommand/toggle-link-win.html [ Failure ] -crbug.com/591099 editing/execCommand/toggle-list-uneditable-crash.html [ Crash ] crbug.com/591099 editing/execCommand/toggle-style-2.html [ Failure ] crbug.com/591099 editing/execCommand/toggle-style-3.html [ Failure ] crbug.com/591099 editing/execCommand/toggle-styles.html [ Failure ] crbug.com/591099 editing/execCommand/toggle-text-decorations.html [ Failure ] crbug.com/591099 editing/execCommand/toggle-unlink-mac.html [ Failure ] crbug.com/591099 editing/execCommand/toggle-unlink-win.html [ Failure ] -crbug.com/591099 editing/execCommand/transpose_with_unfocused_selection.html [ Crash ] crbug.com/591099 editing/execCommand/unlink.html [ Crash ] -crbug.com/591099 editing/execCommand/unlistify-uneditable-parent-crash.html [ Crash ] crbug.com/591099 editing/execCommand/use-css.html [ Failure ] crbug.com/591099 editing/execCommand/window-open-insert-list-crash.html [ Crash ] crbug.com/591099 editing/input/caret-at-the-edge-of-contenteditable.html [ Failure ] crbug.com/591099 editing/input/caret-at-the-edge-of-input.html [ Crash Failure ] crbug.com/591099 editing/input/caret-read-only-after-editable.html [ Failure ] crbug.com/591099 editing/input/change-style-with-key-binding.html [ Failure ] -crbug.com/591099 editing/input/ctrl-up-down.html [ Crash ] crbug.com/591099 editing/input/div-first-child-rule-input.html [ Crash ] crbug.com/591099 editing/input/div-first-child-rule-textarea.html [ Crash ] crbug.com/591099 editing/input/drag_in_unselectable.html [ Crash ] @@ -4441,19 +3557,15 @@ crbug.com/591099 editing/input/reveal-caret-of-transformed-input-scrollable-parent.html [ Crash ] crbug.com/591099 editing/input/reveal-caret-of-transformed-multiline-input.html [ Crash Pass ] crbug.com/591099 editing/input/reveal-contenteditable-on-input-vertically.html [ Failure Pass ] -crbug.com/591099 editing/input/reveal-edit-on-input-vertically.html [ Failure ] crbug.com/591099 editing/input/reveal-edit-on-paste-vertically.html [ Failure Pass ] crbug.com/591099 editing/input/reveal-password.html [ Crash Failure ] -crbug.com/591099 editing/input/reveal-selection-having-stored-scroll-position.html [ Failure ] crbug.com/591099 editing/input/scroll-viewport-page-up-down.html [ Failure ] -crbug.com/591099 editing/input/scroll-with-tab-to-input-regression.html [ Crash ] crbug.com/591099 editing/input/search-field-crash-in-designmode.html [ Failure ] crbug.com/591099 editing/input/set-value-on-input-and-delete.html [ Crash Failure ] crbug.com/591099 editing/input/set-value-on-input-and-forward-delete.html [ Crash Failure ] crbug.com/591099 editing/input/set-value-on-input-and-type-input.html [ Crash Failure ] crbug.com/591099 editing/input/set-value-on-input-and-type-textarea.html [ Crash Failure ] crbug.com/591099 editing/input/setting-input-value-cancel-ime-composition.html [ Crash ] -crbug.com/591099 editing/input/style-change-during-input.html [ Failure ] crbug.com/591099 editing/input/textarea-white-space-normal-trailing-space.html [ Crash Failure Pass ] crbug.com/591099 editing/input/textcontrol-doubleclick-at-end.html [ Crash Failure ] crbug.com/591099 editing/inserting/4278698.html [ Failure ] @@ -4482,7 +3594,6 @@ crbug.com/591099 editing/inserting/6609479.html [ Failure ] crbug.com/591099 editing/inserting/6703873.html [ Failure ] crbug.com/591099 editing/inserting/break-blockquote-after-delete.html [ Failure ] -crbug.com/591099 editing/inserting/break-out-of-nested-lists.html [ Crash ] crbug.com/591099 editing/inserting/caret-position.html [ Crash Failure ] crbug.com/591099 editing/inserting/delete-insignificant-text-crash.html [ Failure ] crbug.com/591099 editing/inserting/editable-inline-element.html [ Failure ] @@ -4518,7 +3629,6 @@ crbug.com/591099 editing/inserting/insert-text-into-font.html [ Failure ] crbug.com/591099 editing/inserting/insert-text-with-newlines.html [ Crash ] crbug.com/591099 editing/inserting/insert-thai-characters-001.html [ Failure ] -crbug.com/591099 editing/inserting/insert-without-enclosing-block.html [ Crash ] crbug.com/591099 editing/inserting/insert-without-inheriting-style.html [ Crash ] crbug.com/591099 editing/inserting/insert_after_delete.html [ Failure ] crbug.com/591099 editing/inserting/insert_div_with_style.html [ Failure ] @@ -4539,7 +3649,6 @@ crbug.com/591099 editing/inserting/return-key-middle-of-span.html [ Failure ] crbug.com/591099 editing/inserting/return-with-object-element.html [ Failure Pass ] crbug.com/591099 editing/inserting/typing-at-end-of-line.html [ Failure Pass ] -crbug.com/591099 editing/inserting/typing-tab-designmode-forms.html [ Failure ] crbug.com/591099 editing/inserting/typing.html [ Crash ] crbug.com/591099 editing/pasteboard/4242293.html [ Failure ] crbug.com/591099 editing/pasteboard/4631972.html [ Failure ] @@ -4563,7 +3672,6 @@ crbug.com/591099 editing/pasteboard/5780697-2.html [ Failure ] crbug.com/591099 editing/pasteboard/6018653.html [ Failure ] crbug.com/591099 editing/pasteboard/7955.html [ Failure ] -crbug.com/591099 editing/pasteboard/avoid-copying-body-with-background.html [ Crash ] crbug.com/591099 editing/pasteboard/bad-placeholder.html [ Failure ] crbug.com/591099 editing/pasteboard/block-wrappers-necessary.html [ Failure ] crbug.com/591099 editing/pasteboard/can-read-in-copy-and-cut-events.html [ Failure ] @@ -4578,7 +3686,6 @@ crbug.com/591099 editing/pasteboard/copy-in-password-field.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/copy-null-characters.html [ Crash ] crbug.com/591099 editing/pasteboard/copy-paste-bidi.html [ Crash Failure ] -crbug.com/591099 editing/pasteboard/copy-paste-first-line-in-textarea.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/copy-paste-float.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/copy-paste-pre-line-content.html [ Failure ] crbug.com/591099 editing/pasteboard/copy-paste-ruby-text-with-block.html [ Crash ] @@ -4630,7 +3737,6 @@ crbug.com/591099 editing/pasteboard/input-with-display-none-div.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/input-with-visibility-hidden.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/insert-font-weight.html [ Failure ] -crbug.com/591099 editing/pasteboard/insert-font-weight2.html [ Crash ] crbug.com/591099 editing/pasteboard/merge-start-blockquote.html [ Failure ] crbug.com/591099 editing/pasteboard/merge-start-list.html [ Failure ] crbug.com/591099 editing/pasteboard/mixed_editability.html [ Crash ] @@ -4652,7 +3758,6 @@ crbug.com/591099 editing/pasteboard/paste-line-endings-003.html [ Failure ] crbug.com/591099 editing/pasteboard/paste-line-endings-004.html [ Failure ] crbug.com/591099 editing/pasteboard/paste-line-endings-005.html [ Failure ] -crbug.com/591099 editing/pasteboard/paste-list-001.html [ Crash ] crbug.com/591099 editing/pasteboard/paste-list-002.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/paste-list-003.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/paste-list-004.html [ Crash Failure ] @@ -4664,9 +3769,6 @@ crbug.com/591099 editing/pasteboard/paste-plaintext-nowrap.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/paste-plaintext-user-select-none.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/paste-pre-001.html [ Crash Failure Pass ] -crbug.com/591099 editing/pasteboard/paste-pre-002.html [ Crash ] -crbug.com/591099 editing/pasteboard/paste-removing-iframe.html [ Timeout ] -crbug.com/591099 editing/pasteboard/paste-text-012.html [ Crash ] crbug.com/591099 editing/pasteboard/paste-text-016.html [ Failure ] crbug.com/591099 editing/pasteboard/paste-text-at-tabspan-003.html [ Failure ] crbug.com/591099 editing/pasteboard/paste-text-events.html [ Crash Failure ] @@ -4689,7 +3791,6 @@ crbug.com/591099 editing/pasteboard/smart-drag-drop.html [ Failure ] crbug.com/591099 editing/pasteboard/smart-paste-003-trailing-whitespace.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/smart-paste-008.html [ Failure ] -crbug.com/591099 editing/pasteboard/smart-paste-in-text-control.html [ Crash Pass ] crbug.com/591099 editing/pasteboard/smart_paste.html [ Failure ] crbug.com/591099 editing/pasteboard/styled-element-markup.html [ Failure ] crbug.com/591099 editing/pasteboard/subframe-dragndrop-1.html [ Crash ] @@ -4708,7 +3809,6 @@ crbug.com/591099 editing/selection/5136696.html [ Crash Pass ] crbug.com/591099 editing/selection/5195166-1.html [ Crash Failure ] crbug.com/591099 editing/selection/5195166-2.html [ Failure ] -crbug.com/591099 editing/selection/5209984.html [ Crash ] crbug.com/591099 editing/selection/5213963.html [ Crash Failure ] crbug.com/591099 editing/selection/5232159.html [ Failure ] crbug.com/591099 editing/selection/5241148.html [ Failure ] @@ -4723,8 +3823,6 @@ crbug.com/591099 editing/selection/anchor-focus2.html [ Crash Failure ] crbug.com/591099 editing/selection/anchor-focus3.html [ Crash Failure ] crbug.com/591099 editing/selection/applystyle-to-inline-in-block.html [ Failure ] -crbug.com/591099 editing/selection/arrow_key_with_unfocused_selection.html [ Crash ] -crbug.com/591099 editing/selection/block-cursor-overtype-mode-end-of-line.html [ Failure ] crbug.com/591099 editing/selection/block-cursor-overtype-mode-rtl.html [ Failure ] crbug.com/591099 editing/selection/block-cursor-overtype-mode.html [ Failure ] crbug.com/591099 editing/selection/caret-after-keypress.html [ Failure ] @@ -4756,8 +3854,6 @@ crbug.com/591099 editing/selection/click-in-focusable-link-should-not-clear-selection.html [ Failure ] crbug.com/591099 editing/selection/click-in-margins-inside-editable-div.html [ Failure ] crbug.com/591099 editing/selection/click-in-padding-with-multiple-line-boxes.html [ Failure ] -crbug.com/591099 editing/selection/click-on-anonymous-content-crash.html [ Crash ] -crbug.com/591099 editing/selection/click-on-block-image.html [ Crash ] crbug.com/591099 editing/selection/click-outside-editable-div.html [ Failure ] crbug.com/591099 editing/selection/click-start-of-line.html [ Failure ] crbug.com/591099 editing/selection/collapse-null.html [ Failure ] @@ -4767,7 +3863,6 @@ crbug.com/591099 editing/selection/collapseto_in_text_fields.html [ Crash ] crbug.com/591099 editing/selection/commit-pending-selection-crash.html [ Crash ] crbug.com/591099 editing/selection/contains-boundaries.html [ Failure ] -crbug.com/591099 editing/selection/containsNode.html [ Crash ] crbug.com/591099 editing/selection/contenteditable-click-inside.html [ Failure ] crbug.com/591099 editing/selection/context-menu-on-text.html [ Failure ] crbug.com/591099 editing/selection/context-menu-text-selection.html [ Failure ] @@ -4776,7 +3871,6 @@ crbug.com/591099 editing/selection/css-pseudo-element-hang.html [ Failure ] crbug.com/591099 editing/selection/css-pseudo-element.html [ Failure ] crbug.com/591099 editing/selection/delete-word-granularity-text-control.html [ Crash Failure ] -crbug.com/591099 editing/selection/deleteFromDocument-crash.html [ Crash Failure ] crbug.com/591099 editing/selection/deleteFromDocument-scoped-dispatch-event-crash.html [ Crash ] crbug.com/591099 editing/selection/deletefromdocument-shadow-leak.html [ Crash ] crbug.com/591099 editing/selection/designmode-no-caret.html [ Failure ] @@ -4806,7 +3900,6 @@ crbug.com/591099 editing/selection/dump-as-markup.html [ Crash ] crbug.com/591099 editing/selection/editable-div-clear-on-keydown.html [ Failure ] crbug.com/591099 editing/selection/editable-links.html [ Failure ] -crbug.com/591099 editing/selection/empty-cell-right-click.html [ Crash ] crbug.com/591099 editing/selection/expanding-selections.html [ Failure ] crbug.com/591099 editing/selection/expanding-selections2.html [ Failure ] crbug.com/591099 editing/selection/extend-after-mouse-selection.html [ Failure ] @@ -4823,7 +3916,6 @@ crbug.com/591099 editing/selection/extend-selection-home-end.html [ Timeout ] crbug.com/591099 editing/selection/extend-selection-word.html [ Timeout ] crbug.com/591099 editing/selection/extend-to-trailing-spaces.html [ Failure ] -crbug.com/591099 editing/selection/extend.html [ Crash ] crbug.com/591099 editing/selection/extend/go-out-of-readonly-textarea.html [ Crash Pass ] crbug.com/591099 editing/selection/find-in-text-control.html [ Crash Failure ] crbug.com/591099 editing/selection/first-letter-selection-crash.html [ Crash ] @@ -4841,7 +3933,6 @@ crbug.com/591099 editing/selection/iframe-select-animation.html [ Crash ] crbug.com/591099 editing/selection/inactive-selection.html [ Crash Failure ] crbug.com/591099 editing/selection/inline-closest-leaf-child.html [ Failure ] -crbug.com/591099 editing/selection/insert-list-over-uneditable-in-contenteditable.html [ Crash ] crbug.com/591099 editing/selection/internal-caret-rect.html [ Failure ] crbug.com/591099 editing/selection/keep-selection-after-set-focus.html [ Failure ] crbug.com/591099 editing/selection/keydown-without-selection-crash.html [ Crash ] @@ -4850,7 +3941,6 @@ crbug.com/591099 editing/selection/line-wrap-1.html [ Failure ] crbug.com/591099 editing/selection/line-wrap-2.html [ Failure ] crbug.com/591099 editing/selection/linux_selection_color.html [ Failure ] -crbug.com/591099 editing/selection/mark_with_unfocused_selection.html [ Crash ] crbug.com/591099 editing/selection/mixed-editability-1.html [ Failure ] crbug.com/591099 editing/selection/mixed-editability-10.html [ Crash Failure ] crbug.com/591099 editing/selection/mixed-editability-11.html [ Failure ] @@ -4866,9 +3956,7 @@ crbug.com/591099 editing/selection/modify-by-lineboundary-in-inline-editable-contexts.html [ Failure ] crbug.com/591099 editing/selection/modify-up-on-rtl-wrapping-text.html [ Failure ] crbug.com/591099 editing/selection/modify_extend/extend_by_character.html [ Crash ] -crbug.com/591099 editing/selection/modify_extend/extend_by_word_002.html [ Crash ] crbug.com/591099 editing/selection/modify_extend/extend_selection_enclosing_block.html [ Crash ] -crbug.com/591099 editing/selection/modify_extend/extend_with_unfocused_selection.html [ Crash ] crbug.com/591099 editing/selection/modify_move/move-by-character-001.html [ Failure ] crbug.com/591099 editing/selection/modify_move/move-by-character-002.html [ Crash ] crbug.com/591099 editing/selection/modify_move/move-by-character-003.html [ Failure Pass ] @@ -4895,7 +3983,6 @@ crbug.com/591099 editing/selection/mouse/click-user-select-all-textarea.html [ Crash ] crbug.com/591099 editing/selection/mouse/drag-user-select-all-contenteditable.html [ Failure ] crbug.com/591099 editing/selection/mouse/drag-user-select-all-textarea.html [ Crash ] -crbug.com/591099 editing/selection/mouse/mouse_down_to_focus.html [ Crash ] crbug.com/591099 editing/selection/move-3875618-fix.html [ Failure ] crbug.com/591099 editing/selection/move-3875641-fix.html [ Failure ] crbug.com/591099 editing/selection/move-backwords-by-word-001.html [ Failure ] @@ -4921,7 +4008,6 @@ crbug.com/591099 editing/selection/programmatic-selection-on-mac-is-directionless.html [ Crash Timeout ] crbug.com/591099 editing/selection/range-between-block-and-inline.html [ Failure ] crbug.com/591099 editing/selection/rangeCount.html [ Failure ] -crbug.com/591099 editing/selection/readonly-disabled-hittest.html [ Crash Pass ] crbug.com/591099 editing/selection/readonly-disabled-text-selection.html [ Crash Failure ] crbug.com/591099 editing/selection/regional-indicators.html [ Failure ] crbug.com/591099 editing/selection/removeAllRanges.html [ Failure ] @@ -4964,7 +4050,6 @@ crbug.com/591099 editing/selection/select_all/select_all_readonly_textarea.html [ Crash ] crbug.com/591099 editing/selection/select_all/select_all_textarea.html [ Crash ] crbug.com/591099 editing/selection/select_all/select_all_user_select_none.html [ Failure ] -crbug.com/591099 editing/selection/select_all/select_all_with_unfocused_selection.html [ Crash ] crbug.com/591099 editing/selection/selection-3748164-fix.html [ Failure ] crbug.com/591099 editing/selection/selection-actions.html [ Failure ] crbug.com/591099 editing/selection/selection-background.html [ Failure ] @@ -4993,7 +4078,6 @@ crbug.com/591099 editing/selection/triple-click-in-pre.html [ Failure ] crbug.com/591099 editing/selection/undo-crash.html [ Crash ] crbug.com/591099 editing/selection/user-select-all-parsing.html [ Failure ] -crbug.com/591099 editing/selection/user-select-none-in-editable.html [ Crash ] crbug.com/591099 editing/selection/user-select/user-select-all.html [ Crash ] crbug.com/591099 editing/selection/vertical-lr-ltr-extend-line-backward-br.html [ Failure Pass ] crbug.com/591099 editing/selection/vertical-lr-ltr-extend-line-forward-br.html [ Failure Pass ] @@ -5031,10 +4115,7 @@ crbug.com/591099 editing/spelling/cold_mode_type_idle.html [ Failure ] crbug.com/591099 editing/spelling/context_click_on_selected_misspelling.html [ Timeout ] crbug.com/591099 editing/spelling/context_click_select_misspelling.html [ Crash Failure ] -crbug.com/591099 editing/spelling/copy-paste-crash.html [ Failure ] crbug.com/591099 editing/spelling/grammar-paste.html [ Failure ] -crbug.com/591099 editing/spelling/mark-empty-crash.html [ Crash ] -crbug.com/591099 editing/spelling/marker_preservation_with_focus_change.html [ Failure ] crbug.com/591099 editing/spelling/mixed_paste.html [ Failure ] crbug.com/591099 editing/spelling/no_marker_in_blurred_input.html [ Crash ] crbug.com/591099 editing/spelling/spellcheck-async-mutation.html [ Failure ] @@ -5049,8 +4130,7 @@ crbug.com/591099 editing/spelling/spellcheck-queue.html [ Failure ] crbug.com/591099 editing/spelling/spellcheck-remove-markers.html [ Crash ] crbug.com/591099 editing/spelling/spellcheck-sequencenum.html [ Crash ] -crbug.com/591099 editing/spelling/spellcheck_test.html [ Failure ] -crbug.com/591099 editing/spelling/spelling-attribute-change.html [ Failure ] +crbug.com/591099 editing/spelling/spellcheck_test.html [ Crash Failure ] crbug.com/591099 editing/spelling/spelling-backward.html [ Failure ] crbug.com/591099 editing/spelling/spelling-changed-text.html [ Failure ] crbug.com/591099 editing/spelling/spelling-huge-text.html [ Timeout ] @@ -5070,9 +4150,6 @@ crbug.com/591099 editing/style/block-style-001.html [ Failure ] crbug.com/591099 editing/style/block-style-002.html [ Failure ] crbug.com/591099 editing/style/block-style-003.html [ Failure ] -crbug.com/591099 editing/style/block-style-004.html [ Crash ] -crbug.com/591099 editing/style/block-style-005.html [ Crash ] -crbug.com/591099 editing/style/block-style-006.html [ Crash ] crbug.com/591099 editing/style/block-styles-007.html [ Failure ] crbug.com/591099 editing/style/designmode.html [ Failure ] crbug.com/591099 editing/style/fix-range-from-root-editable-crash.html [ Crash ] @@ -5095,24 +4172,17 @@ crbug.com/591099 editing/style/push-down-implicit-styles-mac.html [ Failure ] crbug.com/591099 editing/style/push-down-inline-styles.html [ Failure ] crbug.com/591099 editing/style/query-typing-style.html [ Failure ] -crbug.com/591099 editing/style/redundant-background-color.html [ Crash ] crbug.com/591099 editing/style/remove-nested-inline-styles.html [ Failure ] crbug.com/591099 editing/style/remove-underline-across-paragraph-in-bold.html [ Crash Failure ] crbug.com/591099 editing/style/remove-underline-across-paragraph.html [ Crash Failure ] -crbug.com/591099 editing/style/remove-underline-after-paragraph-in-bold.html [ Crash ] -crbug.com/591099 editing/style/remove-underline-after-paragraph.html [ Crash ] -crbug.com/591099 editing/style/remove-underline-in-bold.html [ Crash ] -crbug.com/591099 editing/style/remove-underline.html [ Crash ] crbug.com/591099 editing/style/stylewithcss-without-selection.html [ Failure ] crbug.com/591099 editing/style/table-selection.html [ Failure ] crbug.com/591099 editing/style/temporary-span-crash.html [ Failure ] crbug.com/591099 editing/style/text-decoration-state.html [ Failure ] -crbug.com/591099 editing/style/text-indent.html [ Failure ] crbug.com/591099 editing/style/textdecoration-outside-of-rooteditable.html [ Crash Failure ] crbug.com/591099 editing/style/textdecoration-outside-of-unsplittable-element.html [ Crash Failure ] crbug.com/591099 editing/style/typing_style.html [ Crash ] crbug.com/591099 editing/style/unbold-in-bold.html [ Crash ] -crbug.com/591099 editing/style/underline.html [ Crash ] crbug.com/591099 editing/surrounding-text/surrounding-text-detached-no-crash.html [ Failure ] crbug.com/591099 editing/surrounding-text/surrounding-text.html [ Crash ] crbug.com/591099 editing/text-iterator/basic-iteration-shadowdom.html [ Failure ] @@ -5125,7 +4195,6 @@ crbug.com/591099 editing/text-iterator/range-to-from-location-and-length.html [ Failure ] crbug.com/591099 editing/text-iterator/selection-to-string-with-auto-fill.html [ Crash ] crbug.com/591099 editing/text-iterator/thai-cursor-movement.html [ Crash Failure ] -crbug.com/591099 editing/undo/4059423-1.html [ Crash ] crbug.com/591099 editing/undo/5658727.html [ Failure ] crbug.com/591099 editing/undo/5738768.html [ Failure ] crbug.com/591099 editing/undo/audio-in-undo-stack-crash.html [ Crash ] @@ -5137,7 +4206,6 @@ crbug.com/591099 editing/undo/undo-after-setting-value.html [ Crash Failure ] crbug.com/591099 editing/undo/undo-deleteWord.html [ Failure Pass ] crbug.com/591099 editing/undo/undo-iframe-location-change.html [ Crash ] -crbug.com/591099 editing/undo/undo-indent.html [ Crash ] crbug.com/591099 editing/undo/undo-set-selection-crash.html [ Failure ] crbug.com/591099 editing/undo/undo-smart-delete-reversed-selection.html [ Failure Pass ] crbug.com/591099 editing/unsupported-content/list-delete-001.html [ Crash Failure ] @@ -5158,21 +4226,10 @@ crbug.com/591099 external/wpt/2dcontext/drawing-paths-to-the-canvas/drawFocusIfNeeded_003.html [ Crash ] crbug.com/591099 external/wpt/2dcontext/drawing-paths-to-the-canvas/drawFocusIfNeeded_004.html [ Crash ] crbug.com/591099 external/wpt/2dcontext/drawing-paths-to-the-canvas/drawFocusIfNeeded_005.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.basic.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.globalalpha.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.globalcomposite.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.negative.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.transform.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.globalalpha.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.globalcomposite.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.1.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.2.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.4.html [ Crash ] crbug.com/591099 external/wpt/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.emptysrc.html [ Crash ] crbug.com/591099 external/wpt/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.removedsrc.html [ Crash ] crbug.com/591099 external/wpt/2dcontext/hit-regions/hitregions-members-exist.html [ Crash ] crbug.com/591099 external/wpt/2dcontext/line-styles/setLineDash.html [ Crash ] -crbug.com/591099 external/wpt/2dcontext/path-objects/2d.path.lineTo.nonfinite.details.html [ Crash ] crbug.com/591099 external/wpt/2dcontext/transformations/canvas_transformations_reset_001.html [ Failure Pass ] crbug.com/591099 external/wpt/FileAPI/idlharness.html [ Crash ] crbug.com/591099 external/wpt/FileAPI/url/blob-url-in-sandboxed-iframe.html [ Crash ] @@ -5201,11 +4258,8 @@ crbug.com/591099 external/wpt/XMLHttpRequest/open-url-multi-window-3.htm [ Crash ] crbug.com/591099 external/wpt/XMLHttpRequest/open-url-multi-window-4.htm [ Crash ] crbug.com/591099 external/wpt/XMLHttpRequest/send-authentication-prompt-2-manual.htm [ Crash Failure ] -crbug.com/591099 external/wpt/XMLHttpRequest/send-authentication-prompt-manual.htm [ Crash ] crbug.com/591099 external/wpt/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts.html [ Crash ] crbug.com/591099 external/wpt/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader.html [ Crash ] -crbug.com/591099 external/wpt/battery-status/battery-discharging-manual.https.html [ Crash ] -crbug.com/591099 external/wpt/battery-status/battery-full-manual.https.html [ Crash ] crbug.com/591099 external/wpt/content-security-policy/child-src/child-src-about-blank-allowed-by-default.sub.html [ Crash ] crbug.com/591099 external/wpt/content-security-policy/child-src/child-src-about-blank-allowed-by-scheme.sub.html [ Crash ] crbug.com/591099 external/wpt/content-security-policy/child-src/child-src-allowed.sub.html [ Crash ] @@ -5257,7 +4311,6 @@ crbug.com/591099 external/wpt/content-security-policy/svg/svg-policy-with-resource.html [ Crash ] 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-005b.xht [ Crash ] crbug.com/591099 external/wpt/css/CSS2/abspos/abspos-containing-block-initial-007.xht [ Failure Pass ] 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 ] @@ -5268,7 +4321,6 @@ crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-006.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-007.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/clear-applies-to-015.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-applies-to-009.xht [ Crash ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-non-replaced-width-002.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-non-replaced-width-004.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-height-001.xht [ Failure ] @@ -5319,9 +4371,7 @@ crbug.com/591099 external/wpt/css/CSS2/floats/floats-placement-vertical-001b.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/floats/floats-placement-vertical-001c.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-001-left-overflow.xht [ Crash Failure ] -crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-001-right-table.xht [ Crash ] crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-002-left-overflow.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-002-left-table.xht [ Crash ] crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-003-left-overflow.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-003-right-overflow.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-004.xht [ Failure ] @@ -5371,10 +4421,8 @@ crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-103.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-104.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-129.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-applies-to-003.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-bleed-001.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/linebox/line-height-bleed-002.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/linebox/vertical-align-092.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/linebox/vertical-align-121.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/linebox/vertical-align-baseline-004a.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/linebox/vertical-align-baseline-005a.xht [ Failure ] @@ -5394,7 +4442,6 @@ crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-margins-002a.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-margins-002b.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-percents-001.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-remove-005.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-non-replaced-height-005.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-non-replaced-width-007.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-replaced-width-006.xht [ Failure ] @@ -5457,7 +4504,6 @@ crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-024.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-026.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-027.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-028.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-035.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-037.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-038.xht [ Crash Failure Pass ] @@ -5480,7 +4526,6 @@ crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-percentage-002.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-percentage-003.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-width-106.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-width-applies-to-004.xht [ Crash ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-001.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-002.xht [ Crash Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-004.xht [ Failure Pass ] @@ -5503,7 +4548,6 @@ crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-049.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-056.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-057.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-058.xht [ Crash ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-059.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-060.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-067.xht [ Failure Pass ] @@ -5523,11 +4567,8 @@ crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-102.xht [ Crash Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-104.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-height-106.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-width-001.xht [ Crash ] -crbug.com/591099 external/wpt/css/CSS2/normal-flow/min-width-060.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/root-box-001.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/table-in-inline-001.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/normal-flow/width-067.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-width-015.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-width-019.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-non-replaced-width-020.xht [ Failure Pass ] @@ -5570,11 +4611,8 @@ crbug.com/591099 external/wpt/css/CSS2/positioning/abspos-containing-block-001.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/positioning/abspos-containing-block-002.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/positioning/abspos-containing-block-007.xht [ Crash Failure ] -crbug.com/591099 external/wpt/css/CSS2/positioning/bottom-043.xht [ Crash ] -crbug.com/591099 external/wpt/css/CSS2/positioning/bottom-076.xht [ Crash ] crbug.com/591099 external/wpt/css/CSS2/positioning/left-offset-003.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/positioning/left-offset-percentage-001.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/positioning/position-relative-010.xht [ Crash ] crbug.com/591099 external/wpt/css/CSS2/positioning/position-relative-027.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/positioning/position-relative-028.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/positioning/position-relative-029.xht [ Failure ] @@ -5583,8 +4621,6 @@ crbug.com/591099 external/wpt/css/CSS2/positioning/positioning-float-002.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/positioning/relpos-calcs-004.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/positioning/relpos-calcs-005.xht [ Crash Failure ] -crbug.com/591099 external/wpt/css/CSS2/positioning/right-077.xht [ Crash ] -crbug.com/591099 external/wpt/css/CSS2/positioning/right-applies-to-013.xht [ Crash ] crbug.com/591099 external/wpt/css/CSS2/positioning/top-019.xht [ Crash Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/positioning/top-020.xht [ Crash Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/positioning/top-031.xht [ Crash Failure ] @@ -5607,18 +4643,14 @@ crbug.com/591099 external/wpt/css/css-display-3/display-contents-dynamic-multicol-001-inline.html [ Failure ] crbug.com/591099 external/wpt/css/css-display-3/display-contents-dynamic-multicol-001-none.html [ Failure ] crbug.com/591099 external/wpt/css/css-display-3/display-contents-dynamic-table-001-inline.html [ Crash ] -crbug.com/591099 external/wpt/css/css-display-3/display-contents-dynamic-table-002-inline.html [ Crash ] -crbug.com/591099 external/wpt/css/css-display-3/display-contents-dynamic-table-002-none.html [ Crash ] crbug.com/591099 external/wpt/css/css-display-3/display-contents-multicol-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-display-3/display-contents-replaced-001.html [ Crash Pass ] -crbug.com/591099 external/wpt/css/css-display-3/display-contents-table-002.html [ Crash ] crbug.com/591099 external/wpt/css/css-display-3/display-flow-root-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/Flexible-order.html [ Crash Failure Pass ] crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-reverse-wrap-reverse.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-reverse-wrap.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-wrap-reverse.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-wrap.html [ Failure ] -crbug.com/591099 external/wpt/css/css-flexbox-1/flex-box-wrap.html [ Crash ] crbug.com/591099 external/wpt/css/css-flexbox-1/flex-container-margin.html [ Crash Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/flex-direction-with-element-insert.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/flex-direction.html [ Failure ] @@ -5626,7 +4658,6 @@ crbug.com/591099 external/wpt/css/css-flexbox-1/flex-lines/multi-line-wrap-reverse-row-reverse.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/flex-lines/multi-line-wrap-with-column-reverse.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/flex-lines/multi-line-wrap-with-row-reverse.html [ Crash Failure ] -crbug.com/591099 external/wpt/css/css-flexbox-1/flex-vertical-align-effect.html [ Crash Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox-flex-direction-column-reverse.htm [ Failure Pass ] crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox-flex-direction-column.htm [ Failure Pass ] crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox-flex-direction-default.htm [ Failure Pass ] @@ -5642,7 +4673,6 @@ crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_columns-flexitems.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_direction-column-reverse.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_direction-column.html [ Crash Failure ] -crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_display.html [ Crash ] crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_fbfc.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_fbfc2.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_first-line.html [ Failure ] @@ -5867,8 +4897,6 @@ crbug.com/591099 external/wpt/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-016.html [ Crash ] crbug.com/591099 external/wpt/css/css-grid-1/grid-definition/fr-unit-with-percentage.html [ Failure ] crbug.com/591099 external/wpt/css/css-grid-1/grid-definition/fr-unit.html [ Failure ] -crbug.com/591099 external/wpt/css/css-grid-1/grid-definition/grid-layout-repeat-notation.html [ Crash ] -crbug.com/591099 external/wpt/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.html [ Failure ] crbug.com/591099 external/wpt/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.html [ Failure ] crbug.com/591099 external/wpt/css/css-grid-1/grid-items/grid-item-containing-block-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-grid-1/grid-items/grid-item-containing-block-002.html [ Failure ] @@ -5888,10 +4916,8 @@ crbug.com/591099 external/wpt/css/css-rhythm-1/line-height-step-basic-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-rhythm-1/line-height-step-boundary-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-rhythm-1/line-height-step-dynamic-001.html [ Failure ] -crbug.com/591099 external/wpt/css/css-rhythm-1/line-height-step-ruby-001.html [ Crash Failure ] crbug.com/591099 external/wpt/css/css-rhythm-1/line-height-step-valign-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-rhythm-1/line-height-step-writing-mode-vrl-001.html [ Failure ] -crbug.com/591099 external/wpt/css/css-rhythm-1/line-height-step-writing-mode-vrl-ruby-001.html [ Crash Pass ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-box/shape-outside-box-002.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-box/shape-outside-box-003.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes-1/shape-outside/shape-box/shape-outside-box-004.html [ Failure ] @@ -5992,9 +5018,6 @@ 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/i18n/css3-text-line-break-jazh-039.html [ Failure ] -crbug.com/591099 external/wpt/css/css-text-3/i18n/css3-text-line-break-jazh-114.html [ Failure ] -crbug.com/591099 external/wpt/css/css-text-3/i18n/css3-text-line-break-opclns-102.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 ] @@ -6005,13 +5028,13 @@ crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-position-above-right-002.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-position-below-left-002.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-position-below-right-002.xht [ Crash Failure ] -crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-002.html [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-006.html [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-007.html [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-008.html [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-010.html [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-012.html [ Crash ] -crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-021.html [ Crash ] +crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-002.html [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-006.html [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-007.html [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-008.html [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-010.html [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-012.html [ Crash Failure ] +crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-021.html [ Crash Failure ] crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-filled-001.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-open-001.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-shape-001.xht [ Crash Failure ] @@ -6227,7 +5250,6 @@ crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vlr-015.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vlr-016.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vlr-020.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vlr-022.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vlr-023.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vrl-002.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vrl-005.xht [ Failure ] @@ -6236,7 +5258,6 @@ crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vrl-012.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vrl-013.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vrl-019.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vrl-021.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vrl-024.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/block-flow-direction-vrl-026.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/block-override-004.html [ Failure ] @@ -6317,14 +5338,11 @@ crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vlr-010.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vlr-013.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vlr-014.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vlr-020.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-002.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-005.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-006.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-011.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-012.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-017.xht [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-019.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/margin-collapse-vlr-011.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/margin-collapse-vrl-010.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/margin-vlr-003.xht [ Failure ] @@ -6342,11 +5360,9 @@ crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001g.html [ Crash ] crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001h.html [ Crash ] crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001i.html [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001j.html [ Crash ] crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001k.html [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001l.html [ Crash Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001m.html [ Crash Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001n.html [ Crash ] crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001o.html [ Crash Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001p.html [ Crash Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001q.html [ Failure ] @@ -6426,23 +5442,6 @@ crbug.com/591099 external/wpt/css/css-writing-modes-3/text-indent-vrl-014.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/text-indent-vrl-016.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-016.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001a.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001b.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001c.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001d.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001e.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001f.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001g.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001h.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001i.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001j.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001k.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001l.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001m.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001n.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001o.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001p.html [ Crash ] -crbug.com/591099 external/wpt/css/css-writing-modes-3/text-orientation-script-001q.html [ Crash ] crbug.com/591099 external/wpt/css/css-writing-modes-3/vertical-alignment-002.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/vertical-alignment-004.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/vertical-alignment-005.xht [ Failure ] @@ -6464,9 +5463,7 @@ crbug.com/591099 external/wpt/css/css-writing-modes-3/writing-mode-vertical-rl-002.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes-3/writing-mode-vertical-rl-003.htm [ Failure ] crbug.com/591099 external/wpt/css/geometry-1/interfaces.html [ Timeout ] -crbug.com/591099 external/wpt/css/motion-1/offset-path-string.html [ Crash ] crbug.com/591099 external/wpt/css/selectors4/focus-display-none-001.html [ Crash ] -crbug.com/591099 external/wpt/css/selectors4/focus-within-006.html [ Crash Failure ] crbug.com/591099 external/wpt/css/selectors4/focus-within-009.html [ Crash ] crbug.com/591099 external/wpt/css/selectors4/focus-within-display-none-001.html [ Crash ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001a.xhtml [ Crash Failure ] @@ -6507,23 +5504,19 @@ crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-whitespace-handling-001a.xhtml [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-whitespace-handling-001b.xhtml [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-whitespace-handling-002.xhtml [ Failure Pass ] -crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/variables/variable-declaration-02.html [ Crash ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/variables/variable-declaration-15.html [ Failure Pass ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/variables/variable-declaration-16.html [ Failure Pass ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/variables/variable-declaration-17.html [ Failure Pass ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/variables/variable-declaration-18.html [ Failure Pass ] -crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/variables/variable-reference-25.html [ Crash ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/dynamic-offset-vrl-002.html [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/dynamic-offset-vrl-rtl-002.html [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-break-inside-001.html [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-001.html [ Crash Failure ] -crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-002.html [ Crash ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-003.html [ Crash Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-004.html [ Crash Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-005.html [ Crash Failure Pass ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-005a.html [ Crash Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-006.html [ Crash Failure ] -crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-006a.html [ Crash ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-007.html [ Crash Failure Pass ] crbug.com/591099 external/wpt/cssom-view/HTMLBody-ScrollArea_quirksmode.html [ Failure ] crbug.com/591099 external/wpt/cssom-view/elementFromPoint.html [ Crash ] @@ -6589,28 +5582,27 @@ crbug.com/591099 external/wpt/editing/other/restoration.html [ Crash ] crbug.com/591099 external/wpt/editing/run/backcolor.html [ Pass Timeout ] crbug.com/591099 external/wpt/editing/run/bold.html [ Pass Timeout ] -crbug.com/591099 external/wpt/editing/run/delete-list-items-in-table-cell.html [ Crash ] crbug.com/591099 external/wpt/editing/run/fontname.html [ Pass Timeout ] crbug.com/591099 external/wpt/editing/run/fontsize.html [ Pass Timeout ] crbug.com/591099 external/wpt/editing/run/forecolor.html [ Pass Timeout ] crbug.com/591099 external/wpt/editing/run/formatblock.html [ Crash Failure Timeout ] crbug.com/591099 external/wpt/editing/run/forwarddelete.html [ Crash ] crbug.com/591099 external/wpt/editing/run/hilitecolor.html [ Pass Timeout ] -crbug.com/591099 external/wpt/editing/run/indent.html [ Crash ] +crbug.com/591099 external/wpt/editing/run/indent.html [ Crash Timeout ] crbug.com/591099 external/wpt/editing/run/inserthorizontalrule.html [ Crash ] crbug.com/591099 external/wpt/editing/run/inserthtml.html [ Crash Failure Timeout ] crbug.com/591099 external/wpt/editing/run/insertimage.html [ Crash ] -crbug.com/591099 external/wpt/editing/run/insertlinebreak.html [ Crash Failure ] -crbug.com/591099 external/wpt/editing/run/insertorderedlist.html [ Crash ] +crbug.com/591099 external/wpt/editing/run/insertlinebreak.html [ Crash Failure Timeout ] +crbug.com/591099 external/wpt/editing/run/insertorderedlist.html [ Crash Timeout ] crbug.com/591099 external/wpt/editing/run/insertparagraph.html [ Crash Failure Timeout ] crbug.com/591099 external/wpt/editing/run/inserttext.html [ Failure Timeout ] -crbug.com/591099 external/wpt/editing/run/insertunorderedlist.html [ Crash ] +crbug.com/591099 external/wpt/editing/run/insertunorderedlist.html [ Crash Timeout ] crbug.com/591099 external/wpt/editing/run/italic.html [ Pass Timeout ] crbug.com/591099 external/wpt/editing/run/justifyfull.html [ Pass Timeout ] crbug.com/591099 external/wpt/editing/run/justifyleft.html [ Pass Timeout ] crbug.com/591099 external/wpt/editing/run/justifyright.html [ Pass Timeout ] crbug.com/591099 external/wpt/editing/run/multitest.html [ Crash ] -crbug.com/591099 external/wpt/editing/run/outdent.html [ Crash ] +crbug.com/591099 external/wpt/editing/run/outdent.html [ Crash Timeout ] crbug.com/591099 external/wpt/editing/run/removeformat.html [ Crash ] crbug.com/591099 external/wpt/editing/run/strikethrough.html [ Pass Timeout ] crbug.com/591099 external/wpt/editing/run/subscript.html [ Pass Timeout ] @@ -6651,12 +5643,6 @@ crbug.com/591099 external/wpt/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html [ Crash ] crbug.com/591099 external/wpt/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html [ Crash ] crbug.com/591099 external/wpt/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html [ Crash ] -crbug.com/591099 external/wpt/html/browsers/the-window-object/the-windowproxy-object/test-window-proxy-locationbar-manual.html [ Crash ] -crbug.com/591099 external/wpt/html/browsers/the-window-object/the-windowproxy-object/test-window-proxy-menubar-manual.html [ Crash ] -crbug.com/591099 external/wpt/html/browsers/the-window-object/the-windowproxy-object/test-window-proxy-personalbar-manual.html [ Crash ] -crbug.com/591099 external/wpt/html/browsers/the-window-object/the-windowproxy-object/test-window-proxy-scrollbars-manual.html [ Crash ] -crbug.com/591099 external/wpt/html/browsers/the-window-object/the-windowproxy-object/test-window-proxy-statusbar-manual.html [ Crash ] -crbug.com/591099 external/wpt/html/browsers/the-window-object/the-windowproxy-object/test-window-proxy-toolbar-manual.html [ Crash ] crbug.com/591099 external/wpt/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-cross-origin-domain.sub.html [ Crash ] crbug.com/591099 external/wpt/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-cross-origin.sub.html [ Crash ] crbug.com/591099 external/wpt/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-goes-cross-origin-domain.sub.html [ Crash ] @@ -6691,8 +5677,6 @@ crbug.com/591099 external/wpt/html/dom/dynamic-markup-insertion/document-write/iframe_009.html [ Crash ] crbug.com/591099 external/wpt/html/dom/dynamic-markup-insertion/document-write/iframe_010.html [ Crash ] crbug.com/591099 external/wpt/html/dom/dynamic-markup-insertion/document-write/script_013.html [ Crash ] -crbug.com/591099 external/wpt/html/dom/elements/global-attributes/classlist-nonstring.html [ Crash ] -crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-contained-bdi-L.html [ Failure ] crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-contained-textarea-L.html [ Crash Pass ] crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-contained-textarea-R.html [ Crash Pass ] crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-input-EN-L.html [ Crash Pass ] @@ -6714,17 +5698,6 @@ crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-input-script-N-R.html [ Crash Failure Pass ] crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-input-script-R.html [ Crash Pass ] crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-textarea-N-EN.html [ Crash Pass ] -crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-textarea-N-between-Rs.html [ Crash Failure ] -crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-textarea-mixed.html [ Crash Failure ] -crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-textarea-script-N-EN.html [ Crash Failure ] -crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-textarea-script-N-between-Rs.html [ Crash Failure ] -crbug.com/591099 external/wpt/html/dom/elements/global-attributes/dir_auto-textarea-script-mixed.html [ Crash Failure ] -crbug.com/591099 external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002c.html [ Failure ] -crbug.com/591099 external/wpt/html/editing/dnd/events/relatedTarget-attribute-manual.html [ Crash ] -crbug.com/591099 external/wpt/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-007.html [ Crash ] -crbug.com/591099 external/wpt/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-008.html [ Crash ] -crbug.com/591099 external/wpt/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html [ Crash ] -crbug.com/591099 external/wpt/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html [ Crash ] crbug.com/591099 external/wpt/html/editing/editing-0/spelling-and-grammar-checking/user-interaction-editing-spellcheck.html [ Crash Pass ] crbug.com/591099 external/wpt/html/editing/focus/focus-management/focus-event-targets-simple.html [ Crash ] crbug.com/591099 external/wpt/html/editing/focus/processing-model/focus-fixup-rule-one-no-dialogs.html [ Crash ] @@ -6739,37 +5712,8 @@ crbug.com/591099 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html [ Crash ] crbug.com/591099 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Crash ] crbug.com/591099 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Crash ] -crbug.com/591099 external/wpt/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-loop.html [ Crash ] -crbug.com/591099 external/wpt/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-scrollamount.html [ Crash ] -crbug.com/591099 external/wpt/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-scrolldelay.html [ Crash ] crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/flow-content-0/dialog.html [ Failure ] crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/flow-content-0/div-align.html [ Failure ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/li-type-supported.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-alpha.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-roman.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-alpha.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-roman.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-supported.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-unsupported-circle.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-unsupported-disc.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-unsupported-invalid.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-unsupported-lower-alpha.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-unsupported-lower-roman.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-unsupported-none.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-unsupported-round.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-unsupported-square.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-unsupported-upper-alpha.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ol-type-unsupported-upper-roman.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ul-type-supported.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ul-type-unsupported-decimal.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ul-type-unsupported-invalid.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ul-type-unsupported-lower-alpha.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ul-type-unsupported-lower-roman.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ul-type-unsupported-upper-alpha.html [ Crash ] -crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/lists/ul-type-unsupported-upper-roman.html [ Crash ] crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/tables/table-cell-width-s.html [ Failure ] crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/tables/table-cell-width.html [ Failure ] crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html [ Failure ] @@ -6800,7 +5744,6 @@ crbug.com/591099 external/wpt/html/semantics/embedded-content/the-iframe-element/change_parentage.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe-load-event.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe-synchronously-discard.html [ Crash ] -crbug.com/591099 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_javascript_url_01.htm [ Crash ] crbug.com/591099 external/wpt/html/semantics/embedded-content/the-iframe-element/same_origin_parentage.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/embedded-content/the-img-element/current-pixel-density/error.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/embedded-content/the-img-element/delay-load-event.html [ Crash ] @@ -6825,8 +5768,6 @@ crbug.com/591099 external/wpt/html/semantics/forms/constraints/form-validation-validity-tooLong.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/forms/constraints/form-validation-validity-tooShort.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/forms/constraints/form-validation-validity-typeMismatch.html [ Crash Pass ] -crbug.com/591099 external/wpt/html/semantics/forms/constraints/form-validation-validity-valid.html [ Crash ] -crbug.com/591099 external/wpt/html/semantics/forms/constraints/form-validation-validity-valueMissing.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/forms/constraints/form-validation-willValidate.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/forms/form-control-infrastructure/form.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/forms/form-control-infrastructure/form_attribute.html [ Crash ] @@ -6841,10 +5782,8 @@ crbug.com/591099 external/wpt/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/forms/the-button-element/button-activate.html [ Crash ] -crbug.com/591099 external/wpt/html/semantics/forms/the-button-element/button-click-submits.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/forms/the-button-element/button-menu-historical.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/forms/the-fieldset-element/disabled-001.html [ Crash ] -crbug.com/591099 external/wpt/html/semantics/forms/the-fieldset-element/disabled-002.xhtml [ Crash ] crbug.com/591099 external/wpt/html/semantics/forms/the-form-element/form-action-submission-with-base-url.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/forms/the-form-element/form-action-submission.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/forms/the-form-element/form-autocomplete.html [ Crash ] @@ -6871,7 +5810,6 @@ crbug.com/591099 external/wpt/html/semantics/forms/the-textarea-element/wrap-reflect-1a.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/forms/the-textarea-element/wrap-reflect-1b.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-li-element/grouping-li-reftest-001.html [ Crash Failure Pass ] -crbug.com/591099 external/wpt/html/semantics/grouping-content/the-li-element/grouping-li-reftest-002.html [ Crash Failure ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu.html [ Crash Failure ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed.html [ Crash Pass ] @@ -6882,26 +5820,15 @@ crbug.com/591099 external/wpt/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-li-element/grouping-li.html [ Crash ] -crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001.html [ Crash Failure ] -crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-001.html [ Crash Failure ] -crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-002.html [ Crash Failure ] -crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-001.html [ Crash Failure ] -crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-002.html [ Crash Failure ] -crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003.html [ Crash Failure ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/grouping-ol.html [ Crash ] -crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/ol.start-reflection-1.html [ Crash ] -crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/ol.start-reflection-2.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/reversed-1a.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/reversed-1b.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/reversed-1c.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/reversed-1d.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/reversed-1e.html [ Crash Pass ] crbug.com/591099 external/wpt/html/semantics/grouping-content/the-ol-element/reversed-2.html [ Crash Pass ] -crbug.com/591099 external/wpt/html/semantics/interactive-elements/the-details-element/details.html [ Crash ] -crbug.com/591099 external/wpt/html/semantics/interactive-elements/the-details-element/toggleEvent.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/interactive-elements/the-dialog-element/centering.html [ Failure ] crbug.com/591099 external/wpt/html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html [ Crash ] -crbug.com/591099 external/wpt/html/semantics/interactive-elements/the-summary-element/activation-behavior.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/scripting-1/the-script-element/script-noembed-noframes-iframe.xhtml [ Crash ] crbug.com/591099 external/wpt/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.html [ Crash ] @@ -6962,7 +5889,7 @@ crbug.com/591099 external/wpt/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html [ Crash ] crbug.com/591099 external/wpt/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-3.html [ Crash ] crbug.com/591099 external/wpt/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html [ Crash ] -crbug.com/591099 external/wpt/http/basic-auth-cache-test.html [ Crash ] +crbug.com/591099 external/wpt/http/basic-auth-cache-test.html [ Crash Timeout ] crbug.com/591099 external/wpt/innerText/getter.html [ Crash ] crbug.com/591099 external/wpt/input-events/input-events-typing-data-manual.html [ Crash ] crbug.com/591099 external/wpt/media-source/mediasource-activesourcebuffers.html [ Crash ] @@ -7036,11 +5963,6 @@ crbug.com/591099 external/wpt/mixed-content/optionally-blockable/meta-csp/cross-origin-http/img-tag/top-level/no-redirect/opt-in-blocks.https.html [ Crash Pass ] crbug.com/591099 external/wpt/mixed-content/optionally-blockable/meta-csp/same-host-http/img-tag/top-level/no-redirect/opt-in-blocks.https.html [ Crash Pass ] crbug.com/591099 external/wpt/navigation-timing/nav2_test_frame_removed.html [ Crash ] -crbug.com/591099 external/wpt/navigation-timing/nav2_test_navigation_type_reload.html [ Crash ] -crbug.com/591099 external/wpt/navigation-timing/nav2_test_unloadEvents_previous_document_cross_origin.sub.html [ Crash ] -crbug.com/591099 external/wpt/navigation-timing/nav2_test_unloadEvents_with_cross_origin_redirects.html [ Crash ] -crbug.com/591099 external/wpt/navigation-timing/nav2_test_unloadEvents_with_previous_document.html [ Crash ] -crbug.com/591099 external/wpt/navigation-timing/test_navigation_type_reload.html [ Crash ] crbug.com/591099 external/wpt/navigation-timing/test_performance_attributes_exist_in_object.html [ Crash ] crbug.com/591099 external/wpt/page-visibility/test_child_document.html [ Crash ] crbug.com/591099 external/wpt/payment-request/allowpaymentrequest/active-document-cross-origin.https.sub.html [ Crash ] @@ -7048,33 +5970,18 @@ crbug.com/591099 external/wpt/payment-request/allowpaymentrequest/basic.https.html [ Crash ] crbug.com/591099 external/wpt/payment-request/payment-request-id.https.html [ Crash ] crbug.com/591099 external/wpt/payment-request/payment-request-in-iframe.html [ Crash ] -crbug.com/591099 external/wpt/pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual.html [ Crash ] -crbug.com/591099 external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html [ Crash ] crbug.com/591099 external/wpt/pointerevents/pointerevent_attributes_hoverable_pointers-manual.html [ Crash Pass Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_attributes_nohover_pointers-manual.html [ Crash Pass Timeout ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_boundary_events_in_capturing-manual.html [ Crash ] crbug.com/591099 external/wpt/pointerevents/pointerevent_capture_mouse-manual.html [ Crash Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_capture_suppressing_mouse-manual.html [ Crash ] crbug.com/591099 external/wpt/pointerevents/pointerevent_change-touch-action-onpointerdown_touch-manual.html [ Pass Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_click_during_capture-manual.html [ Crash Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_disabled_form_control-manual.html [ Timeout ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_element_haspointercapture-manual.html [ Crash ] crbug.com/591099 external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_node-manual.html [ Crash Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_lostpointercapture_is_first-manual.html [ Crash Timeout ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_pointercancel_touch-manual.html [ Timeout ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_pointerleave_after_pointercancel_touch-manual.html [ Timeout ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_pointerleave_descendant_over-manual.html [ Crash ] crbug.com/591099 external/wpt/pointerevents/pointerevent_pointerleave_pen-manual.html [ Failure Timeout ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_pointermove_on_chorded_mouse_button-manual.html [ Crash ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_pointerout_received_once-manual.html [ Crash ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_releasepointercapture_onpointercancel_touch-manual.html [ Crash ] crbug.com/591099 external/wpt/pointerevents/pointerevent_releasepointercapture_onpointerup_mouse-manual.html [ Crash ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_sequence_at_implicit_release_on_click-manual.html [ Crash ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_sequence_at_implicit_release_on_drag-manual.html [ Crash ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_setpointercapture_inactive_button_mouse-manual.html [ Crash ] crbug.com/591099 external/wpt/pointerevents/pointerevent_setpointercapture_relatedtarget-manual.html [ Crash Timeout ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_suppress_compat_events_on_click-manual.html [ Crash ] -crbug.com/591099 external/wpt/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse-manual.html [ Crash ] crbug.com/591099 external/wpt/pointerevents/pointerevent_touch-action-auto-css_touch-manual.html [ Crash Pass Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_touch-action-button-test_touch-manual.html [ Crash Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch-manual.html [ Crash Timeout ] @@ -7097,12 +6004,7 @@ crbug.com/591099 external/wpt/pointerevents/pointerevent_touch-action-span-test_touch-manual.html [ Crash Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_touch-action-svg-test_touch-manual.html [ Crash Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_touch-action-table-test_touch-manual.html [ Crash Timeout ] -crbug.com/591099 external/wpt/pointerevents/pointerlock/pointerevent_movementxy-manual.html [ Crash ] -crbug.com/591099 external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html [ Crash ] -crbug.com/591099 external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html [ Crash ] crbug.com/591099 external/wpt/quirks-mode/blocks-ignore-line-height.html [ Failure ] -crbug.com/591099 external/wpt/quirks-mode/hashless-hex-color.html [ Timeout ] -crbug.com/591099 external/wpt/quirks-mode/historical/list-item-bullet-size.html [ Crash ] crbug.com/591099 external/wpt/quirks-mode/line-height-calculation.html [ Crash ] crbug.com/591099 external/wpt/quirks-mode/table-cell-width-calculation.html [ Crash ] crbug.com/591099 external/wpt/referrer-policy/css-integration/external-import-stylesheet.html [ Crash ] @@ -7844,7 +6746,6 @@ crbug.com/591099 external/wpt/service-workers/service-worker/navigation-redirect.https.html [ Crash ] crbug.com/591099 external/wpt/service-workers/service-worker/ready.https.html [ Crash ] crbug.com/591099 external/wpt/service-workers/service-worker/register-closed-window.https.html [ Crash ] -crbug.com/591099 external/wpt/service-workers/service-worker/register-link-element.https.html [ Timeout ] crbug.com/591099 external/wpt/service-workers/service-worker/register-link-header.https.html [ Crash ] crbug.com/591099 external/wpt/service-workers/service-worker/register-same-scope-different-script-url.https.html [ Crash ] crbug.com/591099 external/wpt/service-workers/service-worker/registration-iframe.https.html [ Crash ] @@ -7867,13 +6768,10 @@ crbug.com/591099 external/wpt/uievents/mouse/mouseevent_move_button-manual.html [ Crash Timeout ] crbug.com/591099 external/wpt/uievents/order-of-events/focus-events/focus-automated-blink-webkit.html [ Crash ] crbug.com/591099 external/wpt/uievents/order-of-events/focus-events/focus-manual.html [ Crash Failure Timeout ] -crbug.com/591099 external/wpt/uievents/order-of-events/mouse-events/mouseover-out-manual.html [ Crash ] crbug.com/591099 external/wpt/url/a-element-xhtml.xhtml [ Pass Timeout ] crbug.com/591099 external/wpt/url/a-element.html [ Pass Timeout ] crbug.com/591099 external/wpt/url/url-constructor.html [ Pass Timeout ] crbug.com/591099 external/wpt/url/url-setters.html [ Pass Timeout ] -crbug.com/591099 external/wpt/user-timing/measure.html [ Crash ] -crbug.com/591099 external/wpt/user-timing/measure_navigation_timing.html [ Crash ] crbug.com/591099 external/wpt/viewport/viewport-unscaled-scale-iframe.html [ Crash ] crbug.com/591099 external/wpt/viewport/viewport-unscaled-scroll-iframe.html [ Crash ] crbug.com/591099 external/wpt/viewport/viewport-unscaled-size-iframe.html [ Crash ] @@ -7908,20 +6806,20 @@ crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/bidi/bidi_ruby.html [ Crash Failure ] crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely.html [ Crash Failure ] crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely_all_cues_have_same_timestamp.html [ Crash Failure ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_properties.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_shorthand.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_properties.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_shorthand.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_properties.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_shorthand.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_properties.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_shorthand.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_properties.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_shorthand.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_properties.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_shorthand.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_properties.html [ Crash ] -crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_shorthand.html [ Crash ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_properties.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_shorthand.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_properties.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_shorthand.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_properties.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_shorthand.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_properties.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_shorthand.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_properties.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_shorthand.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_properties.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_shorthand.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_properties.html [ Crash Failure ] +crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_shorthand.html [ Crash Failure ] crbug.com/591099 external/wpt/x-frame-options/deny.sub.html [ Crash ] crbug.com/591099 external/wpt/x-frame-options/invalid.sub.html [ Crash ] crbug.com/591099 external/wpt/x-frame-options/multiple.sub.html [ Crash ] @@ -8024,7 +6922,6 @@ 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 ] crbug.com/591099 fast/block/available-width-changes-vertical.html [ Failure ] -crbug.com/591099 fast/block/basic/003.html [ Crash ] crbug.com/591099 fast/block/basic/006.html [ Failure Pass ] crbug.com/591099 fast/block/basic/011.html [ Failure ] crbug.com/591099 fast/block/basic/013.html [ Failure ] @@ -8040,7 +6937,6 @@ crbug.com/591099 fast/block/basic/text-indent-rtl.html [ Failure ] crbug.com/591099 fast/block/basic/truncation-rtl.html [ Failure ] crbug.com/591099 fast/block/basic/white-space-pre-wraps.html [ Failure ] -crbug.com/591099 fast/block/block-add-child-crash.html [ Crash ] 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 ] crbug.com/591099 fast/block/block-remove-child-delete-line-box-crash.html [ Failure ] @@ -8094,7 +6990,7 @@ 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/br-with-clear.html [ Failure ] +crbug.com/591099 fast/block/float/br-with-clear.html [ Failure Pass ] 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 ] @@ -8116,7 +7012,6 @@ crbug.com/591099 fast/block/float/float-inserted-into-clean-line.html [ Failure ] crbug.com/591099 fast/block/float/float-list-changed-before-layout-crash.html [ Crash ] crbug.com/591099 fast/block/float/float-not-removed-crash2.html [ Crash Pass ] -crbug.com/591099 fast/block/float/float-not-removed-from-first-letter.html [ Crash ] crbug.com/591099 fast/block/float/float-not-removed-from-next-sibling-crash.html [ Failure ] crbug.com/591099 fast/block/float/float-not-removed-from-next-sibling.html [ Failure Pass ] crbug.com/591099 fast/block/float/float-not-removed-from-next-sibling2.html [ Failure Pass ] @@ -8170,7 +7065,6 @@ crbug.com/591099 fast/block/float/overhanging-float-remove-from-absolute-position-block.html [ Failure Pass ] crbug.com/591099 fast/block/float/overhanging-float-remove-from-fixed-position-block.html [ Failure ] crbug.com/591099 fast/block/float/overhanging-float-remove-from-fixed-position-block2.html [ Failure ] -crbug.com/591099 fast/block/float/overhanging-tall-block.html [ Failure ] crbug.com/591099 fast/block/float/overlapping-floats-paint-hittest-order-1.html [ Failure ] crbug.com/591099 fast/block/float/overlapping-floats-paint-hittest-order-2.html [ Failure ] crbug.com/591099 fast/block/float/override-property-float.html [ Failure ] @@ -8234,7 +7128,6 @@ crbug.com/591099 fast/block/margin-collapse/self-collapsing-block-creates-block-formatting-context.html [ Failure ] crbug.com/591099 fast/block/margin-collapse/self-collapsing-block-discards-margin.html [ Failure ] crbug.com/591099 fast/block/margin-collapse/self-collapsing-block-getting-layout-set.html [ Crash Pass ] -crbug.com/591099 fast/block/margin-collapse/self-collapsing-block-with-float-children.html [ Crash ] crbug.com/591099 fast/block/margin-collapse/self-collapsing-block-with-float-descendants.html [ Failure ] crbug.com/591099 fast/block/margin-collapse/self-collapsing-block-with-overflow-hidden-and-float-child.html [ Failure ] crbug.com/591099 fast/block/margin-collapse/self-collapsing-cols-creates-block-formatting-context.html [ Failure ] @@ -8247,23 +7140,16 @@ crbug.com/591099 fast/block/marginbox-width-exceeds-container-width.html [ Failure ] crbug.com/591099 fast/block/margins-perpendicular-containing-block.html [ Failure ] crbug.com/591099 fast/block/marquee-width-shrinks-to-fit-in-fixed-size-container.html [ Crash Failure ] -crbug.com/591099 fast/block/merge-anonymous-block-remove-child-crash.html [ Crash ] -crbug.com/591099 fast/block/merge-anonymous-block-remove-child-crash2.html [ Crash ] crbug.com/591099 fast/block/min-max-height-percent-height-child.html [ Failure ] crbug.com/591099 fast/block/multicol-moves-children-with-nested-floats-2.html [ Failure ] crbug.com/591099 fast/block/multicol-moves-children-with-nested-floats.html [ Failure ] -crbug.com/591099 fast/block/multicol-paint-invalidation-assert.html [ Failure ] crbug.com/591099 fast/block/over-constrained-auto-margin.html [ Failure ] crbug.com/591099 fast/block/percent-top-parent-respects-min-height.html [ Failure ] crbug.com/591099 fast/block/percent-top-respects-max-height.html [ Failure ] crbug.com/591099 fast/block/percent-top-respects-min-height.html [ Failure ] crbug.com/591099 fast/block/positioned-movement-assert.html [ Failure ] -crbug.com/591099 fast/block/positioning/019.html [ Crash ] -crbug.com/591099 fast/block/positioning/026.html [ Crash ] -crbug.com/591099 fast/block/positioning/037.html [ Crash ] crbug.com/591099 fast/block/positioning/047.html [ Failure ] crbug.com/591099 fast/block/positioning/051.html [ Failure ] -crbug.com/591099 fast/block/positioning/052.html [ Crash ] crbug.com/591099 fast/block/positioning/055.html [ Failure ] crbug.com/591099 fast/block/positioning/056.html [ Failure ] crbug.com/591099 fast/block/positioning/058.html [ Crash Failure ] @@ -8309,7 +7195,6 @@ crbug.com/591099 fast/block/positioning/auto/vertical-rl/005.html [ Failure ] crbug.com/591099 fast/block/positioning/auto/vertical-rl/006.html [ Failure ] crbug.com/591099 fast/block/positioning/auto/vertical-rl/007.html [ Failure ] -crbug.com/591099 fast/block/positioning/border-change-relayout-test.html [ Crash ] crbug.com/591099 fast/block/positioning/child-of-absolute-with-auto-height.html [ Failure ] crbug.com/591099 fast/block/positioning/child-of-fixed-pos-after-movement.html [ Failure ] crbug.com/591099 fast/block/positioning/complex-percentage-height.html [ Crash Failure ] @@ -8447,7 +7332,6 @@ crbug.com/591099 fast/borders/border-image-source.html [ Failure ] crbug.com/591099 fast/borders/border-image-width-negative.html [ Failure ] crbug.com/591099 fast/borders/border-inner-bleed.html [ Failure ] -crbug.com/591099 fast/borders/border-mixed-alpha2.html [ Crash ] crbug.com/591099 fast/borders/border-radius-child.html [ Failure ] crbug.com/591099 fast/borders/border-radius-complex-inner-double.html [ Failure ] crbug.com/591099 fast/borders/border-radius-complex-inner.html [ Failure ] @@ -8458,14 +7342,9 @@ crbug.com/591099 fast/borders/border-radius-huge-assert.html [ Failure ] crbug.com/591099 fast/borders/border-radius-inset-outset.html [ Failure ] crbug.com/591099 fast/borders/border-radius-mask-canvas-all.html [ Crash Failure ] -crbug.com/591099 fast/borders/border-radius-mask-canvas-border.html [ Crash Failure ] -crbug.com/591099 fast/borders/border-radius-mask-canvas-padding.html [ Crash Failure ] crbug.com/591099 fast/borders/border-radius-mask-canvas-with-mask.html [ Crash Failure ] crbug.com/591099 fast/borders/border-radius-mask-canvas-with-shadow.html [ Crash Failure ] -crbug.com/591099 fast/borders/border-radius-mask-canvas.html [ Crash Failure ] -crbug.com/591099 fast/borders/border-radius-mask-video-ratio.html [ Crash Failure ] crbug.com/591099 fast/borders/border-radius-mask-video-shadow.html [ Crash Failure ] -crbug.com/591099 fast/borders/border-radius-mask-video.html [ Crash Failure ] crbug.com/591099 fast/borders/border-radius-percent.html [ Failure ] crbug.com/591099 fast/borders/border-radius-position.html [ Failure ] crbug.com/591099 fast/borders/border-radius-split-inline.html [ Failure ] @@ -8474,7 +7353,6 @@ crbug.com/591099 fast/borders/border-styles-split.html [ Failure ] crbug.com/591099 fast/borders/border-width-percent.html [ Failure ] crbug.com/591099 fast/borders/borderRadiusAllStylesAllCorners.html [ Failure ] -crbug.com/591099 fast/borders/borderRadiusSolid01.html [ Crash ] crbug.com/591099 fast/borders/different-color-borders.html [ Failure ] crbug.com/591099 fast/borders/fieldsetBorderRadius.html [ Crash Failure ] crbug.com/591099 fast/borders/inline-mask-overlay-image-outset-vertical-rl.html [ Failure ] @@ -8667,7 +7545,6 @@ crbug.com/591099 fast/canvas/canvas-textMetrics-width.html [ Failure ] crbug.com/591099 fast/canvas/canvas-transforms-during-path.html [ Failure ] crbug.com/591099 fast/canvas/canvas-transforms-fillRect-shadow.html [ Crash ] -crbug.com/591099 fast/canvas/check-stale-putImageData.html [ Crash ] crbug.com/591099 fast/canvas/draw-focus-if-needed-invisible-crash.html [ Crash ] crbug.com/591099 fast/canvas/draw-focus-if-needed-on-event.html [ Crash ] crbug.com/591099 fast/canvas/draw-focus-if-needed-scrolls-horiz.html [ Failure Pass ] @@ -8757,14 +7634,11 @@ crbug.com/591099 fast/css-generated-content/bug-106384.html [ Failure ] crbug.com/591099 fast/css-generated-content/bug91547.html [ Failure ] crbug.com/591099 fast/css-generated-content/crash-selection-editing-removes-pseudo.html [ Crash ] -crbug.com/591099 fast/css-generated-content/details-before-after-content.html [ Crash ] +crbug.com/591099 fast/css-generated-content/details-before-after-content.html [ Crash Failure ] crbug.com/591099 fast/css-generated-content/drag-state.html [ Failure ] -crbug.com/591099 fast/css-generated-content/dynamic-apply-after-for-inline.html [ Crash ] crbug.com/591099 fast/css-generated-content/empty-content-with-float-crash.html [ Failure ] -crbug.com/591099 fast/css-generated-content/empty-first-letter-with-columns-crash.html [ Crash ] crbug.com/591099 fast/css-generated-content/first-letter-in-nested-before-table.html [ Failure Pass ] crbug.com/591099 fast/css-generated-content/first-letter-in-nested-before.html [ Failure ] -crbug.com/591099 fast/css-generated-content/floating-before-content-with-list-marker-crash.html [ Crash ] crbug.com/591099 fast/css-generated-content/hit-test-generated-content.html [ Failure ] crbug.com/591099 fast/css-generated-content/hover-style-change.html [ Failure ] crbug.com/591099 fast/css-generated-content/inline-display-types.html [ Failure ] @@ -9062,29 +7936,23 @@ crbug.com/591099 fast/css-grid-layout/setting-node-properties-to-null-during-layout-should-not-crash.html [ Failure ] crbug.com/591099 fast/css-grid-layout/should-not-collapse-anonymous-blocks.html [ Failure ] crbug.com/591099 fast/css-grid-layout/tracks-wider-min-track-breadth-crash.html [ Failure ] -crbug.com/591099 fast/css-intrinsic-dimensions/css-tables.html [ Crash ] crbug.com/591099 fast/css-intrinsic-dimensions/fill-available-with-zero-width.html [ Crash Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/fillavailable-minmax-content-inlinesize-contribution-nonreplaced-blocks.html [ Crash Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/fit-content-container-with-replaced-child.html [ Crash Failure Pass ] crbug.com/591099 fast/css-intrinsic-dimensions/fitcontent-minmax-content-inlinesize-contribution-nonreplaced-blocks.html [ Crash Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/height-css-tables.html [ Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/height-flexbox.html [ Failure Pass ] -crbug.com/591099 fast/css-intrinsic-dimensions/height-positioned-replaced.html [ Crash ] crbug.com/591099 fast/css-intrinsic-dimensions/height-positioned.html [ Crash Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/height-property-value.html [ Failure ] -crbug.com/591099 fast/css-intrinsic-dimensions/height-tables-collapsed.html [ Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/height.html [ Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/indefinite-percent-minmax-content-inlinesize-contribution-nonreplaced-blocks.html [ Failure ] -crbug.com/591099 fast/css-intrinsic-dimensions/intrinsic-sized-absolutes.html [ Crash ] crbug.com/591099 fast/css-intrinsic-dimensions/intrinsic-sized-blocks.html [ Crash Failure Pass ] -crbug.com/591099 fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes.html [ Crash ] crbug.com/591099 fast/css-intrinsic-dimensions/max-width-constrained.html [ Crash Failure Pass ] crbug.com/591099 fast/css-intrinsic-dimensions/max-width-unconstrained.html [ Crash Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/maxcontent-minmax-content-inlinesize-contribution-nonreplaced-blocks.html [ Crash Failure Pass ] crbug.com/591099 fast/css-intrinsic-dimensions/min-width.html [ Crash Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/mincontent-minmax-content-inlinesize-contribution-nonreplaced-blocks.html [ Crash Failure Pass ] crbug.com/591099 fast/css-intrinsic-dimensions/resize-inside-percent-width-overflow-hidden.html [ Failure ] -crbug.com/591099 fast/css-intrinsic-dimensions/tables.html [ Crash ] crbug.com/591099 fast/css-intrinsic-dimensions/width-avoid-floats.html [ Crash Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/width-property-value.html [ Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/width-shrinks-avoid-floats.html [ Crash Failure ] @@ -9237,10 +8105,8 @@ crbug.com/591099 fast/css/counters/invalidate-cached-counter-node.html [ Failure ] crbug.com/591099 fast/css/counters/nesting.html [ Failure ] crbug.com/591099 fast/css/counters/remove-anonymous-block-wrapper-crash.html [ Crash Failure ] -crbug.com/591099 fast/css/counters/reparent-table-children-with-counters-crash.html [ Crash ] crbug.com/591099 fast/css/crash-corner-present.html [ Failure ] crbug.com/591099 fast/css/crash-in-attachFirstLetterTextLayoutObjects.html [ Crash ] -crbug.com/591099 fast/css/crash-inherit-value-font-family.html [ Crash ] crbug.com/591099 fast/css/crash-layout-detached-document.html [ Crash ] crbug.com/591099 fast/css/create_element_align.xhtml [ Failure ] crbug.com/591099 fast/css/css-imports.html [ Failure ] @@ -9263,7 +8129,6 @@ crbug.com/591099 fast/css/csstext-of-content-string.html [ Failure ] crbug.com/591099 fast/css/cubic-bezier-with-multiple-calcs-crash.html [ Failure ] crbug.com/591099 fast/css/cue-serialize.html [ Failure ] -crbug.com/591099 fast/css/cursor-image-list-item-crash.html [ Crash ] crbug.com/591099 fast/css/cursor-parsing-image-set.html [ Failure ] crbug.com/591099 fast/css/cursor-parsing-quirks.html [ Failure ] crbug.com/591099 fast/css/cursor-parsing.html [ Failure ] @@ -9298,7 +8163,6 @@ crbug.com/591099 fast/css/find-next-layer.html [ Failure ] crbug.com/591099 fast/css/first-child-pseudo-class.html [ Failure ] crbug.com/591099 fast/css/first-letter-block-form-controls-crash.html [ Crash Failure ] -crbug.com/591099 fast/css/first-letter-capitalized-edit-select-crash.html [ Crash ] crbug.com/591099 fast/css/first-letter-capitalized.html [ Failure ] crbug.com/591099 fast/css/first-letter-crash-document-disposal.html [ Crash Failure ] crbug.com/591099 fast/css/first-letter-detach.html [ Failure ] @@ -9345,7 +8209,6 @@ crbug.com/591099 fast/css/font-face-src-parsing.html [ Failure ] crbug.com/591099 fast/css/font-face-synthetic-bold-italic-for-locally-installed.html [ Failure ] crbug.com/591099 fast/css/font-face-synthetic-bold-italic.html [ Failure ] -crbug.com/591099 fast/css/font-face-unicode-range-ligatures.html [ Failure ] crbug.com/591099 fast/css/font-face-unicode-range-load.html [ Failure ] crbug.com/591099 fast/css/font-face-unicode-range-monospace.html [ Failure ] crbug.com/591099 fast/css/font-face-unicode-range-overlap-load.html [ Failure ] @@ -9450,7 +8313,6 @@ crbug.com/591099 fast/css/hover-active-drag.html [ Failure ] crbug.com/591099 fast/css/hover-active-quirks.html [ Failure ] crbug.com/591099 fast/css/hover-affects-ancestor.html [ Crash Failure ] -crbug.com/591099 fast/css/hover-affects-child.html [ Crash ] crbug.com/591099 fast/css/hover-after-clicking-embed.html [ Failure ] crbug.com/591099 fast/css/hover-after-drag.html [ Failure ] crbug.com/591099 fast/css/hover-display-block.html [ Failure ] @@ -9646,7 +8508,6 @@ crbug.com/591099 fast/css/nth-child-dynamic.html [ Failure ] crbug.com/591099 fast/css/nth-child-implied-step.html [ Failure ] crbug.com/591099 fast/css/nth-child-n.html [ Failure ] -crbug.com/591099 fast/css/nth-child-negative-a-param.html [ Crash ] crbug.com/591099 fast/css/nth-child-no-mutations.html [ Failure ] crbug.com/591099 fast/css/nth-child-odd-case-insensitive.html [ Failure ] crbug.com/591099 fast/css/nth-child-of-pseudo-element-assert.html [ Failure ] @@ -9693,7 +8554,6 @@ crbug.com/591099 fast/css/parsing-object-position.html [ Failure ] crbug.com/591099 fast/css/parsing-text-rendering.html [ Failure ] crbug.com/591099 fast/css/parsing-webkit-font-smoothing.html [ Failure ] -crbug.com/591099 fast/css/pending-images-crash.html [ Crash ] crbug.com/591099 fast/css/pending-stylesheet-repaint.html [ Failure ] crbug.com/591099 fast/css/pendingStylesheetFontSize.html [ Failure ] crbug.com/591099 fast/css/percent-character-as-value.html [ Failure ] @@ -9720,7 +8580,6 @@ crbug.com/591099 fast/css/pseudo-element-backdrop-hit-test.html [ Failure ] crbug.com/591099 fast/css/pseudo-element-line-break.html [ Failure ] crbug.com/591099 fast/css/pseudo-element-opagedxy-crash.html [ Failure ] -crbug.com/591099 fast/css/pseudo-element-selector-scrollbar-hover.html [ Failure ] crbug.com/591099 fast/css/pseudo-empty-adjacent-dynamic.html [ Failure ] crbug.com/591099 fast/css/pseudo-empty-display-none.html [ Failure ] crbug.com/591099 fast/css/pseudo-first-line-border-width.html [ Crash Failure ] @@ -9750,7 +8609,6 @@ crbug.com/591099 fast/css/pseudo-valid-dynamic.html [ Crash Failure ] crbug.com/591099 fast/css/pseudo-valid-unapplied.html [ Failure ] crbug.com/591099 fast/css/pseudostyle-anonymous-text.html [ Failure ] -crbug.com/591099 fast/css/quirks-mode-ignore-list-item.html [ Crash ] crbug.com/591099 fast/css/quotes-computedstyle.html [ Failure ] crbug.com/591099 fast/css/readonly-pseudoclass-opera-001.html [ Crash Failure ] crbug.com/591099 fast/css/readonly-pseudoclass-opera-002.html [ Crash Failure ] @@ -9759,7 +8617,6 @@ crbug.com/591099 fast/css/readonly-pseudoclass-opera-005.html [ Crash Failure ] crbug.com/591099 fast/css/recalc-inherit-001.html [ Failure ] crbug.com/591099 fast/css/recursive-delay-update-scroll.html [ Failure ] -crbug.com/591099 fast/css/relative-position-replaced-in-table-display-crash.html [ Crash ] crbug.com/591099 fast/css/relative-positioned-block-crash.html [ Crash ] crbug.com/591099 fast/css/relative-positioned-block-nested-with-inline-parent-dynamic-removed.html [ Failure ] crbug.com/591099 fast/css/relative-positioned-block-nested-with-inline-parent-dynamic.html [ Failure ] @@ -9813,7 +8670,6 @@ crbug.com/591099 fast/css/shorthands-four-values.html [ Failure ] crbug.com/591099 fast/css/sibling-selectors.html [ Failure ] crbug.com/591099 fast/css/simple-selector-chain-parsing.html [ Failure Pass ] -crbug.com/591099 fast/css/small-caps-crash.html [ Crash ] crbug.com/591099 fast/css/square-button-appearance.html [ Failure Pass ] crbug.com/591099 fast/css/stale-style-selector-crash-1.html [ Failure ] crbug.com/591099 fast/css/stale-style-selector-crash-2.html [ Failure ] @@ -9852,7 +8708,6 @@ crbug.com/591099 fast/css/table-text-align-strict.html [ Failure Pass ] crbug.com/591099 fast/css/target-fragment-match.html [ Failure ] crbug.com/591099 fast/css/test-setting-canvas-color.html [ Failure ] -crbug.com/591099 fast/css/text-align-inherit-webkit-match-parent.html [ Crash ] crbug.com/591099 fast/css/text-align-webkit-match-parent.html [ Failure ] crbug.com/591099 fast/css/text-align.html [ Failure ] crbug.com/591099 fast/css/text-decorations-on-first-line-and-containing-block.html [ Failure ] @@ -9873,8 +8728,6 @@ crbug.com/591099 fast/css/text-overflow-ellipsis-vertical-select.html [ Failure ] crbug.com/591099 fast/css/text-overflow-ellipsis-vertical.html [ Failure ] crbug.com/591099 fast/css/text-overflow-ellipsis.html [ Failure ] -crbug.com/591099 fast/css/text-overflow-input-focus-placeholder.html [ Failure ] -crbug.com/591099 fast/css/text-overflow-input-focus-value.html [ Crash Failure ] crbug.com/591099 fast/css/text-overflow-input.html [ Crash Failure ] crbug.com/591099 fast/css/text-rendering-priority.html [ Failure ] crbug.com/591099 fast/css/text-rendering.html [ Failure ] @@ -9894,7 +8747,6 @@ crbug.com/591099 fast/css/unused-data-url-fontface.html [ Failure ] crbug.com/591099 fast/css/uri-token-parsing.html [ Failure ] crbug.com/591099 fast/css/url-with-multi-byte-unicode-escape.html [ Failure ] -crbug.com/591099 fast/css/usecounter-summary-display-block.html [ Crash ] crbug.com/591099 fast/css/variables/matched-properties-cache-is-disabled.html [ Crash ] crbug.com/591099 fast/css/vertical-align-baseline-rowspan-003.htm [ Failure ] crbug.com/591099 fast/css/vertical-align-baseline-rowspan-004.htm [ Failure ] @@ -9927,7 +8779,6 @@ crbug.com/591099 fast/css/zoom-in-length-round-trip.html [ Failure ] crbug.com/591099 fast/css/zoom-on-nested-scroll-crash.html [ Failure ] crbug.com/591099 fast/css/zoom-property-parsing.html [ Failure ] -crbug.com/591099 fast/css/zoomed-intrinsic-width.html [ Crash ] crbug.com/591099 fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last-inherited.html [ Failure ] crbug.com/591099 fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last.html [ Failure ] crbug.com/591099 fast/css3-text/css3-text-align-last/text-align-last.html [ Failure ] @@ -9944,7 +8795,6 @@ crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-first-line-decoration.html [ Crash Failure ] crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-auto.html [ Failure ] crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-cjk.html [ Crash Failure ] -crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-mixed-fonts.html [ Crash ] crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under-out-of-flow.html [ Failure ] crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under-vertical.html [ Failure Pass ] crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under.html [ Failure ] @@ -10048,7 +8898,6 @@ crbug.com/591099 fast/dom/Document/createElement-invalid-names.html [ Failure ] crbug.com/591099 fast/dom/Document/createElement-valid-names.html [ Failure ] crbug.com/591099 fast/dom/Document/createElementNS-namespace-err.html [ Crash Failure ] -crbug.com/591099 fast/dom/Document/createProcessingInstruction-invalid-target.html [ Crash ] crbug.com/591099 fast/dom/Document/designMode-non-html.html [ Failure ] crbug.com/591099 fast/dom/Document/doc-open-while-parsing.html [ Failure ] crbug.com/591099 fast/dom/Document/document-charset.html [ Failure ] @@ -10233,7 +9082,6 @@ crbug.com/591099 fast/dom/HTMLInputElement/cloned-input-checked-state.html [ Failure ] crbug.com/591099 fast/dom/HTMLInputElement/duplicate-element-names.html [ Crash Failure ] crbug.com/591099 fast/dom/HTMLInputElement/input-checked-reset.html [ Failure ] -crbug.com/591099 fast/dom/HTMLInputElement/input-hidden-value.html [ Crash ] crbug.com/591099 fast/dom/HTMLInputElement/input-image-alt-text.html [ Crash Failure ] crbug.com/591099 fast/dom/HTMLInputElement/input-size-attribute.html [ Failure ] crbug.com/591099 fast/dom/HTMLInputElement/input-slider-update-styled.html [ Failure ] @@ -10343,9 +9191,7 @@ crbug.com/591099 fast/dom/MutationObserver/delivery-order.html [ Failure ] crbug.com/591099 fast/dom/MutationObserver/disconnect-cancel-pending.html [ Failure ] crbug.com/591099 fast/dom/MutationObserver/document-fragment-insertion.html [ Failure ] -crbug.com/591099 fast/dom/MutationObserver/end-of-task-delivery.html [ Crash ] crbug.com/591099 fast/dom/MutationObserver/filesystem-callback-delivery.html [ Failure ] -crbug.com/591099 fast/dom/MutationObserver/inline-event-listener.html [ Crash ] crbug.com/591099 fast/dom/MutationObserver/mutate-during-delivery.html [ Failure ] crbug.com/591099 fast/dom/MutationObserver/mutation-and-deletion-race.html [ Failure ] crbug.com/591099 fast/dom/MutationObserver/mutation-observer-constructor.html [ Failure ] @@ -10489,7 +9335,6 @@ crbug.com/591099 fast/dom/Window/HTMLBodyElement-window-eventListener-attributes.html [ Failure ] crbug.com/591099 fast/dom/Window/HTMLFrameSetElement-window-eventListener-attributes.html [ Failure ] crbug.com/591099 fast/dom/Window/Location/set-location-after-close.html [ Failure ] -crbug.com/591099 fast/dom/Window/anonymous-slot-with-changes.html [ Crash ] crbug.com/591099 fast/dom/Window/attr-constructor.html [ Failure ] crbug.com/591099 fast/dom/Window/btoa-pnglet.html [ Failure ] crbug.com/591099 fast/dom/Window/clear-timeout.html [ Failure ] @@ -10544,7 +9389,6 @@ crbug.com/591099 fast/dom/Window/window-constructor-settable.html [ Failure ] crbug.com/591099 fast/dom/Window/window-custom-prototype.html [ Failure ] crbug.com/591099 fast/dom/Window/window-early-properties-xhr.html [ Failure ] -crbug.com/591099 fast/dom/Window/window-focus-self.html [ Crash ] crbug.com/591099 fast/dom/Window/window-frames-self-referential.html [ Failure ] crbug.com/591099 fast/dom/Window/window-function-frame-getter-precedence.html [ Failure ] crbug.com/591099 fast/dom/Window/window-function-name-getter-precedence.html [ Failure ] @@ -10558,7 +9402,6 @@ crbug.com/591099 fast/dom/Window/window-postmessage-args.html [ Failure ] crbug.com/591099 fast/dom/Window/window-postmessage-clone-deep-array.html [ Crash Failure ] crbug.com/591099 fast/dom/Window/window-postmessage-clone-frames.html [ Crash Pass ] -crbug.com/591099 fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Crash ] crbug.com/591099 fast/dom/Window/window-postmessage-clone.html [ Crash Pass ] crbug.com/591099 fast/dom/Window/window-properties-device-orientation.html [ Failure ] crbug.com/591099 fast/dom/Window/window-properties-geolocation.html [ Failure ] @@ -10720,7 +9563,6 @@ crbug.com/591099 fast/dom/domListEnumeration.html [ Crash ] crbug.com/591099 fast/dom/domstring-attribute-reflection.html [ Timeout ] crbug.com/591099 fast/dom/domtimestamp-is-number.html [ Failure ] -crbug.com/591099 fast/dom/duplicate-ids.html [ Crash ] crbug.com/591099 fast/dom/element-attribute-js-null.html [ Timeout ] crbug.com/591099 fast/dom/element-bounding-client-rect-relative-to-viewport.html [ Failure ] crbug.com/591099 fast/dom/elementFromPoint-relative-to-viewport.html [ Crash ] @@ -10833,7 +9675,6 @@ crbug.com/591099 fast/dom/javascript-backslash.html [ Crash Failure ] crbug.com/591099 fast/dom/javascript-url-crash-function.html [ Failure ] crbug.com/591099 fast/dom/javascript-url-exception-isolation.html [ Failure ] -crbug.com/591099 fast/dom/left-overflow-in-ltr.html [ Crash Failure ] crbug.com/591099 fast/dom/legend-control-character.html [ Failure ] crbug.com/591099 fast/dom/legend-display-inline.html [ Failure ] crbug.com/591099 fast/dom/length-attribute-mapping.html [ Failure ] @@ -10912,8 +9753,6 @@ crbug.com/591099 fast/dom/search-shadow-host-crash.html [ Crash ] crbug.com/591099 fast/dom/serialize-attribute.xhtml [ Failure ] crbug.com/591099 fast/dom/set-innerHTML.xhtml [ Crash Failure ] -crbug.com/591099 fast/dom/set-outer-html.html [ Crash Failure ] -crbug.com/591099 fast/dom/set-outer-text.html [ Crash Failure ] crbug.com/591099 fast/dom/setAttribute-using-initial-input-value.html [ Failure ] crbug.com/591099 fast/dom/setAttributeNS-empty-namespace.html [ Failure ] crbug.com/591099 fast/dom/setAttributeNS-namespace-errors.html [ Failure ] @@ -10944,7 +9783,6 @@ crbug.com/591099 fast/dom/shadow/content-reprojection-fallback-crash.html [ Failure ] crbug.com/591099 fast/dom/shadow/content-reprojection-recalc.html [ Failure ] crbug.com/591099 fast/dom/shadow/content-selector-query.html [ Failure ] -crbug.com/591099 fast/dom/shadow/cppevent-input-in-shadow.html [ Crash Failure ] crbug.com/591099 fast/dom/shadow/custom-pseudo-in-selector-api.html [ Failure ] crbug.com/591099 fast/dom/shadow/details-summary-distributed.html [ Crash Pass ] crbug.com/591099 fast/dom/shadow/disconnected-distribution-cycle.html [ Failure ] @@ -10954,7 +9792,6 @@ crbug.com/591099 fast/dom/shadow/drag-and-drop-in-shadow.html [ Failure ] crbug.com/591099 fast/dom/shadow/drag-and-drop-in-user-agent-shadow.html [ Failure ] crbug.com/591099 fast/dom/shadow/drag-to-meter-in-shadow-crash.html [ Failure ] -crbug.com/591099 fast/dom/shadow/drop-event-for-input-in-shadow.html [ Failure ] crbug.com/591099 fast/dom/shadow/elements-in-frameless-document.html [ Failure ] crbug.com/591099 fast/dom/shadow/event-path-after-deleting-tree-scope-crash.html [ Failure ] crbug.com/591099 fast/dom/shadow/event-path-after-iframe-removed.html [ Crash ] @@ -10993,7 +9830,6 @@ crbug.com/591099 fast/dom/shadow/iframe-shadow.html [ Failure ] crbug.com/591099 fast/dom/shadow/inner-scope-important-wins.html [ Failure ] crbug.com/591099 fast/dom/shadow/input-shadow-nochange.html [ Failure ] -crbug.com/591099 fast/dom/shadow/make-marquee-bold-by-exec-command-crash.html [ Crash ] crbug.com/591099 fast/dom/shadow/move-style-scoped-to-another-shadowroot-crash.html [ Failure ] crbug.com/591099 fast/dom/shadow/multiple-host-pseudos-in-compound.html [ Failure ] crbug.com/591099 fast/dom/shadow/multiple-shadowroot-adopt.html [ Failure ] @@ -11003,7 +9839,6 @@ crbug.com/591099 fast/dom/shadow/normalize-progress-element-crash.html [ Crash Failure ] crbug.com/591099 fast/dom/shadow/offset-parent-does-not-leak-ua-shadow.html [ Failure ] crbug.com/591099 fast/dom/shadow/offsetWidth-host-style-change.html [ Failure ] -crbug.com/591099 fast/dom/shadow/ol-with-distribution-recalc-crash.html [ Crash ] crbug.com/591099 fast/dom/shadow/olderShadowRoot.html [ Failure ] crbug.com/591099 fast/dom/shadow/outer-scope-lower-specificity-wins.html [ Failure ] crbug.com/591099 fast/dom/shadow/pseudo-host-parameter-matches-shadow-host.html [ Failure ] @@ -11045,7 +9880,6 @@ crbug.com/591099 fast/dom/shadow/shadow-root-new.html [ Failure ] crbug.com/591099 fast/dom/shadow/shadow-selection-detach-crash.html [ Failure ] crbug.com/591099 fast/dom/shadow/shadow-tree-styles-select-host.html [ Crash Failure ] -crbug.com/591099 fast/dom/shadow/shadow-ul-li.html [ Crash ] crbug.com/591099 fast/dom/shadow/shadowdom-dynamic-styling.html [ Failure ] crbug.com/591099 fast/dom/shadow/shadowdom-for-textarea-only-shadow.html [ Crash Pass ] crbug.com/591099 fast/dom/shadow/shadowdom-for-textarea-with-attribute.html [ Crash Pass ] @@ -11072,7 +9906,6 @@ crbug.com/591099 fast/dom/shadow/tree-scope-crash.html [ Crash Failure ] crbug.com/591099 fast/dom/shadow/update-text-of-style-in-shadow-dom.html [ Failure ] crbug.com/591099 fast/dom/shadow/user-modify-inheritance.html [ Failure ] -crbug.com/591099 fast/dom/shadow/wheel-event-on-input-in-shadow-dom.html [ Failure ] crbug.com/591099 fast/dom/shared-inline-style-after-node-removal.html [ Failure ] crbug.com/591099 fast/dom/simultaneouslyRegsiteredTimerFireOrder.html [ Failure ] crbug.com/591099 fast/dom/space-to-text.html [ Failure ] @@ -11172,7 +10005,6 @@ crbug.com/591099 fast/dynamic/positioned-movement-with-positioned-children.html [ Failure ] crbug.com/591099 fast/dynamic/recursive-layout.html [ Failure ] crbug.com/591099 fast/dynamic/selection-highlight-adjust.html [ Failure ] -crbug.com/591099 fast/dynamic/static-to-relative-with-absolute-child.html [ Crash ] crbug.com/591099 fast/dynamic/staticY-marking-parents-regression.html [ Failure ] crbug.com/591099 fast/dynamic/staticY.html [ Failure Pass ] crbug.com/591099 fast/dynamic/subtree-boundary-percent-height.html [ Failure ] @@ -11248,7 +10080,6 @@ crbug.com/591099 fast/encoding/parser-tests-90.html [ Crash Failure ] crbug.com/591099 fast/encoding/parser-tests.html [ Crash Failure ] crbug.com/591099 fast/encoding/percent-escaping.html [ Failure ] -crbug.com/591099 fast/encoding/preload-encoding.html [ Crash Failure ] crbug.com/591099 fast/encoding/pseudo-tags-in-attributes.html [ Failure ] crbug.com/591099 fast/encoding/pseudo-xml-2.html [ Failure ] crbug.com/591099 fast/encoding/pseudo-xml-3.html [ Failure ] @@ -11316,7 +10147,6 @@ crbug.com/591099 fast/events/clear-drag-state.html [ Failure ] crbug.com/591099 fast/events/clear-edit-drag-state.html [ Failure ] crbug.com/591099 fast/events/click-after-mousedown-cancel.html [ Failure ] -crbug.com/591099 fast/events/click-anchor-refocus-window.html [ Failure ] crbug.com/591099 fast/events/click-focus-anchor.html [ Failure ] crbug.com/591099 fast/events/click-focus-svganchor-has-ring.html [ Failure ] crbug.com/591099 fast/events/click-over-descendant-elements.html [ Crash ] @@ -11375,7 +10205,6 @@ crbug.com/591099 fast/events/dispatch-synthetic-mouseevent.html [ Failure ] crbug.com/591099 fast/events/dispatch-to-function-with-handle-event.html [ Failure ] crbug.com/591099 fast/events/dispatch-to-handle-event.html [ Failure ] -crbug.com/591099 fast/events/display-none-on-focus-crash.html [ Crash ] crbug.com/591099 fast/events/document-elementFromPoint.html [ Failure Pass ] crbug.com/591099 fast/events/dom-character-data-modified-textarea-crash.html [ Crash Pass ] crbug.com/591099 fast/events/domactivate-sets-underlying-click-event-as-handled.html [ Crash ] @@ -11386,7 +10215,6 @@ crbug.com/591099 fast/events/drag-and-drop-autoscroll-mainframe.html [ Crash Pass Timeout ] crbug.com/591099 fast/events/drag-and-drop-autoscroll.html [ Failure ] crbug.com/591099 fast/events/drag-and-drop-dataTransfer-types-nocrash.html [ Failure ] -crbug.com/591099 fast/events/drag-and-drop-event-properties.html [ Crash ] crbug.com/591099 fast/events/drag-and-drop-fire-drag-dragover.html [ Failure ] crbug.com/591099 fast/events/drag-and-drop-set-drag-data-arguments.html [ Failure ] crbug.com/591099 fast/events/drag-and-drop-subframe-dataTransfer.html [ Crash ] @@ -11396,7 +10224,6 @@ crbug.com/591099 fast/events/drag-dataTransferItemList.html [ Failure ] crbug.com/591099 fast/events/drag-downloadURL.html [ Failure ] crbug.com/591099 fast/events/drag-dragend-detaches.html [ Failure ] -crbug.com/591099 fast/events/drag-file-crash.html [ Crash ] crbug.com/591099 fast/events/drag-image-filename.html [ Timeout ] crbug.com/591099 fast/events/drag-in-frames.html [ Crash Failure ] crbug.com/591099 fast/events/drag-link.html [ Failure ] @@ -11445,7 +10272,7 @@ crbug.com/591099 fast/events/fire-scroll-event.html [ Failure ] crbug.com/591099 fast/events/flags-unset-on-init-event.html [ Failure ] crbug.com/591099 fast/events/focus-change-assertion.html [ Crash ] -crbug.com/591099 fast/events/focus-change-crash.html [ Failure ] +crbug.com/591099 fast/events/focus-change-crash.html [ Crash Failure ] crbug.com/591099 fast/events/focus-change-crash2.html [ Crash ] crbug.com/591099 fast/events/focus-change-no-layout.html [ Failure Pass ] crbug.com/591099 fast/events/focus-click-on-non-mouse-focusable-element.html [ Failure ] @@ -11488,10 +10315,9 @@ crbug.com/591099 fast/events/inputevents/before-input-order-typing-command.html [ Crash ] crbug.com/591099 fast/events/inputevents/before-input-ranges.html [ Crash ] crbug.com/591099 fast/events/inputevents/beforeinput-remove-iframe-crash.html [ Crash ] -crbug.com/591099 fast/events/inputevents/input-event-event-listener.html [ Timeout ] crbug.com/591099 fast/events/inputevents/inputevent-cut-paste.html [ Failure ] crbug.com/591099 fast/events/inputevents/inputevent-data-keyboard.html [ Failure ] -crbug.com/591099 fast/events/inputevents/inputevent-drag-drop.html [ Crash ] +crbug.com/591099 fast/events/inputevents/inputevent-drag-drop.html [ Crash Failure ] crbug.com/591099 fast/events/inputevents/inputevent-execcommand.html [ Failure ] crbug.com/591099 fast/events/inputevents/inputevent-keyboard.html [ Crash ] crbug.com/591099 fast/events/inputevents/inputevent-spellcheck.html [ Crash Pass ] @@ -11521,7 +10347,6 @@ crbug.com/591099 fast/events/keydown-remove-frame.html [ Crash ] crbug.com/591099 fast/events/keyevent-iframe-removed-crash.html [ Failure ] crbug.com/591099 fast/events/keypress-focus-change.html [ Failure ] -crbug.com/591099 fast/events/keypress-insert-tab.html [ Failure ] crbug.com/591099 fast/events/keypress-removed-node.html [ Crash ] crbug.com/591099 fast/events/main-world-does-not-override-keystate.html [ Failure ] crbug.com/591099 fast/events/max-tabindex-focus.html [ Crash ] @@ -11573,7 +10398,6 @@ crbug.com/591099 fast/events/mouse-cursor-no-mousemove.html [ Failure ] crbug.com/591099 fast/events/mouse-cursor-style-change-iframe.html [ Failure ] crbug.com/591099 fast/events/mouse-double-triple-click-should-not-select-next-node-for-user-select-none.html [ Failure ] -crbug.com/591099 fast/events/mouse-down-on-pseudo-element-remove-crash.html [ Crash ] crbug.com/591099 fast/events/mouse-drag-from-frame-to-other-frame.html [ Crash Failure ] crbug.com/591099 fast/events/mouse-drag-from-frame.html [ Crash Failure ] crbug.com/591099 fast/events/mouse-event-buttons-attribute.html [ Timeout ] @@ -11850,7 +10674,6 @@ crbug.com/591099 fast/events/touch/multi-touch-inside-nested-iframes.html [ Failure ] crbug.com/591099 fast/events/touch/multi-touch-partial-sequence.html [ Failure ] crbug.com/591099 fast/events/touch/page-scaled-touch-gesture-click.html [ Failure ] -crbug.com/591099 fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html [ Failure ] crbug.com/591099 fast/events/touch/send-oncancel-event.html [ Failure ] crbug.com/591099 fast/events/touch/tap-highlight-color.html [ Failure ] crbug.com/591099 fast/events/touch/touch-action-range-input-crash.html [ Crash ] @@ -12014,7 +10837,6 @@ crbug.com/591099 fast/forms/ValidityState-typeMismatch-email.html [ Failure ] crbug.com/591099 fast/forms/ValidityState-typeMismatch-url.html [ Failure ] crbug.com/591099 fast/forms/access-key-case-insensitive.html [ Failure ] -crbug.com/591099 fast/forms/access-key-for-all-elements.html [ Crash ] crbug.com/591099 fast/forms/access-key-mutated.html [ Failure ] crbug.com/591099 fast/forms/access-key.html [ Crash Failure ] crbug.com/591099 fast/forms/activate-and-disabled-elements.html [ Failure ] @@ -12025,7 +10847,6 @@ crbug.com/591099 fast/forms/autofocus-input-css-style-change.html [ Failure ] crbug.com/591099 fast/forms/autofocus-opera-001.html [ Crash Failure ] crbug.com/591099 fast/forms/autofocus-opera-002.html [ Crash Failure ] -crbug.com/591099 fast/forms/autofocus-opera-003.html [ Crash ] crbug.com/591099 fast/forms/autofocus-opera-004.html [ Crash Failure ] crbug.com/591099 fast/forms/autofocus-opera-005.html [ Crash Failure ] crbug.com/591099 fast/forms/autofocus-opera-006.html [ Crash Failure ] @@ -12134,7 +10955,6 @@ crbug.com/591099 fast/forms/cursor-position.html [ Crash Failure ] crbug.com/591099 fast/forms/dangling-form-element-crash.html [ Failure ] crbug.com/591099 fast/forms/datalist/datalist-child-validation.html [ Failure ] -crbug.com/591099 fast/forms/datalist/datalist-fallback-content.html [ Failure ] crbug.com/591099 fast/forms/datalist/datalist-inside-shadow-dom.html [ Crash Pass ] crbug.com/591099 fast/forms/datalist/datalist-nonoption-child.html [ Failure ] crbug.com/591099 fast/forms/datalist/input-appearance-range-with-datalist-zoomed.html [ Failure ] @@ -12218,10 +11038,10 @@ crbug.com/591099 fast/forms/datetimelocal/input-valueasdate-datetimelocal.html [ Failure ] crbug.com/591099 fast/forms/datetimelocal/input-valueasnumber-datetimelocal.html [ Failure ] crbug.com/591099 fast/forms/defer-updateFromElement.html [ Crash Failure ] -crbug.com/591099 fast/forms/delete-text-with-invisible-br.html [ Crash ] +crbug.com/591099 fast/forms/delete-text-with-invisible-br.html [ Crash Failure ] crbug.com/591099 fast/forms/disabled-attr-checkvalidity.html [ Failure ] crbug.com/591099 fast/forms/disabled-mousedown-event.html [ Failure ] -crbug.com/591099 fast/forms/display-none-in-onchange-keyboard.html [ Failure ] +crbug.com/591099 fast/forms/display-none-in-onchange-keyboard.html [ Crash Failure ] crbug.com/591099 fast/forms/document-write-empty.html [ Failure ] crbug.com/591099 fast/forms/document-write.html [ Failure ] crbug.com/591099 fast/forms/domstring-replace-crash.html [ Failure ] @@ -12237,7 +11057,7 @@ crbug.com/591099 fast/forms/enter-clicks-buttons.html [ Crash ] crbug.com/591099 fast/forms/fieldset/fieldset-align.html [ Failure ] crbug.com/591099 fast/forms/fieldset/fieldset-disable.html [ Crash Pass ] -crbug.com/591099 fast/forms/fieldset/fieldset-disabled.html [ Crash ] +crbug.com/591099 fast/forms/fieldset/fieldset-disabled.html [ Crash Failure ] crbug.com/591099 fast/forms/fieldset/fieldset-elements.html [ Crash ] crbug.com/591099 fast/forms/fieldset/fieldset-form-collection-radionode-list.html [ Crash Failure ] crbug.com/591099 fast/forms/fieldset/fieldset-legend-padding-unclipped-fieldset-border.html [ Failure ] @@ -12254,9 +11074,7 @@ crbug.com/591099 fast/forms/fieldset/legend-after-margin-with-before-border-horizontal-mode.html [ Failure ] crbug.com/591099 fast/forms/fieldset/legend-display-none.html [ Failure ] crbug.com/591099 fast/forms/fieldset/legend-form.html [ Failure ] -crbug.com/591099 fast/forms/fieldset/legend-small-after-margin-before-border-horizontal-mode.html [ Failure ] crbug.com/591099 fast/forms/fieldset/validation-in-fieldset.html [ Crash Pass ] -crbug.com/591099 fast/forms/file/disabling-file-busy-loop.html [ Crash ] crbug.com/591099 fast/forms/file/file-appearance-transform-no-effects.html [ Crash Pass ] crbug.com/591099 fast/forms/file/file-cloneNode.html [ Crash ] crbug.com/591099 fast/forms/file/file-input-capture.html [ Failure ] @@ -12265,30 +11083,23 @@ crbug.com/591099 fast/forms/file/file-input-disabled.html [ Crash Failure ] crbug.com/591099 fast/forms/file/file-input-empty-validation.html [ Crash Failure ] crbug.com/591099 fast/forms/file/file-input-hit-test.html [ Crash Failure ] -crbug.com/591099 fast/forms/file/file-input-pressed-state.html [ Crash Failure ] crbug.com/591099 fast/forms/file/file-input-reset-validation.html [ Crash Failure ] crbug.com/591099 fast/forms/file/file-input-reset.html [ Crash Pass ] -crbug.com/591099 fast/forms/file/file-reset-in-change.html [ Crash Failure ] crbug.com/591099 fast/forms/file/file-setrangetext.html [ Crash Failure ] crbug.com/591099 fast/forms/file/file-style-inheritance.html [ Crash Failure ] -crbug.com/591099 fast/forms/file/file-vertical-padding-border.html [ Crash ] crbug.com/591099 fast/forms/file/get-file-upload.html [ Crash Failure ] -crbug.com/591099 fast/forms/file/hidden-input-file.html [ Crash ] crbug.com/591099 fast/forms/file/input-file-entries.html [ Crash Failure ] crbug.com/591099 fast/forms/file/input-file-label.html [ Crash Failure ] -crbug.com/591099 fast/forms/file/input-file-not-open-without-gesture.html [ Crash ] crbug.com/591099 fast/forms/file/input-file-re-render.html [ Crash ] crbug.com/591099 fast/forms/file/input-file-value-with-zoom.html [ Crash Failure ] crbug.com/591099 fast/forms/file/input-file-value.html [ Crash Failure ] crbug.com/591099 fast/forms/file/input-file-write-files.html [ Crash Failure ] -crbug.com/591099 fast/forms/file/intrinsic-min-width-overrides-width.html [ Crash Failure ] crbug.com/591099 fast/forms/file/recover-file-input-in-unposted-form.html [ Crash Failure ] crbug.com/591099 fast/forms/file/selected-files-from-history-state.html [ Crash Failure ] crbug.com/591099 fast/forms/file/sibling-of-disabled-file-input.html [ Crash Failure ] crbug.com/591099 fast/forms/floating-textfield-relayout.html [ Failure ] crbug.com/591099 fast/forms/focus-change-on-keypress.html [ Failure ] crbug.com/591099 fast/forms/focus-control-to-page.html [ Crash Failure ] -crbug.com/591099 fast/forms/focus-on-control-with-zero-size.html [ Failure ] crbug.com/591099 fast/forms/focus-selection-input.html [ Crash Failure ] crbug.com/591099 fast/forms/focus-selection-textarea.html [ Crash Failure ] crbug.com/591099 fast/forms/focus-style-pending.html [ Failure Pass ] @@ -12355,7 +11166,6 @@ crbug.com/591099 fast/forms/indeterminate.html [ Failure ] crbug.com/591099 fast/forms/input-align.html [ Crash Failure ] crbug.com/591099 fast/forms/input-appearance-height.html [ Crash Failure ] -crbug.com/591099 fast/forms/input-baseline-empty-text.html [ Crash Failure ] crbug.com/591099 fast/forms/input-button-sizes.html [ Failure ] crbug.com/591099 fast/forms/input-disconnected-during-parse.html [ Failure ] crbug.com/591099 fast/forms/input-file-set-value.html [ Crash Failure ] @@ -12379,7 +11189,6 @@ crbug.com/591099 fast/forms/input-type-change3.html [ Failure ] crbug.com/591099 fast/forms/input-type-text-min-width.html [ Crash Failure ] crbug.com/591099 fast/forms/input-user-modify.html [ Failure ] -crbug.com/591099 fast/forms/input-user-select-none.html [ Crash Failure ] crbug.com/591099 fast/forms/input-value-sanitization.html [ Crash Failure ] crbug.com/591099 fast/forms/input-value.html [ Failure ] crbug.com/591099 fast/forms/input-valueasnumber-unsupported.html [ Crash Failure ] @@ -12480,12 +11289,10 @@ crbug.com/591099 fast/forms/month/month-setrangetext.html [ Failure ] crbug.com/591099 fast/forms/month/month-stepup-stepdown.html [ Failure ] crbug.com/591099 fast/forms/mouseevent_disabled_form_control.html [ Crash ] -crbug.com/591099 fast/forms/multiple-form-submission-protection-mouse.html [ Crash ] crbug.com/591099 fast/forms/multiple-selected-options-innerHTML.html [ Failure ] crbug.com/591099 fast/forms/mutation-event-recalc.html [ Failure ] crbug.com/591099 fast/forms/negativeLineHeight.html [ Crash Failure ] crbug.com/591099 fast/forms/novalidate-attribute.html [ Failure ] -crbug.com/591099 fast/forms/number/number-appearance-datalist-dynamic.html [ Failure ] crbug.com/591099 fast/forms/number/number-appearance-datalist.html [ Failure ] crbug.com/591099 fast/forms/number/number-appearance-rtl.html [ Crash Failure ] crbug.com/591099 fast/forms/number/number-appearance-spinbutton-disabled-readonly.html [ Crash Failure ] @@ -12498,11 +11305,7 @@ crbug.com/591099 fast/forms/number/number-input-changeevent.html [ Crash ] crbug.com/591099 fast/forms/number/number-interactive-validation-required.html [ Crash Failure ] crbug.com/591099 fast/forms/number/number-keyoperation.html [ Crash Failure ] -crbug.com/591099 fast/forms/number/number-l10n-input.html [ Failure ] -crbug.com/591099 fast/forms/number/number-lossless-localization.html [ Failure ] crbug.com/591099 fast/forms/number/number-outofrange.html [ Crash ] -crbug.com/591099 fast/forms/number/number-placeholder-with-unacceptable-value.html [ Failure ] -crbug.com/591099 fast/forms/number/number-reject-invalid.html [ Failure ] crbug.com/591099 fast/forms/number/number-setrangetext.html [ Failure ] crbug.com/591099 fast/forms/number/number-size.html [ Failure Timeout ] crbug.com/591099 fast/forms/number/number-skip-spaces-in-user-input.html [ Failure ] @@ -12514,7 +11317,7 @@ crbug.com/591099 fast/forms/number/number-spinbutton-gets-disabled-or-readonly.html [ Crash Failure ] crbug.com/591099 fast/forms/number/number-spinbutton-in-multi-column.html [ Failure ] crbug.com/591099 fast/forms/number/number-spinbutton-state.html [ Crash ] -crbug.com/591099 fast/forms/number/number-stepup-stepdown-from-renderer.html [ Crash Timeout ] +crbug.com/591099 fast/forms/number/number-stepup-stepdown-from-renderer.html [ Crash Failure Timeout ] crbug.com/591099 fast/forms/number/number-stepup-stepdown.html [ Failure ] crbug.com/591099 fast/forms/number/number-type-update-by-change-event.html [ Crash Pass ] crbug.com/591099 fast/forms/number/number-validation-message.html [ Crash Failure ] @@ -12527,8 +11330,6 @@ crbug.com/591099 fast/forms/number/number-wheel-event.html [ Crash ] crbug.com/591099 fast/forms/numeric-input-name.html [ Failure ] crbug.com/591099 fast/forms/old-names.html [ Failure ] -crbug.com/591099 fast/forms/onchange-change-type.html [ Failure ] -crbug.com/591099 fast/forms/onchange-enter-submit.html [ Failure ] crbug.com/591099 fast/forms/onchange-setvalueforuser.html [ Crash Pass ] crbug.com/591099 fast/forms/onselect-selectall.html [ Crash Pass ] crbug.com/591099 fast/forms/onselect-textfield.html [ Failure ] @@ -12537,7 +11338,6 @@ crbug.com/591099 fast/forms/page-popup/page-popup-hide-window.html [ Failure ] crbug.com/591099 fast/forms/parser-associated-form-removal.html [ Failure ] crbug.com/591099 fast/forms/password-doubleclick-selection.html [ Crash Pass ] -crbug.com/591099 fast/forms/password-placeholder-text-security.html [ Crash Failure ] crbug.com/591099 fast/forms/paste-multiline-text-input.html [ Failure ] crbug.com/591099 fast/forms/pattern-attribute-001.html [ Crash Failure ] crbug.com/591099 fast/forms/pattern-attribute-002.html [ Crash Failure ] @@ -12628,22 +11428,17 @@ crbug.com/591099 fast/forms/reset-autofilled.html [ Failure ] crbug.com/591099 fast/forms/restore-selection-after-layout.html [ Crash ] crbug.com/591099 fast/forms/search/abspos-cancel-button-crash.html [ Crash ] -crbug.com/591099 fast/forms/search/disabled-search-input.html [ Failure ] crbug.com/591099 fast/forms/search/input-search-press-escape-key.html [ Crash Failure ] -crbug.com/591099 fast/forms/search/intrinsic-search-width-with-decoration-border-padding.html [ Failure ] crbug.com/591099 fast/forms/search/search-abs-pos-cancel-button.html [ Crash Failure ] crbug.com/591099 fast/forms/search/search-appearance-basic.html [ Crash Failure ] crbug.com/591099 fast/forms/search/search-cancel-button-events.html [ Crash ] crbug.com/591099 fast/forms/search/search-cancel-button-mouseup.html [ Crash Failure ] crbug.com/591099 fast/forms/search/search-cancel-button-style-sharing.html [ Crash Failure ] crbug.com/591099 fast/forms/search/search-cancel-in-invisible-elements.html [ Crash Pass ] -crbug.com/591099 fast/forms/search/search-change-type-onsearch.html [ Timeout ] -crbug.com/591099 fast/forms/search/search-click-in-placeholder.html [ Failure ] crbug.com/591099 fast/forms/search/search-delete-while-cancel-button-clicked.html [ Crash ] crbug.com/591099 fast/forms/search/search-disabled-readonly.html [ Crash Failure ] crbug.com/591099 fast/forms/search/search-display-none-cancel-button.html [ Crash Failure ] crbug.com/591099 fast/forms/search/search-hide-cancel-on-cancel.html [ Crash Failure ] -crbug.com/591099 fast/forms/search/search-placeholder-value-changed.html [ Failure ] crbug.com/591099 fast/forms/search/search-rtl.html [ Crash Failure ] crbug.com/591099 fast/forms/search/search-setrangetext-noevents.html [ Crash Pass ] crbug.com/591099 fast/forms/search/search-setrangetext.html [ Crash Failure ] @@ -12670,7 +11465,7 @@ crbug.com/591099 fast/forms/select-popup/popup-menu-crash-on-style-update.html [ Crash ] crbug.com/591099 fast/forms/select-popup/popup-menu-mouse-operations.html [ Failure ] crbug.com/591099 fast/forms/select-popup/popup-menu-nested-style.html [ Failure ] -crbug.com/591099 fast/forms/select-popup/popup-menu-touch-operations.html [ Failure ] +crbug.com/591099 fast/forms/select-popup/popup-menu-touch-operations.html [ Failure Timeout ] crbug.com/591099 fast/forms/select-popup/popup-menu-update-from-element.html [ Failure ] crbug.com/591099 fast/forms/select/003.html [ Failure ] crbug.com/591099 fast/forms/select/004.html [ Failure ] @@ -12963,9 +11758,7 @@ crbug.com/591099 fast/forms/text/input-double-click-selection-gap-bug.html [ Failure ] crbug.com/591099 fast/forms/text/input-element-attach-crash.html [ Crash Pass ] crbug.com/591099 fast/forms/text/input-field-text-truncated.html [ Crash Failure ] -crbug.com/591099 fast/forms/text/input-first-letter-edit.html [ Crash Failure ] crbug.com/591099 fast/forms/text/input-hit-test-border.html [ Failure ] -crbug.com/591099 fast/forms/text/input-implicit-length-limit.html [ Crash Timeout ] crbug.com/591099 fast/forms/text/input-live-pseudo-selectors.html [ Crash Failure ] crbug.com/591099 fast/forms/text/input-maxlength-ime-completed.html [ Failure ] crbug.com/591099 fast/forms/text/input-maxlength-ime-preedit.html [ Failure ] @@ -12975,7 +11768,6 @@ 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 ] crbug.com/591099 fast/forms/text/input-placeholder-visibility-1.html [ Failure ] -crbug.com/591099 fast/forms/text/input-placeholder-visibility-2.html [ Crash 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 ] crbug.com/591099 fast/forms/text/input-readonly-dimmed.html [ Crash Failure ] @@ -13005,8 +11797,6 @@ crbug.com/591099 fast/forms/text/placeholder-and-default-value.html [ Crash Pass ] crbug.com/591099 fast/forms/text/placeholder-crash-with-scrollbar-corner.html [ Crash ] crbug.com/591099 fast/forms/text/placeholder-dom-property.html [ Failure ] -crbug.com/591099 fast/forms/text/placeholder-pseudo-style.html [ Crash Failure ] -crbug.com/591099 fast/forms/text/placeholder-set-attribute.html [ Failure ] crbug.com/591099 fast/forms/text/placeholder-set-value.html [ Crash Pass ] crbug.com/591099 fast/forms/text/placeholder-with-positioned-element.html [ Crash Pass ] crbug.com/591099 fast/forms/text/text-appearance-basic.html [ Crash Failure ] @@ -13015,25 +11805,21 @@ crbug.com/591099 fast/forms/text/text-change-event-after-updating-default.html [ Crash ] crbug.com/591099 fast/forms/text/text-dir-auto-with-placeholder.html [ Crash ] crbug.com/591099 fast/forms/text/text-field-setvalue-crash.html [ Failure ] -crbug.com/591099 fast/forms/text/text-focus-into-view.html [ Crash Failure ] crbug.com/591099 fast/forms/text/text-font-height-mismatch.html [ Crash Failure ] crbug.com/591099 fast/forms/text/text-height-grow.html [ Crash Pass ] crbug.com/591099 fast/forms/text/text-inner-overflow.html [ Failure ] -crbug.com/591099 fast/forms/text/text-input-event.html [ Failure ] crbug.com/591099 fast/forms/text/text-lineheight-centering.html [ Crash Pass ] crbug.com/591099 fast/forms/text/text-padding-dynamic-change.html [ Crash Pass ] crbug.com/591099 fast/forms/text/text-placeholder-in-flexbox.html [ Failure ] crbug.com/591099 fast/forms/text/text-reset-click-delete-text-change-event.html [ Crash Failure ] crbug.com/591099 fast/forms/text/text-select-disabled.html [ Crash Failure ] crbug.com/591099 fast/forms/text/text-select-invisible.html [ Crash Failure ] -crbug.com/591099 fast/forms/text/text-select-noscroll.html [ Crash Failure ] crbug.com/591099 fast/forms/text/text-selection-after-type-change.html [ Crash ] crbug.com/591099 fast/forms/text/text-set-selection-crash.html [ Crash ] crbug.com/591099 fast/forms/text/text-update-datalist-while-focused.html [ Failure ] crbug.com/591099 fast/forms/text/text-window-lost-focus-change-event.html [ Failure Timeout ] crbug.com/591099 fast/forms/text/textfield-focus-out.html [ Crash ] crbug.com/591099 fast/forms/text/textfield-focus-ring.html [ Failure ] -crbug.com/591099 fast/forms/text/textfield-inside-anchor.html [ Failure ] crbug.com/591099 fast/forms/text/textfield-outline.html [ Crash Failure ] crbug.com/591099 fast/forms/text/textfield-overflow-by-value-update.html [ Crash Failure ] crbug.com/591099 fast/forms/text/textfield-overflow.html [ Failure ] @@ -13058,12 +11844,10 @@ crbug.com/591099 fast/forms/textarea/textarea-appearance-wrap.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-arrow-navigation.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-checkValidity-crash.html [ Failure ] -crbug.com/591099 fast/forms/textarea/textarea-cloned-text-match.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-crlf.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-default-value-leading-newline.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-dir-auto-with-placeholder.html [ Crash ] crbug.com/591099 fast/forms/textarea/textarea-initial-caret-position.html [ Crash Failure ] -crbug.com/591099 fast/forms/textarea/textarea-inline-block-baseline.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-input-event.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-inputmode.html [ Failure ] crbug.com/591099 fast/forms/textarea/textarea-linewrap-dynamic.html [ Crash Failure ] @@ -13075,25 +11859,21 @@ crbug.com/591099 fast/forms/textarea/textarea-no-scroll-on-blur.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-node-removed-from-document-crash.html [ Crash ] crbug.com/591099 fast/forms/textarea/textarea-nowrap-paste-eol.html [ Crash Failure Pass ] -crbug.com/591099 fast/forms/textarea/textarea-paste-newline.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-dom-property.html [ Failure ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-paint-order-2.html [ Failure Pass ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-paint-order.html [ Failure ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-pseudo-style.html [ Crash Pass ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-relayout-assertion.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-scroll.html [ Crash Pass ] -crbug.com/591099 fast/forms/textarea/textarea-placeholder-set-attribute.html [ Failure ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-set-value.html [ Crash Pass ] 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-visibility-3.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-placeholder-wrapping.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-preline-eol.html [ Crash Pass ] 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 ] crbug.com/591099 fast/forms/textarea/textarea-scrollbar.html [ Crash Failure ] -crbug.com/591099 fast/forms/textarea/textarea-scrolled-endline-caret.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-scrolled-focus-ring.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-scrolled-mask.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-scrolled-type.html [ Crash Failure ] @@ -13106,8 +11886,6 @@ crbug.com/591099 fast/forms/textarea/textarea-setvalue-without-renderer.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-submit-crash.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-textlength.html [ Crash Failure ] -crbug.com/591099 fast/forms/textarea/textarea-type-spaces.html [ Failure ] -crbug.com/591099 fast/forms/textarea/textarea-value-last-eol.html [ Failure ] crbug.com/591099 fast/forms/textarea/textarea-width.html [ Crash Failure ] crbug.com/591099 fast/forms/textarea/textarea-wrap-attribute.html [ Failure ] crbug.com/591099 fast/forms/textfield-change-event.html [ Crash ] @@ -13226,7 +12004,7 @@ crbug.com/591099 fast/frames/empty-cols-attribute.html [ Failure ] crbug.com/591099 fast/frames/empty-frame-document.html [ Failure ] crbug.com/591099 fast/frames/empty-frame-src.html [ Failure ] -crbug.com/591099 fast/frames/focus-controller-crash-change-event.html [ Timeout ] +crbug.com/591099 fast/frames/focus-controller-crash-change-event.html [ Crash Timeout ] crbug.com/591099 fast/frames/form-submission-early-return-for-sandboxed-iframes.html [ Crash ] crbug.com/591099 fast/frames/frame-dimensions-before-parent-layout.html [ Failure ] crbug.com/591099 fast/frames/frame-focus-no-focusout-event.html [ Crash ] @@ -13279,7 +12057,6 @@ crbug.com/591099 fast/frames/iframe-set-same-location.html [ Failure ] crbug.com/591099 fast/frames/iframe-set-same-src.html [ Failure ] crbug.com/591099 fast/frames/iframe-text-contents.html [ Failure ] -crbug.com/591099 fast/frames/iframe-window-focus.html [ Failure ] crbug.com/591099 fast/frames/iframe-with-frameborder.html [ Failure ] crbug.com/591099 fast/frames/inline-object-inside-frameset.html [ Failure ] crbug.com/591099 fast/frames/invalid.html [ Failure ] @@ -13292,7 +12069,6 @@ crbug.com/591099 fast/frames/open-then-unload.html [ Failure ] crbug.com/591099 fast/frames/open-without-opener-frame-crash.html [ Failure ] crbug.com/591099 fast/frames/out-of-document-iframe-has-child-frame.html [ Crash Failure ] -crbug.com/591099 fast/frames/page-visibility-crash.html [ Crash ] crbug.com/591099 fast/frames/paint-iframe-background.html [ Failure ] crbug.com/591099 fast/frames/parser-append-subframe-count.html [ Failure ] crbug.com/591099 fast/frames/reattach-in-unload.html [ Failure ] @@ -13410,9 +12186,7 @@ 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/broken-image-with-size-hidpi.html [ Crash Failure ] crbug.com/591099 fast/hidpi/gradient-with-scaled-ancestor.html [ Failure ] -crbug.com/591099 fast/hidpi/image-set-list-style-image.html [ Crash ] 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-invalid-inputs-except-one.html [ Crash Pass ] @@ -13423,7 +12197,6 @@ crbug.com/591099 fast/hidpi/image-srcset-png-4.html [ Failure Pass ] crbug.com/591099 fast/hidpi/image-srcset-png-canvas.html [ Failure Pass ] crbug.com/591099 fast/hidpi/image-srcset-svg.html [ Failure Pass ] -crbug.com/591099 fast/hidpi/resize-corner-hidpi.html [ Failure ] crbug.com/591099 fast/hidpi/scrollbar-appearance-decrease-device-scale-factor.html [ Failure ] crbug.com/591099 fast/hidpi/scrollbar-appearance-increase-device-scale-factor.html [ Failure ] crbug.com/591099 fast/history/form-submit-in-frame-via-onclick.html [ Timeout ] @@ -13442,21 +12215,18 @@ crbug.com/591099 fast/history/redirect-via-iframe.html [ Failure ] crbug.com/591099 fast/history/same-document-iframes-changing-fragment.html [ Crash ] crbug.com/591099 fast/history/same-document-iframes-changing-pushstate.html [ Crash ] -crbug.com/591099 fast/history/saves-state-after-frame-nav.html [ Crash Pass ] crbug.com/591099 fast/history/scroll-restoration/scroll-restoration-fragment-navigation-crossdoc.html [ Crash ] crbug.com/591099 fast/history/scroll-restoration/scroll-restoration-navigation.html [ Crash ] crbug.com/591099 fast/history/scroll-restoration/scroll-restoration-push-replace.html [ Failure Pass ] crbug.com/591099 fast/history/self-is-visited.html [ Failure ] crbug.com/591099 fast/history/sibling-visited-test.html [ Failure ] crbug.com/591099 fast/history/state-object-few-arguements-exception.html [ Failure ] -crbug.com/591099 fast/history/visited-link-hover-text-decoration-color.html [ Failure ] crbug.com/591099 fast/history/window-open.html [ Crash Failure ] crbug.com/591099 fast/html/adjacent-html-context-element.html [ Failure ] crbug.com/591099 fast/html/adopt-parent-frame.html [ Failure ] crbug.com/591099 fast/html/clone-range.html [ Failure ] crbug.com/591099 fast/html/crash-on-invalid-selection-index.html [ Crash Pass ] crbug.com/591099 fast/html/crash-style-first-letter.html [ Failure ] -crbug.com/591099 fast/html/draggable-controls.html [ Crash ] crbug.com/591099 fast/html/draggable.html [ Failure ] crbug.com/591099 fast/html/eventhandler-attribute-non-callable.html [ Failure ] crbug.com/591099 fast/html/hidden-attr-dom.html [ Failure ] @@ -13490,7 +12260,7 @@ crbug.com/591099 fast/html/progress-user-modify.html [ Failure ] crbug.com/591099 fast/html/script-allowed-types-languages.html [ Failure ] crbug.com/591099 fast/html/select-dropdown-consistent-background-color.html [ Failure Pass ] -crbug.com/591099 fast/html/set-text-direction.html [ Failure ] +crbug.com/591099 fast/html/set-text-direction.html [ Crash Failure ] crbug.com/591099 fast/html/tab-order.html [ Crash Failure ] crbug.com/591099 fast/html/tabindex-nonfocusable.html [ Crash ] crbug.com/591099 fast/html/unknown-tag.html [ Crash Failure ] @@ -13517,7 +12287,6 @@ crbug.com/591099 fast/inline/br-client-rect.html [ Failure ] crbug.com/591099 fast/inline/break-between-nobr.html [ Failure ] crbug.com/591099 fast/inline/clean-after-removing-temp-boxes.html [ Failure ] -crbug.com/591099 fast/inline/collapsing-text-after-list-markers.html [ Crash Failure ] crbug.com/591099 fast/inline/continuation-inlines-inserted-in-reverse-after-block.html [ Failure ] crbug.com/591099 fast/inline/continuation-outlines-with-layers.html [ Failure ] crbug.com/591099 fast/inline/continuation-outlines.html [ Failure ] @@ -13532,11 +12301,9 @@ crbug.com/591099 fast/inline/fixed-pos-moves-with-abspos-parent-relative-ancestor.html [ Failure ] crbug.com/591099 fast/inline/fixed-pos-moves-with-abspos-parent.html [ Failure ] crbug.com/591099 fast/inline/fixed-pos-with-transform-container-moves-with-abspos-parent.html [ Failure ] -crbug.com/591099 fast/inline/inline-body-crash.html [ Crash ] crbug.com/591099 fast/inline/inline-body-with-inline-child.html [ Failure ] crbug.com/591099 fast/inline/inline-borders-with-bidi-override.html [ Failure ] crbug.com/591099 fast/inline/inline-box-adjust-position-crash.html [ Crash ] -crbug.com/591099 fast/inline/inline-box-append-child-crash.html [ Crash ] crbug.com/591099 fast/inline/inline-box-background-long-image.html [ Failure ] crbug.com/591099 fast/inline/inline-box-background-repeat-x.html [ Failure ] crbug.com/591099 fast/inline/inline-box-background-repeat-y.html [ Failure ] @@ -13632,7 +12399,6 @@ crbug.com/591099 fast/js/array-some.html [ Crash ] crbug.com/591099 fast/js/array-sort-exception.html [ Failure ] crbug.com/591099 fast/js/assign.html [ Failure ] -crbug.com/591099 fast/js/bitwise-and-on-undefined.html [ Crash ] crbug.com/591099 fast/js/bom-in-file-retains-correct-offset.html [ Failure ] crbug.com/591099 fast/js/cached-eval-gc.html [ Failure ] crbug.com/591099 fast/js/callback-function-with-handle-event.html [ Failure ] @@ -13842,7 +12608,6 @@ crbug.com/591099 fast/js/string-replace-3.html [ Failure ] crbug.com/591099 fast/js/string-replace-exception-crash.html [ Failure ] crbug.com/591099 fast/js/switch-behaviour.html [ Failure ] -crbug.com/591099 fast/js/text-field-resize.html [ Failure ] crbug.com/591099 fast/js/throw-from-array-sort.html [ Failure ] crbug.com/591099 fast/js/toString-and-valueOf-override.html [ Failure Pass Timeout ] crbug.com/591099 fast/js/toString-dontEnum.html [ Failure ] @@ -13906,7 +12671,6 @@ crbug.com/591099 fast/lists/002.html [ Crash Failure ] crbug.com/591099 fast/lists/003-vertical.html [ Crash Failure ] crbug.com/591099 fast/lists/003.html [ Crash Failure ] -crbug.com/591099 fast/lists/004.html [ Crash ] crbug.com/591099 fast/lists/005-vertical.html [ Crash Failure ] crbug.com/591099 fast/lists/005.html [ Crash Failure ] crbug.com/591099 fast/lists/006-vertical.html [ Crash Failure ] @@ -13921,7 +12685,6 @@ crbug.com/591099 fast/lists/alpha-list-wrap.html [ Crash Failure ] crbug.com/591099 fast/lists/anonymous-items.html [ Crash Failure ] crbug.com/591099 fast/lists/big-list-marker.html [ Crash Failure ] -crbug.com/591099 fast/lists/calc-width-with-space.html [ Crash Failure ] crbug.com/591099 fast/lists/css3-counter-styles-052.html [ Crash Failure ] crbug.com/591099 fast/lists/css3-counter-styles-053.html [ Crash Failure ] crbug.com/591099 fast/lists/css3-counter-styles-054.html [ Crash Failure ] @@ -13957,7 +12720,6 @@ crbug.com/591099 fast/lists/css3-counter-styles-088.html [ Crash Failure ] crbug.com/591099 fast/lists/css3-counter-styles-089.html [ Crash Failure ] crbug.com/591099 fast/lists/decimal-leading-zero.html [ Crash Pass ] -crbug.com/591099 fast/lists/drag-into-marker.html [ Crash Failure ] crbug.com/591099 fast/lists/dynamic-marker-crash.html [ Crash Failure ] crbug.com/591099 fast/lists/inline-before-content-after-list-marker.html [ Failure ] crbug.com/591099 fast/lists/inlineBoxWrapperNullCheck.html [ Crash Failure ] @@ -13966,31 +12728,22 @@ crbug.com/591099 fast/lists/li-minimum-long-value.html [ Crash Pass ] crbug.com/591099 fast/lists/li-style-alpha-huge-value-crash.html [ Crash Failure ] crbug.com/591099 fast/lists/li-values.html [ Crash Pass ] -crbug.com/591099 fast/lists/list-color-change-no-layout.html [ Crash ] -crbug.com/591099 fast/lists/list-item-line-height.html [ Crash Failure ] -crbug.com/591099 fast/lists/list-item-without-list-reparented-crash.html [ Crash ] crbug.com/591099 fast/lists/list-marker-avoid-float.html [ Crash Failure ] crbug.com/591099 fast/lists/list-marker-before-content-table.html [ Failure ] crbug.com/591099 fast/lists/list-marker-before-float-nested-rtl.html [ Crash Failure ] crbug.com/591099 fast/lists/list-marker-before-float-nested.html [ Crash Failure ] crbug.com/591099 fast/lists/list-marker-before-float-rtl.html [ Crash Failure ] crbug.com/591099 fast/lists/list-marker-before-float.html [ Crash Failure ] -crbug.com/591099 fast/lists/list-marker-before-overflow-hidden.html [ Crash ] -crbug.com/591099 fast/lists/list-marker-padding-overflow-hidden-rtl.html [ Crash ] -crbug.com/591099 fast/lists/list-marker-padding-overflow-hidden.html [ Crash Failure ] +crbug.com/591099 fast/lists/list-marker-before-overflow-hidden.html [ Crash Failure ] crbug.com/591099 fast/lists/list-marker-remove-crash.html [ Crash Pass ] crbug.com/591099 fast/lists/list-marker-set-overflow-line-box-crash.html [ Crash Pass ] -crbug.com/591099 fast/lists/list-marker-text-reverse.html [ Crash ] crbug.com/591099 fast/lists/list-marker-with-line-height.html [ Crash Failure ] crbug.com/591099 fast/lists/list-style-none-crash.html [ Failure ] crbug.com/591099 fast/lists/list-style-position-inside.html [ Crash ] crbug.com/591099 fast/lists/list-style-type-dynamic-change.html [ Crash Failure ] -crbug.com/591099 fast/lists/list-with-autosizing-crash.html [ Crash ] crbug.com/591099 fast/lists/marker-before-empty-inline.html [ Crash Failure ] crbug.com/591099 fast/lists/marker-image-error.html [ Crash Failure ] -crbug.com/591099 fast/lists/marker-preferred-margins.html [ Crash ] crbug.com/591099 fast/lists/markers-in-selection.html [ Crash Failure ] -crbug.com/591099 fast/lists/numeric-markers-outside-list.html [ Crash Failure ] crbug.com/591099 fast/lists/ol-display-types.html [ Crash Failure ] crbug.com/591099 fast/lists/ol-nested-items-dynamic-insert.html [ Crash Failure ] crbug.com/591099 fast/lists/ol-nested-items-dynamic-remove.html [ Crash Failure ] @@ -14005,15 +12758,9 @@ crbug.com/591099 fast/lists/ol-reversed-simple.html [ Crash Failure ] crbug.com/591099 fast/lists/ol-reversed-simple.xhtml [ Crash Failure ] crbug.com/591099 fast/lists/ol-start-dynamic.html [ Crash Failure ] -crbug.com/591099 fast/lists/ol-start-parsing.html [ Crash Failure ] -crbug.com/591099 fast/lists/ol-start-roman.html [ Crash ] -crbug.com/591099 fast/lists/olstart.html [ Crash Failure ] crbug.com/591099 fast/lists/ordered-list-with-no-ol-tag.html [ Crash Failure ] -crbug.com/591099 fast/lists/positioned-count-crash.html [ Crash ] crbug.com/591099 fast/lists/remove-listmarker-and-make-anonblock-empty-2.html [ Crash ] crbug.com/591099 fast/lists/remove-listmarker-and-make-anonblock-empty.html [ Crash Pass ] -crbug.com/591099 fast/lists/rtl-ordered-list.html [ Crash ] -crbug.com/591099 fast/lists/scrolled-marker-paint.html [ Crash Failure ] crbug.com/591099 fast/lists/w3-css3-list-styles-alphabetic.html [ Crash Failure Timeout ] crbug.com/591099 fast/lists/w3-css3-list-styles-deprecated.html [ Failure ] crbug.com/591099 fast/lists/w3-css3-list-styles-fallback-style.html [ Crash Failure ] @@ -14128,7 +12875,6 @@ crbug.com/591099 fast/mediastream/no-interface-object.html [ Failure ] crbug.com/591099 fast/multicol/5-levels-of-nesting-crash.html [ Failure ] crbug.com/591099 fast/multicol/abspos-after-break-after.html [ Failure ] -crbug.com/591099 fast/multicol/anonymous-block-split-crash.html [ Crash ] crbug.com/591099 fast/multicol/auto-height-forced-break-complex-margin-collapsing.html [ Failure ] crbug.com/591099 fast/multicol/balance-break-inside-avoid.html [ Failure ] crbug.com/591099 fast/multicol/balance-breakafter-before-nested-block.html [ Failure ] @@ -14159,7 +12905,6 @@ crbug.com/591099 fast/multicol/client-rects-rtl.html [ Failure ] crbug.com/591099 fast/multicol/client-rects-sole-empty-block.html [ Failure ] crbug.com/591099 fast/multicol/client-rects.html [ Failure ] -crbug.com/591099 fast/multicol/clone-block-children-inline-mismatch-crash.html [ Crash ] crbug.com/591099 fast/multicol/column-break-with-balancing.html [ Failure ] crbug.com/591099 fast/multicol/column-count-with-rules.html [ Failure ] crbug.com/591099 fast/multicol/column-rules.html [ Failure ] @@ -14172,7 +12917,6 @@ crbug.com/591099 fast/multicol/composited-relpos-in-clipped.html [ Failure ] crbug.com/591099 fast/multicol/composited-relpos-overlapping-will-change.html [ Failure ] crbug.com/591099 fast/multicol/composited-relpos-resize.html [ Failure ] -crbug.com/591099 fast/multicol/composited-relpos-simple.html [ Crash ] crbug.com/591099 fast/multicol/composited-relpos.html [ Failure ] crbug.com/591099 fast/multicol/composited-with-child-layer-in-next-column.html [ Failure ] crbug.com/591099 fast/multicol/composited-with-overflow-in-next-column.html [ Failure ] @@ -14187,8 +12931,6 @@ crbug.com/591099 fast/multicol/dynamic/change-block-with-inline-to-multicol-assert.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/change-second-row-height.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/change-spanner-display.html [ Crash Failure ] -crbug.com/591099 fast/multicol/dynamic/change-spanner-parent-display.html [ Crash ] -crbug.com/591099 fast/multicol/dynamic/former-spanner-in-float-in-continuation-crash.html [ Crash ] crbug.com/591099 fast/multicol/dynamic/insert-before-sole-abspos.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/insert-block-among-text-in-anonymous-wrapper.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/insert-block-before-spanner-before-content.html [ Failure ] @@ -14210,8 +12952,6 @@ crbug.com/591099 fast/multicol/dynamic/insert-spanner-pseudo-before.html [ Crash Failure ] crbug.com/591099 fast/multicol/dynamic/invalid-spanner-container-becomes-valid.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/multicol-with-abspos-svg-with-foreignobject-with-multicol-crash.html [ Failure ] -crbug.com/591099 fast/multicol/dynamic/relpos-becomes-static-has-abspos.html [ Crash ] -crbug.com/591099 fast/multicol/dynamic/remove-abspos-next-to-spanner.html [ Crash ] crbug.com/591099 fast/multicol/dynamic/remove-content-before-inner-multicol-with-spanner-crash.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/remove-content-from-scrollable.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/remove-inline-and-spanner-after-spanner-foreignObject.html [ Failure ] @@ -14231,7 +12971,6 @@ 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 ] -crbug.com/591099 fast/multicol/file-upload-as-multicol.html [ Crash Failure ] 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 ] @@ -14262,7 +13001,6 @@ crbug.com/591099 fast/multicol/float-with-margin-moved-by-child-line-and-unbreakable.html [ Failure ] crbug.com/591099 fast/multicol/float-with-margin-moved-by-child-line.html [ Failure ] crbug.com/591099 fast/multicol/float-with-margin-moved-unbreakable.html [ Failure ] -crbug.com/591099 fast/multicol/flowthread-with-floats-destroyed-crash.html [ Crash ] crbug.com/591099 fast/multicol/forced-break-after-block-with-spanner.html [ Crash Failure ] crbug.com/591099 fast/multicol/forced-break-after-last-block-before-spanner.html [ Failure ] crbug.com/591099 fast/multicol/forced-break-before-complex-margin-collapsing.html [ Failure ] @@ -14276,16 +13014,13 @@ crbug.com/591099 fast/multicol/hit-test-gap-between-pages.html [ Crash Failure ] crbug.com/591099 fast/multicol/image-inside-nested-blocks-with-border.html [ Failure ] crbug.com/591099 fast/multicol/image-loaded-before-layout-assert.html [ Failure ] -crbug.com/591099 fast/multicol/infinite-height-causing-fractional-row-height-crash.html [ Crash ] crbug.com/591099 fast/multicol/infinitely-tall-content-in-outer-crash.html [ Failure ] crbug.com/591099 fast/multicol/inline-children-crash.html [ Failure ] crbug.com/591099 fast/multicol/inner-multicol-moved-into-continuation.html [ Failure ] crbug.com/591099 fast/multicol/input-as-multicol.html [ Crash Failure Pass ] crbug.com/591099 fast/multicol/input-type-number.html [ Crash Pass ] -crbug.com/591099 fast/multicol/large-padding-crash.html [ Crash ] crbug.com/591099 fast/multicol/layers-split-across-columns.html [ Failure ] crbug.com/591099 fast/multicol/line-pushed-down-by-float.html [ Failure ] -crbug.com/591099 fast/multicol/listbox-as-multicol.html [ Failure ] crbug.com/591099 fast/multicol/many-lines-overflow-in-single-row-inner.html [ Failure ] crbug.com/591099 fast/multicol/margin-bottom-and-break-after.html [ Failure ] crbug.com/591099 fast/multicol/min-height-greater-than-content.html [ Failure ] @@ -14296,7 +13031,7 @@ crbug.com/591099 fast/multicol/mixed-positioning-stacking-order.html [ Failure ] crbug.com/591099 fast/multicol/multicol-becomes-paged-auto-height.html [ Crash Pass ] crbug.com/591099 fast/multicol/multicol-becomes-paged-fixed-height.html [ Crash Pass ] -crbug.com/591099 fast/multicol/multicol-with-spanner-becomes-paged.html [ Crash ] +crbug.com/591099 fast/multicol/multicol-with-spanner-becomes-paged.html [ Crash Failure ] crbug.com/591099 fast/multicol/negative-margins-crash.html [ Failure ] crbug.com/591099 fast/multicol/nested-3-multicols-fixed-height.html [ Failure ] crbug.com/591099 fast/multicol/nested-after-composited-layer-crash.html [ Failure ] @@ -14318,7 +13053,6 @@ crbug.com/591099 fast/multicol/nested-with-composited-and-multicol-crash.html [ Failure ] crbug.com/591099 fast/multicol/nested-with-forced-breaks-in-eariler-rows.html [ Failure ] crbug.com/591099 fast/multicol/nested-with-line-taller-than-outer.html [ Failure ] -crbug.com/591099 fast/multicol/nested-with-spanner-inside-margins-crash.html [ Crash ] crbug.com/591099 fast/multicol/newmulticol/balance-images.html [ Failure ] crbug.com/591099 fast/multicol/newmulticol/balance-maxheight1.html [ Failure ] crbug.com/591099 fast/multicol/newmulticol/balance-maxheight2.html [ Failure ] @@ -14343,7 +13077,6 @@ 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 ] -crbug.com/591099 fast/multicol/newmulticol/list-item.html [ Crash Failure ] crbug.com/591099 fast/multicol/newmulticol/orphans-and-widows-balance.html [ Failure ] crbug.com/591099 fast/multicol/null-lastFloat-in-removeFloatingObjectsBelow.html [ Failure ] crbug.com/591099 fast/multicol/one-column-with-break.html [ Failure ] @@ -14395,15 +13128,10 @@ crbug.com/591099 fast/multicol/span/button-with-spanner-crash.html [ Failure ] crbug.com/591099 fast/multicol/span/change-spanner-margins.html [ Failure ] crbug.com/591099 fast/multicol/span/clone-anonymous-block-non-inline-child-crash.html [ Crash Failure ] -crbug.com/591099 fast/multicol/span/clone-before-after-content-crash.html [ Crash ] -crbug.com/591099 fast/multicol/span/empty-anonymous-block-split-crash.html [ Crash ] -crbug.com/591099 fast/multicol/span/empty-block-between-spanners.html [ Crash ] -crbug.com/591099 fast/multicol/span/empty-block-with-bottom-margin-between-spanners.html [ Crash ] crbug.com/591099 fast/multicol/span/fill-after-spanner-exact-fit.html [ Failure ] crbug.com/591099 fast/multicol/span/fill-after-spanner-extra-height.html [ Failure ] crbug.com/591099 fast/multicol/span/float.html [ Failure ] crbug.com/591099 fast/multicol/span/foreignObject.html [ Failure ] -crbug.com/591099 fast/multicol/span/generated-child-split-flow-crash.html [ Crash ] crbug.com/591099 fast/multicol/span/in-nested-multicol-with-hard-breaks.html [ Failure ] crbug.com/591099 fast/multicol/span/in-nested-multicol-with-list-item.html [ Failure ] crbug.com/591099 fast/multicol/span/in-nested-multicol-with-soft-breaks-inside.html [ Failure ] @@ -14414,7 +13142,6 @@ crbug.com/591099 fast/multicol/span/inside-overflow-hidden-crash.html [ Failure ] crbug.com/591099 fast/multicol/span/invalid-span-1.html [ Failure ] crbug.com/591099 fast/multicol/span/margin-on-multicol.html [ Failure ] -crbug.com/591099 fast/multicol/span/multicol-with-spanner-becomes-regular-block.html [ Crash ] crbug.com/591099 fast/multicol/span/nested-multicol.html [ Failure ] crbug.com/591099 fast/multicol/span/offset-properties.html [ Failure ] crbug.com/591099 fast/multicol/span/outer-column-break-after-inner-spanner-2.html [ Crash Failure ] @@ -14435,7 +13162,6 @@ crbug.com/591099 fast/multicol/span/relpos-in-block.html [ Crash Failure ] crbug.com/591099 fast/multicol/span/relpos-spanner-with-abspos-child.html [ Failure ] crbug.com/591099 fast/multicol/span/remaining-space-in-last-column.html [ Failure Pass ] -crbug.com/591099 fast/multicol/span/runin-continuation-crash.html [ Crash ] crbug.com/591099 fast/multicol/span/simple-margins.html [ Failure ] crbug.com/591099 fast/multicol/span/sole-spanner-inside-div.html [ Failure ] crbug.com/591099 fast/multicol/span/sole-svg-spanner-with-foreignObject-crash.html [ Failure ] @@ -14443,12 +13169,10 @@ crbug.com/591099 fast/multicol/span/spanner-img.html [ Crash Failure ] crbug.com/591099 fast/multicol/span/spanner-in-flexbox-in-multicol-in-flexbox-crash.html [ Failure ] crbug.com/591099 fast/multicol/span/spanner-inline-block.html [ Failure ] -crbug.com/591099 fast/multicol/span/spanner-table.html [ Crash ] crbug.com/591099 fast/multicol/span/spanner-with-margin.html [ Crash Failure ] crbug.com/591099 fast/multicol/span/summary-split.html [ Failure ] crbug.com/591099 fast/multicol/span/two-rows-then-spanner-then-two-rows.html [ Failure ] crbug.com/591099 fast/multicol/span/underflow-after-spanner.html [ Crash Failure ] -crbug.com/591099 fast/multicol/span/update-after-content-before-child-crash.html [ Crash ] crbug.com/591099 fast/multicol/span/vertical-lr.html [ Failure ] crbug.com/591099 fast/multicol/span/vertical-rl.html [ Failure ] crbug.com/591099 fast/multicol/table-caption-and-cells-fixed-width.html [ Failure ] @@ -14573,7 +13297,6 @@ crbug.com/591099 fast/overflow/resize-inherit.html [ Failure ] crbug.com/591099 fast/overflow/scroll-div-hide-show.html [ Failure ] crbug.com/591099 fast/overflow/scroll-html-hidden-body.html [ Failure Pass ] -crbug.com/591099 fast/overflow/scroll-html-paged-body.html [ Crash ] crbug.com/591099 fast/overflow/scroll-nested-positioned-layer-in-overflow.html [ Failure ] crbug.com/591099 fast/overflow/scroll-vertical-not-horizontal.html [ Failure ] crbug.com/591099 fast/overflow/scrollRevealButton.html [ Failure ] @@ -14586,7 +13309,6 @@ crbug.com/591099 fast/overflow/trailing-float-linebox.html [ Failure ] 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 Pass ] crbug.com/591099 fast/pagination/body-make-unpaginated.html [ Failure ] 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 ] @@ -14596,7 +13318,6 @@ crbug.com/591099 fast/pagination/caret-range-outside-paged-y-rtl-vertical-rl.html [ Crash Failure ] crbug.com/591099 fast/pagination/caret-range-outside-paged-y-rtl.html [ Crash Failure ] crbug.com/591099 fast/pagination/caret-range-outside-paged-y.html [ Crash Failure ] -crbug.com/591099 fast/pagination/div-make-paginated.html [ Crash ] crbug.com/591099 fast/pagination/div-x-horizontal-tb-ltr.html [ Crash Failure ] crbug.com/591099 fast/pagination/div-x-horizontal-tb-rtl.html [ Crash Failure ] crbug.com/591099 fast/pagination/div-x-vertical-lr-ltr.html [ Crash Failure ] @@ -14677,7 +13398,6 @@ crbug.com/591099 fast/parser/inselect-tokenization.html [ Crash ] crbug.com/591099 fast/parser/invalid-entity-document-write.html [ Failure ] crbug.com/591099 fast/parser/move-during-parsing.html [ Failure ] -crbug.com/591099 fast/parser/nested-fragment-parser-crash.html [ Crash ] crbug.com/591099 fast/parser/nofoo-tags-inside-paragraph.html [ Failure ] crbug.com/591099 fast/parser/non-script-endtag-in-textmode.html [ Failure ] crbug.com/591099 fast/parser/noscript-with-javascript-disabled.html [ Failure ] @@ -14843,17 +13563,12 @@ crbug.com/591099 fast/replaced/vertical-writing-mode-max-logical-width-replaced.html [ Failure ] crbug.com/591099 fast/replaced/width100percent-checkbox.html [ Failure ] crbug.com/591099 fast/replaced/width100percent-radio.html [ Failure ] -crbug.com/591099 fast/replaced/width100percent-searchfield.html [ Crash Failure ] crbug.com/591099 fast/ruby/add-text-to-block-ruby-with-after-pseudo-crash.html [ Crash Pass ] crbug.com/591099 fast/ruby/after-doesnt-crash.html [ Crash Failure ] crbug.com/591099 fast/ruby/base-shorter-than-text.html [ Crash Failure ] -crbug.com/591099 fast/ruby/before-block-doesnt-crash.html [ Crash Failure ] crbug.com/591099 fast/ruby/before-doesnt-crash.html [ Crash Failure ] -crbug.com/591099 fast/ruby/before-table-doesnt-crash.html [ Crash Failure ] -crbug.com/591099 fast/ruby/float-object-doesnt-crash.html [ Crash Failure ] crbug.com/591099 fast/ruby/float-overhang-from-ruby-text.html [ Crash Failure ] crbug.com/591099 fast/ruby/floating-ruby-text.html [ Crash Failure ] -crbug.com/591099 fast/ruby/generated-before-counter-doesnt-crash.html [ Crash Pass ] crbug.com/591099 fast/ruby/line-break-ruby.html [ Crash ] crbug.com/591099 fast/ruby/list-item-marker-in-block-ruby.html [ Crash Failure ] crbug.com/591099 fast/ruby/merge-adjacent-anonymous-blocks-inside-ruby-run.html [ Crash Failure ] @@ -14876,7 +13591,6 @@ crbug.com/591099 fast/ruby/ruby-block-style-not-updated.html [ Crash Failure ] crbug.com/591099 fast/ruby/ruby-empty-rt.html [ Crash Failure ] crbug.com/591099 fast/ruby/ruby-first-letter.html [ Crash Pass ] -crbug.com/591099 fast/ruby/ruby-illegal-1.html [ Crash ] crbug.com/591099 fast/ruby/ruby-illegal-4.html [ Crash Pass ] crbug.com/591099 fast/ruby/ruby-illegal-5.html [ Crash Pass ] crbug.com/591099 fast/ruby/ruby-illegal-6.html [ Crash Pass ] @@ -14973,7 +13687,6 @@ crbug.com/591099 fast/scrolling/html-element-client-rect-excludes-scrollbars.html [ Failure ] crbug.com/591099 fast/scrolling/jquery-rtl-scroll-type.html [ Failure Pass ] crbug.com/591099 fast/scrolling/keyboard-scroll-page-scale.html [ Failure ] -crbug.com/591099 fast/scrolling/listbox-wheel-event.html [ Failure ] crbug.com/591099 fast/scrolling/non-composited-scrolling-repaint-to-ancestor-backing.html [ Failure Pass ] crbug.com/591099 fast/scrolling/overflow-auto-ltr.html [ Failure ] crbug.com/591099 fast/scrolling/overflow-scrollability.html [ Failure ] @@ -14986,13 +13699,8 @@ crbug.com/591099 fast/scrolling/scroll-to-origin-with-options-no-layout.html [ Failure Pass ] crbug.com/591099 fast/scrolling/scrollable-area-dynamic-overflow.html [ Failure Pass ] crbug.com/591099 fast/scrolling/scrollable-area-frame-overflow-hidden.html [ Crash Failure ] -crbug.com/591099 fast/scrolling/scrollable-area-frame-overried-inherited-visibility-hidden.html [ Crash Failure ] -crbug.com/591099 fast/scrolling/scrollable-area-frame-scrolling-no-overried-inherited-visibility-hidden.html [ Crash Failure ] crbug.com/591099 fast/scrolling/scrollable-area-frame-scrolling-no-visibility-hidden-child.html [ Crash Pass ] -crbug.com/591099 fast/scrolling/scrollable-area-frame-scrolling-no.html [ Crash Failure ] -crbug.com/591099 fast/scrolling/scrollable-area-frame-scrolling-yes.html [ Crash Failure ] crbug.com/591099 fast/scrolling/scrollable-area-frame-visibility-hidden-child.html [ Crash Pass ] -crbug.com/591099 fast/scrolling/scrollable-area-frame.html [ Crash Failure ] crbug.com/591099 fast/scrolling/scrollable-area-overflow-auto-visibility-override.html [ Failure Pass ] crbug.com/591099 fast/scrolling/scrollable-area-overflow-auto-visibility-visible.html [ Failure Pass ] crbug.com/591099 fast/scrolling/scrollable-area-overflow-auto.html [ Failure Pass ] @@ -15004,10 +13712,6 @@ crbug.com/591099 fast/scrolling/scrolling-apis-nan-scroll-position.html [ Failure ] crbug.com/591099 fast/scrolling/scrolling-apis-subpixel.html [ Failure ] crbug.com/591099 fast/scrolling/set-root-scroller.html [ Failure ] -crbug.com/591099 fast/selectors/001.html [ Crash ] -crbug.com/591099 fast/selectors/012.html [ Crash ] -crbug.com/591099 fast/selectors/013.html [ Crash ] -crbug.com/591099 fast/selectors/015.html [ Crash ] crbug.com/591099 fast/selectors/018.html [ Failure ] crbug.com/591099 fast/selectors/018b.html [ Failure ] crbug.com/591099 fast/selectors/019.html [ Failure ] @@ -15089,7 +13793,6 @@ crbug.com/591099 fast/selectors/element-closest-scope.html [ Failure ] crbug.com/591099 fast/selectors/focus-within-iframe.html [ Crash ] crbug.com/591099 fast/selectors/focus-within-window-inactive.html [ Crash ] -crbug.com/591099 fast/selectors/input-with-selection-pseudo-element.html [ Crash Failure ] crbug.com/591099 fast/selectors/lang-inheritance.html [ Failure Pass ] crbug.com/591099 fast/selectors/lang-inheritance2.html [ Failure Pass ] crbug.com/591099 fast/selectors/lang-vs-xml-lang-xhtml.xhtml [ Failure Pass ] @@ -15239,23 +13942,19 @@ crbug.com/591099 fast/sub-pixel/float-with-right-margin-zoom.html [ Failure ] 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/replaced-element-baseline.html [ Failure ] crbug.com/591099 fast/sub-pixel/selection/selection-rect-in-sub-pixel-table.html [ Failure ] crbug.com/591099 fast/sub-pixel/shadows-computed-style.html [ Failure ] crbug.com/591099 fast/sub-pixel/should-not-repaint-subpixel-composited-layer.html [ Failure Pass ] crbug.com/591099 fast/sub-pixel/size-of-box-with-zoom.html [ Failure ] crbug.com/591099 fast/sub-pixel/size-of-span-with-different-positions.html [ Failure ] -crbug.com/591099 fast/sub-pixel/sub-pixel-accumulates-to-layers.html [ Crash ] crbug.com/591099 fast/sub-pixel/sub-pixel-border.html [ Crash ] crbug.com/591099 fast/sub-pixel/sub-pixel-precision-on-height-of-replaced-element.html [ Failure ] crbug.com/591099 fast/sub-pixel/table-rows-have-stable-height.html [ Failure ] crbug.com/591099 fast/sub-pixel/vertical-align-middle-overflow.html [ Failure Pass ] -crbug.com/591099 fast/table/001.html [ Crash ] crbug.com/591099 fast/table/003.html [ Failure ] crbug.com/591099 fast/table/007.html [ Failure ] crbug.com/591099 fast/table/009.html [ Failure ] crbug.com/591099 fast/table/014.html [ Failure Pass ] -crbug.com/591099 fast/table/018.html [ Crash Failure ] crbug.com/591099 fast/table/026.html [ Failure Pass ] crbug.com/591099 fast/table/032.html [ Failure ] crbug.com/591099 fast/table/034.html [ Failure ] @@ -15279,10 +13978,6 @@ crbug.com/591099 fast/table/backgr_border-table-quirks-collapsed-border.html [ Failure ] crbug.com/591099 fast/table/backgr_border-table-quirks.html [ Failure ] crbug.com/591099 fast/table/backgr_image-crash.html [ Failure ] -crbug.com/591099 fast/table/backgr_layers-opacity-collapsed-border.html [ Crash Failure ] -crbug.com/591099 fast/table/backgr_layers-opacity.html [ Crash Failure ] -crbug.com/591099 fast/table/backgr_layers-show-collapsed-border.html [ Crash Failure ] -crbug.com/591099 fast/table/backgr_layers-show.html [ Crash Failure ] crbug.com/591099 fast/table/bad-replaced-sizing-preferred-logical-widths.html [ Failure ] crbug.com/591099 fast/table/baseline-align-rowspan.html [ Failure ] crbug.com/591099 fast/table/border-changes.html [ Failure ] @@ -15317,7 +14012,6 @@ crbug.com/591099 fast/table/colspan-with-empty-cells-needing-extra-width.html [ Failure ] crbug.com/591099 fast/table/column-in-inline.html [ Failure ] crbug.com/591099 fast/table/columngroup-inside-columngroup.html [ Failure ] -crbug.com/591099 fast/table/computeLogicalWidth-table-needsSectionRecalc.html [ Crash ] crbug.com/591099 fast/table/containment-crash.html [ Failure ] crbug.com/591099 fast/table/containment.html [ Failure ] crbug.com/591099 fast/table/convert-inline-anonoymous-wrapper-to-block.html [ Failure Pass ] @@ -15424,10 +14118,8 @@ crbug.com/591099 fast/table/table-all-rowspans-height-distribution-in-rows.html [ Failure ] crbug.com/591099 fast/table/table-before-child-in-table.html [ Failure Pass ] crbug.com/591099 fast/table/table-caption-moved-crash.html [ Crash ] -crbug.com/591099 fast/table/table-cell-before-child-in-block.html [ Crash ] crbug.com/591099 fast/table/table-cell-negative-start-margin-align-center.html [ Failure ] crbug.com/591099 fast/table/table-colgroup-present-after-table-row.html [ Failure ] -crbug.com/591099 fast/table/table-continuation-outline-paint-crash.html [ Crash ] 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 ] @@ -15452,7 +14144,6 @@ crbug.com/591099 fast/table/table-toggle-paragraph-padding.html [ Failure ] crbug.com/591099 fast/table/table-with-borderattr-null.html [ Failure ] crbug.com/591099 fast/table/table-with-borderattr-set-to-null.html [ Failure ] -crbug.com/591099 fast/table/tbody-background-image-repeat-y.html [ Crash ] crbug.com/591099 fast/table/td-bordercolor-attribute.html [ Failure ] crbug.com/591099 fast/table/td-display-nowrap.html [ Failure ] crbug.com/591099 fast/table/tr-min-content-crash.html [ Failure ] @@ -15474,7 +14165,7 @@ crbug.com/591099 fast/text-autosizing/clusters-sufficient-text-except-in-root.html [ Failure ] crbug.com/591099 fast/text-autosizing/clusters-sufficient-width.html [ Failure ] crbug.com/591099 fast/text-autosizing/constrained-and-overflow-auto-ancestor.html [ Failure ] -crbug.com/591099 fast/text-autosizing/constrained-and-overflow-paged-x-ancestor.html [ Crash ] +crbug.com/591099 fast/text-autosizing/constrained-and-overflow-paged-x-ancestor.html [ Crash Failure ] crbug.com/591099 fast/text-autosizing/constrained-and-overflow-scroll-ancestor.html [ Failure ] crbug.com/591099 fast/text-autosizing/constrained-height-body.html [ Failure ] crbug.com/591099 fast/text-autosizing/constrained-then-overflow-ancestors.html [ Failure ] @@ -15514,13 +14205,9 @@ crbug.com/591099 fast/text-autosizing/resize-window.html [ Failure ] crbug.com/591099 fast/text-autosizing/similar-clusters.html [ Failure ] crbug.com/591099 fast/text-autosizing/span-child.html [ Failure ] -crbug.com/591099 fast/text-autosizing/subtree-layout-crash.html [ Crash ] -crbug.com/591099 fast/text-autosizing/subtree-relayout-input.html [ Crash Failure ] crbug.com/591099 fast/text-autosizing/table-inflation-crash.html [ Crash Failure ] -crbug.com/591099 fast/text-autosizing/table-simplified-layout-crash.html [ Crash ] crbug.com/591099 fast/text-autosizing/tables/nested-table-wrapping.html [ Failure ] crbug.com/591099 fast/text-autosizing/tables/nested-tables.html [ Failure ] -crbug.com/591099 fast/text-autosizing/textarea-fontsize-change.html [ Crash Failure ] crbug.com/591099 fast/text-autosizing/unwrappable-blocks.html [ Failure ] crbug.com/591099 fast/text-autosizing/unwrappable-inlines.html [ Failure ] crbug.com/591099 fast/text-autosizing/various-font-sizes.html [ Failure ] @@ -15531,7 +14218,6 @@ crbug.com/591099 fast/text-autosizing/wide-in-narrow-overflow-scroll.html [ Failure ] crbug.com/591099 fast/text/align-center-rtl-spill.html [ Failure ] crbug.com/591099 fast/text/apply-start-width-after-skipped-text.html [ Failure ] -crbug.com/591099 fast/text/atsui-bidi-control.html [ Crash ] crbug.com/591099 fast/text/atsui-kerning-and-ligatures.html [ Failure ] crbug.com/591099 fast/text/atsui-multiple-renderers.html [ Failure ] crbug.com/591099 fast/text/atsui-negative-spacing-features.html [ Failure ] @@ -15550,7 +14236,6 @@ crbug.com/591099 fast/text/basic/generic-family-reset.html [ Failure ] crbug.com/591099 fast/text/bidi-embedding-pop-and-push-same.html [ Failure ] crbug.com/591099 fast/text/bidi-explicit-embedding-past-end.html [ Failure Pass ] -crbug.com/591099 fast/text/bidi-img-alt-text.html [ Crash Failure ] crbug.com/591099 fast/text/bidi-isolate-embedding-crash.html [ Failure ] crbug.com/591099 fast/text/bidi-isolate-hang-with-neutral.html [ Failure ] crbug.com/591099 fast/text/bidi-isolate-nextlinebreak-failure.html [ Failure Pass ] @@ -15560,9 +14245,6 @@ crbug.com/591099 fast/text/break-word.html [ Failure ] crbug.com/591099 fast/text/capitalize-empty-generated-string.html [ Failure ] crbug.com/591099 fast/text/capitalize-preserve-nbsp.html [ Failure ] -crbug.com/591099 fast/text/caps-lock-indicator-disabled.html [ Failure ] -crbug.com/591099 fast/text/caps-lock-indicator-enabled-rtl.html [ Failure ] -crbug.com/591099 fast/text/caps-lock-indicator-enabled.html [ Failure ] crbug.com/591099 fast/text/cg-fallback-bolding.html [ Failure ] crbug.com/591099 fast/text/chromium-linux-fallback-crash.html [ Failure ] crbug.com/591099 fast/text/chromium-linux-fontconfig-renderstyle.html [ Failure ] @@ -15597,8 +14279,6 @@ crbug.com/591099 fast/text/ellipsis-rtl-text-in-rtl-flow-underline.html [ Failure ] crbug.com/591099 fast/text/ellipsis-rtl-text-in-rtl-flow.html [ Failure ] crbug.com/591099 fast/text/ellipsis-stroked.html [ Failure ] -crbug.com/591099 fast/text/ellipsis-with-list-marker-in-ltr-flow.html [ Crash Failure ] -crbug.com/591099 fast/text/ellipsis-with-list-marker-in-rtl-flow.html [ Crash Failure ] crbug.com/591099 fast/text/emoji-web-font.html [ Failure ] crbug.com/591099 fast/text/emphasis-avoid-ruby.html [ Crash Failure ] crbug.com/591099 fast/text/emphasis-combined-text.html [ Failure ] @@ -15660,15 +14340,12 @@ crbug.com/591099 fast/text/international/complex-character-based-fallback.html [ Failure ] crbug.com/591099 fast/text/international/complex-joining-using-gpos.html [ Failure ] crbug.com/591099 fast/text/international/danda-space.html [ Failure ] -crbug.com/591099 fast/text/international/dir-auto-in-textarea-neutral.html [ Crash Failure ] crbug.com/591099 fast/text/international/draw-complex-text-from-to.html [ Failure ] crbug.com/591099 fast/text/international/float-as-only-child-of-isolate-crash.html [ Failure ] crbug.com/591099 fast/text/international/hebrew-vowels.html [ Failure ] crbug.com/591099 fast/text/international/hindi-whitespace.html [ Failure ] -crbug.com/591099 fast/text/international/iso-8859-8-and-isolate.html [ Crash ] crbug.com/591099 fast/text/international/iso-8859-8.html [ Failure ] crbug.com/591099 fast/text/international/listbox-width-rtl.html [ Crash ] -crbug.com/591099 fast/text/international/mixed-directionality-selection.html [ Crash Failure ] crbug.com/591099 fast/text/international/plane2.html [ Failure ] crbug.com/591099 fast/text/international/rtl-caret.html [ Failure ] crbug.com/591099 fast/text/international/rtl-negative-letter-spacing.html [ Failure ] @@ -15684,11 +14361,9 @@ crbug.com/591099 fast/text/international/unicode-bidi-isolate-nested-crash.html [ Failure ] crbug.com/591099 fast/text/international/unicode-bidi-isolate-nested-with-removes-not-adjacent.html [ Crash ] crbug.com/591099 fast/text/international/unicode-bidi-isolate-nested-with-removes.html [ Crash ] -crbug.com/591099 fast/text/international/unicode-bidi-plaintext-in-textarea.html [ Crash Failure ] crbug.com/591099 fast/text/international/unicode-bidi-plaintext.html [ Failure ] crbug.com/591099 fast/text/international/vertical-text-glyph-test.html [ Failure ] crbug.com/591099 fast/text/international/vertical-text-metrics-test.html [ Crash Failure ] -crbug.com/591099 fast/text/international/wrap-CJK-001.html [ Crash ] crbug.com/591099 fast/text/ipa-tone-letters.html [ Failure ] crbug.com/591099 fast/text/justified-selection-at-edge.html [ Failure ] crbug.com/591099 fast/text/justified-selection.html [ Failure ] @@ -15776,7 +14451,6 @@ crbug.com/591099 fast/text/text-combine-shrink-to-fit.html [ Failure ] crbug.com/591099 fast/text/text-combine-width-after-style-change.html [ Crash Pass ] crbug.com/591099 fast/text/text-container-bounding-rect.html [ Crash Failure ] -crbug.com/591099 fast/text/text-fragment-first-letter-update-crash.html [ Crash ] crbug.com/591099 fast/text/text-iterator-crash.html [ Crash ] crbug.com/591099 fast/text/text-large-negative-letter-spacing-with-opacity.html [ Failure ] crbug.com/591099 fast/text/text-letter-spacing.html [ Failure ] @@ -15834,14 +14508,12 @@ crbug.com/591099 fast/text/whitespace/pre-wrap-spaces-after-newline.html [ Failure ] crbug.com/591099 fast/text/whitespace/select-new-line-with-line-break-normal.html [ Failure ] crbug.com/591099 fast/text/whitespace/span-in-word-space-causes-overflow.html [ Failure Pass ] -crbug.com/591099 fast/text/whitespace/tab-character-basics.html [ Crash Failure ] crbug.com/591099 fast/text/whitespace/text-align-justify-and-whitespace-pre.html [ Failure Pass ] -crbug.com/591099 fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash.html [ Crash Failure ] crbug.com/591099 fast/text/whitespace/whitespace-in-pre.html [ Failure ] 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 ] +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-monospace.html [ Failure Pass ] crbug.com/591099 fast/text/word-space-with-kerning-2.html [ Failure Pass ] @@ -16013,10 +14685,7 @@ crbug.com/591099 fast/writing-mode/margin-collapse.html [ Failure ] crbug.com/591099 fast/writing-mode/margins.html [ Failure ] crbug.com/591099 fast/writing-mode/orthogonal-writing-modes-available-width-absolute-crash.html [ Failure ] -crbug.com/591099 fast/writing-mode/orthogonal-writing-modes-change-root-inline-crash.html [ Crash ] crbug.com/591099 fast/writing-mode/orthogonal-writing-modes-floats-crash-3.html [ Crash ] -crbug.com/591099 fast/writing-mode/orthogonal-writing-modes-floats-crash.html [ Crash ] -crbug.com/591099 fast/writing-mode/orthogonal-writing-modes-in-layoutview-with-floats.html [ Crash ] crbug.com/591099 fast/writing-mode/orthogonal-writing-modes-scrollbarpart-crash.html [ Failure ] crbug.com/591099 fast/writing-mode/percentage-height-orthogonal-writing-modes-quirks.html [ Failure ] crbug.com/591099 fast/writing-mode/percentage-height-orthogonal-writing-modes.html [ Failure ] @@ -16044,7 +14713,6 @@ crbug.com/591099 fast/xmlhttprequest/xmlhttprequest-detached-mixedcontent-no-crash.html [ Failure ] crbug.com/591099 fast/xmlhttprequest/xmlhttprequest-get.xhtml [ Failure ] crbug.com/591099 fast/xmlhttprequest/xmlhttprequest-html-response-encoding.html [ Crash Failure ] -crbug.com/591099 fast/xmlhttprequest/xmlhttprequest-invalid-values.html [ Crash ] crbug.com/591099 fast/xmlhttprequest/xmlhttprequest-missing-file-exception.html [ Failure ] crbug.com/591099 fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html [ Failure ] crbug.com/591099 fast/xmlhttprequest/xmlhttprequest-open-after-iframe-onload-remove-self.html [ Crash ] @@ -16129,7 +14797,6 @@ crbug.com/591099 fonts/sans-serif.html [ Failure ] crbug.com/591099 fonts/serif.html [ Failure ] crbug.com/591099 fragmentation/abspos-after-forced-break.html [ Failure ] -crbug.com/591099 fragmentation/abspos-table-in-nested-multicol-crash.html [ Crash ] crbug.com/591099 fragmentation/auto-scrollbar-shrink-to-fit.html [ Failure ] crbug.com/591099 fragmentation/avoid-break-inside-first-child-nested.html [ Failure ] crbug.com/591099 fragmentation/avoid-break-inside-first-child.html [ Failure ] @@ -16180,11 +14847,9 @@ 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-with-text.html [ Crash ] crbug.com/591099 fragmentation/single-line-cells-paginated.html [ Failure ] 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-self-painting-thead-break-inside-on-thead-only.html [ Crash ] crbug.com/591099 fragmentation/single-line-cells.html [ Failure ] crbug.com/591099 fragmentation/table-disable-fragmentation.html [ Failure ] crbug.com/591099 fragmentation/table-in-subpixel-fragmentainer.html [ Failure ] @@ -16278,7 +14943,6 @@ crbug.com/591099 hittesting/border-hittest-with-image-fallback.html [ Crash ] crbug.com/591099 hittesting/border-hittest.html [ Failure ] crbug.com/591099 hittesting/border-radius-hittest.html [ Failure ] -crbug.com/591099 hittesting/culled-inline-crash.html [ Crash ] crbug.com/591099 hittesting/culled-inline.html [ Failure ] crbug.com/591099 hittesting/hittest-child-of-inlineblock.html [ Crash ] crbug.com/591099 hittesting/hittest-overlapping-floats.html [ Failure ] @@ -16360,7 +15024,6 @@ crbug.com/591099 html/details_summary/details-writing-mode-align-left.html [ Crash Failure ] crbug.com/591099 html/details_summary/details-writing-mode-align-right.html [ Crash Failure ] crbug.com/591099 html/details_summary/details-writing-mode.html [ Crash Failure ] -crbug.com/591099 html/details_summary/mutation-details-focus.html [ Crash ] crbug.com/591099 html/dialog/abspos-dialog-layout.html [ Failure ] crbug.com/591099 html/dialog/closed-dialog-does-not-block-mouse-events.html [ Failure ] crbug.com/591099 html/dialog/dialog-autofocus-multiple-times.html [ Crash ] @@ -16411,13 +15074,10 @@ crbug.com/591099 html/grouping_content/figure-element.html [ Failure ] crbug.com/591099 html/grouping_content/listing.html [ Failure ] crbug.com/591099 html/grouping_content/main-element.html [ Failure ] -crbug.com/591099 html/marquee/marquee-direction-attribute-should-be-case-insensitive.html [ Crash ] crbug.com/591099 html/marquee/marquee-element.html [ Crash Failure ] -crbug.com/591099 html/marquee/marquee-scroll.html [ Crash ] -crbug.com/591099 html/marquee/marquee-scrollamount.html [ Crash ] +crbug.com/591099 html/marquee/marquee-scroll.html [ Crash Failure ] +crbug.com/591099 html/marquee/marquee-scrollamount.html [ Crash Failure ] crbug.com/591099 html/marquee/marquee-shadow-root-no-access.html [ Crash ] -crbug.com/591099 html/marquee/marquee-should-not-wrap.html [ Crash ] -crbug.com/591099 html/marquee/marquee-vspace-hspace.html [ Crash ] crbug.com/591099 html/sections/article-element.html [ Failure ] crbug.com/591099 html/sections/aside-element.html [ Failure ] crbug.com/591099 html/sections/body-quirk-client-size.html [ Failure ] @@ -16523,16 +15183,6 @@ crbug.com/591099 http/tests/cache/zero-length-xhr.html [ Failure ] crbug.com/591099 http/tests/canvas/canvas-filter-svg-external-multiple.html [ Failure ] crbug.com/591099 http/tests/canvas/canvas-filter-svg-external.html [ Failure ] -crbug.com/591099 http/tests/canvas/philip/tests/security.drawImage.canvas.html [ Crash ] -crbug.com/591099 http/tests/canvas/philip/tests/security.drawImage.image.html [ Crash ] -crbug.com/591099 http/tests/canvas/philip/tests/security.pattern.canvas.fillStyle.html [ Crash ] -crbug.com/591099 http/tests/canvas/philip/tests/security.pattern.canvas.strokeStyle.html [ Crash ] -crbug.com/591099 http/tests/canvas/philip/tests/security.pattern.canvas.timing.html [ Crash ] -crbug.com/591099 http/tests/canvas/philip/tests/security.pattern.create.html [ Crash ] -crbug.com/591099 http/tests/canvas/philip/tests/security.pattern.cross.html [ Crash ] -crbug.com/591099 http/tests/canvas/philip/tests/security.pattern.image.fillStyle.html [ Crash ] -crbug.com/591099 http/tests/canvas/philip/tests/security.pattern.image.strokeStyle.html [ Crash ] -crbug.com/591099 http/tests/canvas/philip/tests/security.reset.html [ Crash ] crbug.com/591099 http/tests/canvas/webgl/origin-clean-conformance.html [ Failure ] crbug.com/591099 http/tests/cookies/double-quoted-value-with-semi-colon.html [ Failure ] crbug.com/591099 http/tests/cookies/http-get-cookie-set-in-js.html [ Failure ] @@ -17007,8 +15657,6 @@ crbug.com/591099 http/tests/loading/image-picture-no-download-after-source-removal.html [ Crash ] crbug.com/591099 http/tests/loading/nested_bad_objects.php [ Crash ] crbug.com/591099 http/tests/loading/preload-css-test.html [ Failure ] -crbug.com/591099 http/tests/loading/preload-image-sizes-2x.html [ Crash Failure ] -crbug.com/591099 http/tests/loading/preload-image-sizes.html [ Crash Failure ] crbug.com/591099 http/tests/loading/preload-image-srcset-2x.html [ Crash Pass ] crbug.com/591099 http/tests/loading/preload-image-srcset-duplicate.html [ Crash Pass ] crbug.com/591099 http/tests/loading/preload-image-srcset-reverse-order.html [ Crash Pass ] @@ -17017,9 +15665,6 @@ crbug.com/591099 http/tests/loading/preload-image-srcset.html [ Crash Pass ] crbug.com/591099 http/tests/loading/preload-img-test.html [ Crash Failure ] crbug.com/591099 http/tests/loading/preload-picture-invalid.html [ Crash Failure ] -crbug.com/591099 http/tests/loading/preload-picture-nested.html [ Crash Failure ] -crbug.com/591099 http/tests/loading/preload-picture-sizes-2x.html [ Crash Failure ] -crbug.com/591099 http/tests/loading/preload-picture-sizes.html [ Crash Failure ] crbug.com/591099 http/tests/loading/preload-video-poster.html [ Failure Pass ] crbug.com/591099 http/tests/loading/redirect-methods.html [ Failure ] crbug.com/591099 http/tests/loading/simple-subframe.html [ Failure ] @@ -17259,10 +15904,8 @@ crbug.com/591099 http/tests/navigation/history-back-across-form-submission-to-fragment.html [ Failure ] crbug.com/591099 http/tests/navigation/image-load-in-subframe-unload-handler.html [ Crash ] crbug.com/591099 http/tests/navigation/image-load-in-unload-handler.html [ Crash Pass ] -crbug.com/591099 http/tests/navigation/javascriptlink-basic.html [ Crash Timeout ] -crbug.com/591099 http/tests/navigation/javascriptlink-frames.html [ Crash Timeout ] -crbug.com/591099 http/tests/navigation/javascriptlink-goback.html [ Crash Timeout ] -crbug.com/591099 http/tests/navigation/javascriptlink-subframeload.html [ Crash Timeout ] +crbug.com/591099 http/tests/navigation/javascriptlink-basic.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/navigation/javascriptlink-goback.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/navigation/lockedhistory-iframe.html [ Failure ] crbug.com/591099 http/tests/navigation/metaredirect-basic.html [ Crash Failure ] crbug.com/591099 http/tests/navigation/metaredirect-frames.html [ Crash Pass ] @@ -17273,10 +15916,6 @@ crbug.com/591099 http/tests/navigation/navigation-with-detached-origin-document.html [ Crash Pass ] crbug.com/591099 http/tests/navigation/no-referrer-reset.html [ Failure Timeout ] crbug.com/591099 http/tests/navigation/onload-navigation-iframe-2.html [ Failure ] -crbug.com/591099 http/tests/navigation/ping-cookie.html [ Crash Timeout ] -crbug.com/591099 http/tests/navigation/ping-cross-origin-from-https.html [ Crash Timeout ] -crbug.com/591099 http/tests/navigation/ping-cross-origin.html [ Crash Timeout ] -crbug.com/591099 http/tests/navigation/ping-same-origin.html [ Crash Timeout ] crbug.com/591099 http/tests/navigation/post-301-response.html [ Crash Pass ] crbug.com/591099 http/tests/navigation/post-302-response.html [ Crash Pass ] crbug.com/591099 http/tests/navigation/post-303-response.html [ Crash Pass ] @@ -17287,10 +15926,7 @@ crbug.com/591099 http/tests/navigation/post-goback-same-url.html [ Crash Failure ] crbug.com/591099 http/tests/navigation/post-goback1.html [ Crash Failure ] crbug.com/591099 http/tests/navigation/post-goback2.html [ Crash Failure ] -crbug.com/591099 http/tests/navigation/postredirect-basic.html [ Crash Pass ] crbug.com/591099 http/tests/navigation/postredirect-frames-goback1.html [ Crash Failure ] -crbug.com/591099 http/tests/navigation/postredirect-frames.html [ Crash Pass ] -crbug.com/591099 http/tests/navigation/postredirect-goback1.html [ Crash Pass ] crbug.com/591099 http/tests/navigation/postredirect-goback2.html [ Crash Failure ] crbug.com/591099 http/tests/navigation/redirect-load-no-form-restoration.html [ Crash Pass ] crbug.com/591099 http/tests/navigation/redirect302-basic.html [ Crash Failure ] @@ -17326,7 +15962,6 @@ crbug.com/591099 http/tests/notifications/notification-sandbox-permission.html [ Failure ] crbug.com/591099 http/tests/performance-timing/paint-timing/first-contentful-canvas.html [ Crash ] crbug.com/591099 http/tests/permissionclient/image-permissions.html [ Failure ] -crbug.com/591099 http/tests/plugins/cross-frame-object-access.html [ Crash ] crbug.com/591099 http/tests/plugins/navigator-plugins-in-cross-origin-frame.html [ Failure Pass ] crbug.com/591099 http/tests/pointer-lock/iframe-sandboxed-allow-pointer-lock.html [ Failure ] crbug.com/591099 http/tests/pointer-lock/iframe-sandboxed-nested-allow-pointer-lock.html [ Failure ] @@ -17335,7 +15970,6 @@ crbug.com/591099 http/tests/pointer-lock/pointerlockelement-different-origin.html [ Failure ] crbug.com/591099 http/tests/pointer-lock/pointerlockelement-same-origin.html [ Failure ] crbug.com/591099 http/tests/pointer-lock/requestPointerLock-can-not-transfer-between-documents.html [ Failure ] -crbug.com/591099 http/tests/preload/delaying_onload_link_preload_after_discovery.html [ Failure ] crbug.com/591099 http/tests/preload/dynamic_remove_preload_href.html [ Failure Pass ] crbug.com/591099 http/tests/preload/dynamic_removing_preload.html [ Failure Pass ] crbug.com/591099 http/tests/preload/multiple-meta-csp.html [ Crash ] @@ -17854,10 +16488,7 @@ crbug.com/591099 http/tests/uri/escaped-entity.html [ Failure ] crbug.com/591099 http/tests/uri/resolve-encoding-relative.html [ Failure ] crbug.com/591099 http/tests/uri/utf8-path.html [ Failure ] -crbug.com/591099 http/tests/w3c/webperf/approved/navigation-timing/html/test_navigation_type_reload.html [ Crash ] crbug.com/591099 http/tests/w3c/webperf/approved/navigation-timing/html/test_performance_attributes_exist_in_object.html [ Crash ] -crbug.com/591099 http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_ignore_failures.html [ Crash ] -crbug.com/591099 http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_initiator_types.html [ Crash ] crbug.com/591099 http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect.html [ Crash ] crbug.com/591099 http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect_chain.html [ Crash ] crbug.com/591099 http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect_chain_allow_timing.html [ Crash ] @@ -18197,7 +16828,6 @@ crbug.com/591099 http/tests/xmlhttprequest/simple-cross-origin-denied-events-sync.html [ Failure ] crbug.com/591099 http/tests/xmlhttprequest/simple-cross-origin-denied-events.html [ Failure ] crbug.com/591099 http/tests/xmlhttprequest/simple-cross-origin-progress-events.html [ Failure ] -crbug.com/591099 http/tests/xmlhttprequest/small-chunks-response-text.html [ Crash ] crbug.com/591099 http/tests/xmlhttprequest/state-after-network-error.html [ Failure ] crbug.com/591099 http/tests/xmlhttprequest/status-after-abort.html [ Failure ] crbug.com/591099 http/tests/xmlhttprequest/supported-xml-content-types-invalid-1.html [ Failure ] @@ -18339,7 +16969,6 @@ crbug.com/591099 ietestcenter/css3/flexbox/flexbox-direction-001.htm [ Failure ] crbug.com/591099 ietestcenter/css3/flexbox/flexbox-ordinal-group-001.htm [ Failure ] crbug.com/591099 ietestcenter/css3/multicolumn/column-containing-block-003.htm [ Failure ] -crbug.com/591099 ietestcenter/css3/multicolumn/column-width-applies-to-010.htm [ Crash Failure ] crbug.com/591099 ietestcenter/css3/multicolumn/column-width-negative-001.htm [ Failure ] crbug.com/591099 ietestcenter/css3/multicolumn/column-width-percentage-001.htm [ Failure ] crbug.com/591099 ietestcenter/css3/text/textshadow-002.htm [ Failure ] @@ -18465,8 +17094,8 @@ crbug.com/591099 images/png-missing-plte-before-trns-crash.html [ Crash Pass ] crbug.com/591099 images/png-suite/test.html [ Crash Failure ] crbug.com/591099 images/png_per_row_alpha_decoding.html [ Failure ] -crbug.com/591099 images/rendering-broken-0px-images-quirk.html [ Crash ] -crbug.com/591099 images/rendering-broken-0px-images.html [ Crash ] +crbug.com/591099 images/rendering-broken-0px-images-quirk.html [ Crash Failure ] +crbug.com/591099 images/rendering-broken-0px-images.html [ Crash Failure ] crbug.com/591099 images/rendering-broken-10px-images.html [ Crash Failure ] crbug.com/591099 images/rendering-broken-16px-images.html [ Crash Failure ] crbug.com/591099 images/rendering-broken-1px-images.html [ Crash Failure ] @@ -18496,11 +17125,10 @@ crbug.com/591099 inspector-protocol/accessibility/accessibility-getRelationships.html [ Crash Failure ] crbug.com/591099 inspector-protocol/accessibility/accessibility-ignoredNodes.html [ Crash Failure Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-buttons.html [ Crash ] -crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-img-figure.html [ Crash ] -crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input-buttons.html [ Crash ] +crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-img-figure.html [ Crash Timeout ] +crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input-buttons.html [ Crash Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input.html [ Crash Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-labelledby.html [ Crash Timeout ] -crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-summary.html [ Crash ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-visiblity.html [ Crash Timeout ] crbug.com/591099 inspector-protocol/cpu-profiler/enable-disable.html [ Failure ] crbug.com/591099 inspector-protocol/cpu-profiler/record-cpu-profile.html [ Failure ] @@ -18523,7 +17151,6 @@ 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-collect-class-names.html [ Crash ] crbug.com/591099 inspector-protocol/dom/dom-getBoxModel.html [ Failure ] crbug.com/591099 inspector-protocol/dom/dom-ns-attr-modified.html [ Failure ] crbug.com/591099 inspector-protocol/emulation/device-emulation-320-2x.html [ Failure ] @@ -18555,7 +17182,6 @@ crbug.com/591099 inspector-protocol/input/dispatchKeyEvent-focus.html [ Failure ] crbug.com/591099 inspector-protocol/layers/paint-profiler.html [ Failure ] crbug.com/591099 inspector-protocol/layout-fonts/languages-emoji-rare-glyphs.html [ Failure ] -crbug.com/591099 inspector-protocol/layout-fonts/tifinagh.html [ Crash ] 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 ] @@ -18742,8 +17368,8 @@ crbug.com/591099 inspector/editor/text-editor-char-to-coordinates.html [ Crash Failure ] crbug.com/591099 inspector/editor/text-editor-ctrl-d-1.html [ Crash Failure Timeout ] crbug.com/591099 inspector/editor/text-editor-ctrl-d-2.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-enter-behaviour.html [ Crash Timeout ] -crbug.com/591099 inspector/editor/text-editor-formatter.html [ Crash Timeout ] +crbug.com/591099 inspector/editor/text-editor-enter-behaviour.html [ Crash Failure Timeout ] +crbug.com/591099 inspector/editor/text-editor-formatter.html [ Crash Failure Timeout ] crbug.com/591099 inspector/editor/text-editor-goto-matching-bracket.html [ Crash Failure ] crbug.com/591099 inspector/editor/text-editor-home-button.html [ Crash Failure ] crbug.com/591099 inspector/editor/text-editor-indent-autodetection.html [ Crash Failure Timeout ] @@ -19122,7 +17748,7 @@ 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-set-interval.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-async/async-callstack-web-sql.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 ] crbug.com/591099 inspector/sources/debugger-async/async-callstack.html [ Failure ] crbug.com/591099 inspector/sources/debugger-breakpoints/breakpoint-manager-listeners-count.html [ Failure ] @@ -19991,12 +18617,9 @@ crbug.com/591099 paint/invalidation/button-checkbox-click-method-repaint.html [ Failure ] crbug.com/591099 paint/invalidation/button-inner-no-repaint.html [ Failure Pass ] crbug.com/591099 paint/invalidation/canvas-composite-repaint-by-all-imagesource.html [ Failure Pass ] -crbug.com/591099 paint/invalidation/caret-change-paint-offset-keep-visual.html [ Failure ] crbug.com/591099 paint/invalidation/caret-color.html [ Crash Pass ] crbug.com/591099 paint/invalidation/caret-contenteditable-content-after.html [ Failure ] -crbug.com/591099 paint/invalidation/caret-invalidation-in-overflow-scroll.html [ Crash Failure ] crbug.com/591099 paint/invalidation/caret-outside-block.html [ Failure ] -crbug.com/591099 paint/invalidation/caret-subpixel.html [ Failure ] crbug.com/591099 paint/invalidation/caret-with-composited-scroll.html [ Failure ] crbug.com/591099 paint/invalidation/caret-with-transformation.html [ Failure ] crbug.com/591099 paint/invalidation/change-transform.html [ Failure Pass ] @@ -20206,8 +18829,6 @@ crbug.com/591099 paint/invalidation/invalidate-after-composited-scroll.html [ Failure ] crbug.com/591099 paint/invalidation/invalidate-box-shadow-currentColor.html [ Failure ] crbug.com/591099 paint/invalidation/invalidate-caret-before-text-node-update.html [ Failure ] -crbug.com/591099 paint/invalidation/invalidate-caret-in-composited-scrolling-container.html [ Crash Failure ] -crbug.com/591099 paint/invalidation/invalidate-caret-in-non-composited-scrolling-container.html [ Crash Failure ] crbug.com/591099 paint/invalidation/invalidate-descendants-when-receiving-paint-layer.html [ Failure ] crbug.com/591099 paint/invalidation/invalidate-invisible-element.html [ Failure Pass ] crbug.com/591099 paint/invalidation/invalidate-paint-for-fixed-pos-inside-iframe.html [ Failure ] @@ -20255,15 +18876,12 @@ crbug.com/591099 paint/invalidation/line-overflow.html [ Failure ] crbug.com/591099 paint/invalidation/lines-with-layout-delta.html [ Failure ] crbug.com/591099 paint/invalidation/list-marker-2.html [ Crash Failure ] -crbug.com/591099 paint/invalidation/list-marker-move.html [ Crash ] crbug.com/591099 paint/invalidation/list-marker.html [ Failure ] -crbug.com/591099 paint/invalidation/local-attachment-background-li-crash.html [ Crash ] crbug.com/591099 paint/invalidation/make-children-non-inline.html [ Failure ] crbug.com/591099 paint/invalidation/margin.html [ Failure Pass ] crbug.com/591099 paint/invalidation/media-audio-no-spurious-repaints.html [ Crash ] crbug.com/591099 paint/invalidation/mix-blend-mode-separate-stacking-context.html [ Failure ] crbug.com/591099 paint/invalidation/move-caret-in-container-change-paint-offset-keep-visual.html [ Failure Pass ] -crbug.com/591099 paint/invalidation/multi-layout-one-frame.html [ Crash Failure ] crbug.com/591099 paint/invalidation/multi-subsequence-composited.html [ Failure ] crbug.com/591099 paint/invalidation/multi-subsequence-scrolled.html [ Failure ] crbug.com/591099 paint/invalidation/multicol-as-paint-container.html [ Failure Pass ] @@ -20512,7 +19130,6 @@ 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-set-disabled.html [ Failure ] 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 ] @@ -20545,7 +19162,6 @@ crbug.com/591099 paint/invalidation/window-resize-positioned-percent-top.html [ Failure Pass ] crbug.com/591099 paint/invalidation/window-resize-vertical-writing-mode.html [ Failure ] crbug.com/591099 paint/invalidation/window-resize-viewport-percent.html [ Failure Pass ] -crbug.com/591099 paint/lists/invalidate-list-marker-color.html [ Crash ] crbug.com/591099 paint/masks/fieldset-mask.html [ Failure ] crbug.com/591099 paint/overflow/interest-rect-change-scroll-down.html [ Failure Pass ] crbug.com/591099 paint/overflow/non-composited-fixed-position-descendant.html [ Failure ] @@ -20727,7 +19343,6 @@ crbug.com/591099 printing/standards-percentage-heights.html [ Failure Pass ] crbug.com/591099 printing/stretch-to-view-height.html [ Failure ] crbug.com/591099 printing/subframes-percentage-height.html [ Failure Pass ] -crbug.com/591099 printing/text-color-adjust.html [ Crash ] crbug.com/591099 printing/thead-repeats-at-top-of-each-page-multiple-tables.html [ Failure ] crbug.com/591099 printing/thead-repeats-at-top-of-each-page.html [ Failure ] crbug.com/591099 printing/viewport-size-dependant-iframe-with-multicol-crash.html [ Failure ] @@ -20740,8 +19355,6 @@ crbug.com/591099 scrollbars/basic-scrollbar.html [ Failure ] crbug.com/591099 scrollbars/border-box-rect-clips-scrollbars.html [ Failure ] crbug.com/591099 scrollbars/custom-scrollbar-appearance-property.html [ Failure Pass ] -crbug.com/591099 scrollbars/custom-scrollbar-changing-style-relayout-body-scrollablearea.html [ Crash ] -crbug.com/591099 scrollbars/custom-scrollbar-changing-style-relayout-div-body-scrollablearea.html [ Crash ] crbug.com/591099 scrollbars/custom-scrollbar-display.html [ Failure Pass ] crbug.com/591099 scrollbars/custom-scrollbar-enable-changes-thickness-with-iframe.html [ Failure Pass ] crbug.com/591099 scrollbars/custom-scrollbar-not-inherited-by-iframe.html [ Crash ] @@ -20753,7 +19366,6 @@ crbug.com/591099 scrollbars/hidden-scrollbar-prevents-layout.html [ Failure ] crbug.com/591099 scrollbars/hidden-scrollbars-invisible.html [ Failure Pass ] crbug.com/591099 scrollbars/iframe-scrollbar-becomes-custom.html [ Crash ] -crbug.com/591099 scrollbars/layout-viewport-scrollbars-hidden.html [ Crash ] crbug.com/591099 scrollbars/listbox-scrollbar-combinations.html [ Failure ] crbug.com/591099 scrollbars/overlay-scrollbars-within-overflow-scroll.html [ Failure Pass ] crbug.com/591099 scrollbars/resize-scales-with-dpi-150.html [ Failure ] @@ -20766,7 +19378,6 @@ crbug.com/591099 scrollbars/scrollbar-click-does-not-blur-content.html [ Crash ] crbug.com/591099 scrollbars/scrollbar-content-crash.html [ Failure ] crbug.com/591099 scrollbars/scrollbar-crash-on-refresh.html [ Failure ] -crbug.com/591099 scrollbars/scrollbar-large-overflow-rectangle.html [ Crash ] crbug.com/591099 scrollbars/scrollbar-miss-mousemove-disabled.html [ Failure ] crbug.com/591099 scrollbars/scrollbar-miss-mousemove.html [ Failure ] crbug.com/591099 scrollbars/scrollbar-orientation.html [ Failure ] @@ -20810,7 +19421,6 @@ crbug.com/591099 shadow-dom/nodetree-labels-node-list.html [ Crash ] crbug.com/591099 shadow-dom/nodetree-radio-node-list.html [ Crash ] crbug.com/591099 shadow-dom/pointer-lock-in-shadow.html [ Crash ] -crbug.com/591099 shadow-dom/range-caret-range-from-point-left-of-shadow.html [ Crash ] crbug.com/591099 shadow-dom/slotted-pseudo-element-in-v0-tree-crash.html [ Failure ] crbug.com/591099 shadow-dom/v0/event-composed-path.html [ Crash ] crbug.com/591099 shadow-dom/v0/get-destination-insertion-points-re-distribution.html [ Failure ] @@ -21075,80 +19685,6 @@ crbug.com/591099 storage/websql/null-characters.html [ Failure ] crbug.com/591099 storage/websql/sql-error-codes.html [ Failure Pass ] crbug.com/591099 storage/websql/transaction-removed-context-crash.html [ Crash ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/coords-units-03-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/filters-image-03-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/filters-image-05-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/painting-marker-07-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/pservers-pattern-03-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/struct-use-14-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/styling-css-04-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/types-dom-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/types-dom-02-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1-SE/types-dom-03-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-06-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-12-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-15-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-17-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-18-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-19-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-24-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-25-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-26-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-28-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-31-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-39-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-41-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-52-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-61-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-62-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/animate-elem-85-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/color-prof-01-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/color-prop-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/coords-coord-01-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/coords-coord-02-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/coords-trans-02-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/coords-trans-03-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/coords-viewattr-02-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/coords-viewattr-03-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/extend-namespace-01-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/filters-color-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/filters-gauss-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/filters-offset-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/fonts-elem-04-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/linking-a-04-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/linking-a-05-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/masking-intro-01-f.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/masking-path-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/metadata-example-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/painting-stroke-02-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/painting-stroke-03-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/paths-data-05-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/paths-data-12-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/paths-data-14-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/pservers-grad-19-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/pservers-pattern-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/render-elems-02-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/render-elems-08-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/script-handle-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/script-handle-02-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/script-handle-04-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/struct-frag-05-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/struct-group-03-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/struct-image-04-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/struct-image-05-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/styling-css-05-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-align-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-align-02-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-align-05-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-deco-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-fonts-01-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-spacing-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-text-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-text-06-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-tselect-01-b.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-ws-01-t.svg [ Failure ] -crbug.com/591099 svg/W3C-SVG-1.1/text-ws-02-t.svg [ Failure ] crbug.com/591099 svg/animations/accumulate-use-count.html [ Crash ] crbug.com/591099 svg/animations/accumulate-values-width-animation.html [ Failure ] crbug.com/591099 svg/animations/add-after-load-use-counter.html [ Crash ] @@ -21394,8 +19930,6 @@ crbug.com/591099 svg/as-image/svg-non-integer-scaled-image.html [ Failure ] crbug.com/591099 svg/as-image/svg-object-intrinsic-size.html [ Failure ] crbug.com/591099 svg/as-image/svgview-references-use-counters.html [ Failure ] -crbug.com/591099 svg/as-list-image/svg-list-image-intrinsic-size-1.html [ Crash ] -crbug.com/591099 svg/as-list-image/svg-list-image-intrinsic-size-zoom.html [ Crash ] crbug.com/591099 svg/as-object/embedded-svg-immediate-offsetWidth-query.html [ Failure ] crbug.com/591099 svg/as-object/object-box-sizing-no-width-height.html [ Failure Pass ] crbug.com/591099 svg/as-object/svg-embedded-in-html-in-iframe.html [ Failure Pass Timeout ] @@ -21409,7 +19943,6 @@ crbug.com/591099 svg/canvas/image-svg-intrinsic-size.html [ Crash ] crbug.com/591099 svg/carto.net/frameless-svg-parse-error.html [ Failure ] crbug.com/591099 svg/clip-path/clip-path-foreign-object-crash.html [ Crash ] -crbug.com/591099 svg/clip-path/clip-path-objectBoundingBox.svg [ Crash ] crbug.com/591099 svg/css/background-image-svg.html [ Crash Failure Pass ] crbug.com/591099 svg/css/baseline-shift-inherit.html [ Crash ] crbug.com/591099 svg/css/buffered-rendering.html [ Failure ] @@ -21423,7 +19956,6 @@ crbug.com/591099 svg/css/opacity-not-supporting-percentage.html [ Failure ] crbug.com/591099 svg/css/parse-length.html [ Failure ] crbug.com/591099 svg/css/path-element.html [ Crash ] -crbug.com/591099 svg/css/path-gradient-stroke-shadow.svg [ Crash ] crbug.com/591099 svg/css/path-layout-crash.html [ Failure ] crbug.com/591099 svg/css/rect-system-color.xhtml [ Failure ] crbug.com/591099 svg/css/scientific-numbers.html [ Failure ] @@ -21458,7 +19990,6 @@ crbug.com/591099 svg/custom/elementTimeControl-nan-crash.html [ Failure ] crbug.com/591099 svg/custom/embedded-svg-allowed-in-dashboard.xml [ Failure ] crbug.com/591099 svg/custom/embedding-external-svgs.xhtml [ Failure Pass ] -crbug.com/591099 svg/custom/empty-merge.svg [ Crash ] crbug.com/591099 svg/custom/events-in-shadow-tree.html [ Crash ] crbug.com/591099 svg/custom/external-paintserver-reference.svg [ Failure Pass ] crbug.com/591099 svg/custom/filter-css-transform-resolution.html [ Failure Pass ] @@ -21483,7 +20014,6 @@ crbug.com/591099 svg/custom/getsvgdocument-null.html [ Failure ] crbug.com/591099 svg/custom/getsvgdocument.html [ Failure ] crbug.com/591099 svg/custom/global-constructors.html [ Failure ] -crbug.com/591099 svg/custom/gradient-rgba-stop-color.svg [ Crash ] crbug.com/591099 svg/custom/hit-test-path-stroke.svg [ Failure ] crbug.com/591099 svg/custom/hit-test-path.svg [ Failure ] crbug.com/591099 svg/custom/image-parent-translation.xhtml [ Failure ] @@ -21493,7 +20023,6 @@ crbug.com/591099 svg/custom/image-with-attr-change-after-delete-crash.html [ Crash Pass ] crbug.com/591099 svg/custom/inline-svg-in-xhtml.xml [ Failure ] crbug.com/591099 svg/custom/inline-svg-use-available-width-in-stf.html [ Failure ] -crbug.com/591099 svg/custom/inline-svg-use-available-width.html [ Failure ] crbug.com/591099 svg/custom/invalid-filter-reference-and-opacity-crash.html [ Failure ] crbug.com/591099 svg/custom/invalid-length-units.html [ Failure ] crbug.com/591099 svg/custom/invisible-text-after-scrolling.xhtml [ Failure ] @@ -21508,7 +20037,6 @@ crbug.com/591099 svg/custom/manually-parsed-svg-allowed-in-dashboard.html [ Failure ] crbug.com/591099 svg/custom/marker-orient-auto.html [ Failure ] crbug.com/591099 svg/custom/missing-xlink.svg [ Failure ] -crbug.com/591099 svg/custom/mouse-move-on-svg-container-standalone.svg [ Failure ] crbug.com/591099 svg/custom/mouse-move-on-svg-container.xhtml [ Timeout ] crbug.com/591099 svg/custom/mouse-move-on-svg-root.xhtml [ Timeout ] crbug.com/591099 svg/custom/no-fixed-in-svg-assert.html [ Failure ] @@ -21533,7 +20061,6 @@ crbug.com/591099 svg/custom/pointer-events-on-svg-with-pointer.xhtml [ Failure ] crbug.com/591099 svg/custom/pointer-events-on-svg-without-pointer.xhtml [ Failure ] crbug.com/591099 svg/custom/poly-parsing-error.html [ Failure ] -crbug.com/591099 svg/custom/radialGradient-focal-radius.svg [ Crash ] crbug.com/591099 svg/custom/removed-from-animation-crash.html [ Crash ] crbug.com/591099 svg/custom/rootmost-svg-xy-attrs.xhtml [ Failure ] crbug.com/591099 svg/custom/scroll-to-svg-element-assertion.html [ Failure ] @@ -21560,14 +20087,11 @@ crbug.com/591099 svg/custom/text-match-highlight.html [ Failure ] crbug.com/591099 svg/custom/text-use-click-crash.xhtml [ Crash ] crbug.com/591099 svg/custom/text-zoom.xhtml [ Failure Pass ] -crbug.com/591099 svg/custom/textPath-path-change2.svg [ Failure ] crbug.com/591099 svg/custom/title-assertion.html [ Failure ] crbug.com/591099 svg/custom/touch-events.html [ Failure ] crbug.com/591099 svg/custom/tref-clone-crash.html [ Crash Pass ] crbug.com/591099 svg/custom/tref-with-progress-tag-setpseudo-assert.html [ Failure ] -crbug.com/591099 svg/custom/use-clipped-transform.svg [ Crash ] crbug.com/591099 svg/custom/use-crash-in-non-wellformed-document.svg [ Failure ] -crbug.com/591099 svg/custom/use-css-events.svg [ Failure ] crbug.com/591099 svg/custom/use-event-retargeting.html [ Failure ] crbug.com/591099 svg/custom/use-font-face-crash.svg [ Failure ] crbug.com/591099 svg/custom/use-href-attr-removal-crash.html [ Failure ] @@ -21582,10 +20106,7 @@ crbug.com/591099 svg/custom/use-on-disallowed-foreign-object-5.svg [ Failure Pass ] crbug.com/591099 svg/custom/use-on-disallowed-foreign-object-6.svg [ Failure Pass ] crbug.com/591099 svg/custom/use-on-non-svg-namespaced-element.svg [ Failure Pass ] -crbug.com/591099 svg/custom/use-on-symbol.svg [ Crash ] -crbug.com/591099 svg/custom/use-recalcStyle-crash.svg [ Crash ] crbug.com/591099 svg/custom/use-referencing-style-crash.svg [ Failure ] -crbug.com/591099 svg/custom/use-transfer-width-height-properties-to-svg2.svg [ Crash ] crbug.com/591099 svg/custom/viewport-em.svg [ Failure Pass ] crbug.com/591099 svg/custom/xhtml-no-svg-renderer.xhtml [ Failure Pass ] crbug.com/591099 svg/custom/zoomed-alignment-baseline.html [ Crash ] @@ -21997,15 +20518,10 @@ crbug.com/591099 svg/dynamic-updates/SVGUseElement-svgdom-href2-prop.html [ Failure ] crbug.com/591099 svg/filters/feBlend-all-modes.html [ Failure Pass ] crbug.com/591099 svg/filters/feComponentTransfer-style-crash.xhtml [ Crash ] -crbug.com/591099 svg/filters/feConvolveFilter-y-bounds.svg [ Crash ] -crbug.com/591099 svg/filters/feConvolveMatrix-negative-orderX.svg [ Crash ] crbug.com/591099 svg/filters/feDisplacementMap-crash-test.xhtml [ Crash ] -crbug.com/591099 svg/filters/feDropShadow-flood-opacity-2.svg [ Crash ] -crbug.com/591099 svg/filters/feDropShadow-zero-deviation.svg [ Crash ] crbug.com/591099 svg/filters/feLight-non-lighting-parent-crash.html [ Failure ] crbug.com/591099 svg/filters/feTurbulence-bad-seeds.html [ Failure ] crbug.com/591099 svg/filters/filter-detach-crash.html [ Crash ] -crbug.com/591099 svg/filters/filter-source-outside-viewport.html [ Crash ] crbug.com/591099 svg/filters/reparent-animated-filter-target.html [ Failure ] crbug.com/591099 svg/foreignObject/background-render-phase.html [ Failure ] crbug.com/591099 svg/foreignObject/body-background.svg [ Failure Pass ] @@ -22046,7 +20562,6 @@ crbug.com/591099 svg/hittest/zero-length-round-cap-path.xhtml [ Crash ] crbug.com/591099 svg/hittest/zero-length-square-cap-path.xhtml [ Crash ] crbug.com/591099 svg/hixie/data-types/002.xhtml [ Failure Pass ] -crbug.com/591099 svg/hixie/error/006.xml [ Crash ] crbug.com/591099 svg/hixie/error/012.xml [ Failure ] crbug.com/591099 svg/hixie/error/013.xml [ Failure ] crbug.com/591099 svg/hixie/intrinsic/003.html [ Failure Pass ] @@ -22059,7 +20574,6 @@ crbug.com/591099 svg/hixie/mixed/009.xml [ Failure Pass ] crbug.com/591099 svg/hixie/mixed/010.xml [ Failure Pass ] crbug.com/591099 svg/hixie/mixed/011.xml [ Failure ] -crbug.com/591099 svg/hixie/perf/001.xml [ Crash ] crbug.com/591099 svg/hixie/processing-model/003.xml [ Failure Pass ] crbug.com/591099 svg/hixie/processing-model/004.xml [ Failure Pass ] crbug.com/591099 svg/hixie/rendering-model/003.xhtml [ Failure Pass ] @@ -22107,8 +20621,6 @@ crbug.com/591099 svg/text/scaling-font-with-geometric-precision.html [ Failure ] crbug.com/591099 svg/text/select-svg-text-with-collapsed-whitespace.html [ Crash ] crbug.com/591099 svg/text/select-text-inside-non-static-position.html [ Failure ] -crbug.com/591099 svg/text/select-textLength-spacing-squeeze-1.svg [ Failure ] -crbug.com/591099 svg/text/select-textLength-spacing-stretch-2.svg [ Failure ] crbug.com/591099 svg/text/selection-background-color.xhtml [ Failure Pass ] crbug.com/591099 svg/text/selection-dragging-outside-1.html [ Crash ] crbug.com/591099 svg/text/selection-dragging-outside-2.html [ Crash ] @@ -22121,10 +20633,7 @@ crbug.com/591099 svg/text/text-bbox-empty.html [ Crash ] crbug.com/591099 svg/text/text-bbox-of-empty-after-change.html [ Crash ] crbug.com/591099 svg/text/text-getSubStringLength.html [ Crash ] -crbug.com/591099 svg/text/text-outline-rgba.html [ Crash ] crbug.com/591099 svg/text/text-repaint-rects.xhtml [ Failure ] -crbug.com/591099 svg/text/text-selection-align-04-b.svg [ Failure ] -crbug.com/591099 svg/text/text-selection-align-06-b.svg [ Failure ] crbug.com/591099 svg/text/text-style-recalc-crash.html [ Failure Pass ] crbug.com/591099 svg/text/textpath-reference-crash.html [ Crash ] crbug.com/591099 svg/text/textquery-collapsed-whitespace.html [ Crash ] @@ -22135,7 +20644,6 @@ crbug.com/591099 svg/transforms/svg-css-transforms-clip-path.xhtml [ Failure ] crbug.com/591099 svg/transforms/svg-css-transforms.xhtml [ Failure ] crbug.com/591099 svg/transforms/text-with-pattern-inside-transformed-html.xhtml [ Failure ] -crbug.com/591099 svg/transforms/transform-box-view-box.html [ Crash ] crbug.com/591099 svg/transforms/transform-boxsize-usecounter-1.html [ Crash ] crbug.com/591099 svg/transforms/transform-boxsize-usecounter-2.html [ Crash ] crbug.com/591099 svg/transforms/transform-boxsize-usecounter-3.html [ Crash ] @@ -22194,7 +20702,6 @@ crbug.com/591099 tables/mozilla/bugs/bug120364.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug126742.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug1271.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug127267.html [ Crash ] crbug.com/591099 tables/mozilla/bugs/bug12908-1.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug1302.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug131020-2.html [ Failure ] @@ -22208,7 +20715,6 @@ crbug.com/591099 tables/mozilla/bugs/bug137388-3.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug138725.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug14159-1.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug1474.html [ Crash ] crbug.com/591099 tables/mozilla/bugs/bug149275-1.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug149275-2.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug15247.html [ Failure Pass ] @@ -22238,7 +20744,7 @@ crbug.com/591099 tables/mozilla/bugs/bug221784-2.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug23151.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug23235.html [ Crash Failure ] -crbug.com/591099 tables/mozilla/bugs/bug23299.html [ Failure ] +crbug.com/591099 tables/mozilla/bugs/bug23299.html [ Failure Pass ] crbug.com/591099 tables/mozilla/bugs/bug24200.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug2469.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug2479-1.html [ Crash Failure Pass ] @@ -22250,7 +20756,6 @@ crbug.com/591099 tables/mozilla/bugs/bug27038-3.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug2773.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug278385.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug27993-1.html [ Crash ] 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 ] @@ -22275,20 +20780,15 @@ crbug.com/591099 tables/mozilla/bugs/bug3977.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug4093.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug42187.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug42443.html [ Crash ] crbug.com/591099 tables/mozilla/bugs/bug4284.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug43039.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug43204.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug4382.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug43854-1.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug43854-2.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug44505.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug44523.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug4527.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug4576.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug46268-5.html [ Crash ] -crbug.com/591099 tables/mozilla/bugs/bug46368-1.html [ Crash Failure ] -crbug.com/591099 tables/mozilla/bugs/bug46368-2.html [ Crash Failure ] crbug.com/591099 tables/mozilla/bugs/bug46480-1.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug46480-2.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug46924.html [ Failure ] @@ -22296,7 +20796,6 @@ crbug.com/591099 tables/mozilla/bugs/bug48827.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug50695-1.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug50695-2.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug51037.html [ Crash Failure ] crbug.com/591099 tables/mozilla/bugs/bug51140.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug53690-2.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug5538.html [ Failure ] @@ -22312,7 +20811,6 @@ crbug.com/591099 tables/mozilla/bugs/bug60992.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug625.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug6304.html [ Failure ] -crbug.com/591099 tables/mozilla/bugs/bug641-1.html [ Crash ] crbug.com/591099 tables/mozilla/bugs/bug641-2.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug647.html [ Failure ] crbug.com/591099 tables/mozilla/bugs/bug6674.html [ Failure ] @@ -22356,7 +20854,6 @@ crbug.com/591099 tables/mozilla/core/nested1.html [ Failure ] crbug.com/591099 tables/mozilla/core/one_row.html [ Failure ] crbug.com/591099 tables/mozilla/core/table_heights.html [ Failure ] -crbug.com/591099 tables/mozilla/dom/tableDom.html [ Crash Failure ] crbug.com/591099 tables/mozilla/marvin/col_span.html [ Failure ] crbug.com/591099 tables/mozilla/marvin/colgroup_align_center.html [ Failure ] crbug.com/591099 tables/mozilla/marvin/colgroup_align_justify.html [ Failure ] @@ -22371,7 +20868,6 @@ crbug.com/591099 tables/mozilla/marvin/colgroup_width_px.html [ Failure ] crbug.com/591099 tables/mozilla/marvin/table_overflow_hidden_td.html [ Failure Pass ] crbug.com/591099 tables/mozilla/marvin/tables_align_center.html [ Failure ] -crbug.com/591099 tables/mozilla/marvin/tables_align_right.html [ Crash ] crbug.com/591099 tables/mozilla/marvin/tables_bgcolor_aqua.html [ Failure ] crbug.com/591099 tables/mozilla/marvin/tables_bgcolor_aqua_rgb.html [ Failure ] crbug.com/591099 tables/mozilla/marvin/tables_bgcolor_black.html [ Failure ] @@ -22456,11 +20952,9 @@ crbug.com/591099 tables/mozilla/marvin/tr_bgcolor_white_rgb.html [ Failure ] crbug.com/591099 tables/mozilla/marvin/tr_bgcolor_yellow.html [ Failure ] crbug.com/591099 tables/mozilla/marvin/tr_bgcolor_yellow_rgb.html [ Failure ] -crbug.com/591099 tables/mozilla/marvin/x_table.xml [ Crash Failure ] crbug.com/591099 tables/mozilla/marvin/x_table_align_center.xml [ Failure ] crbug.com/591099 tables/mozilla/marvin/x_td_nowrap.xml [ Failure ] crbug.com/591099 tables/mozilla/marvin/x_th_nowrap.xml [ Crash Failure ] -crbug.com/591099 tables/mozilla/other/move_row.html [ Crash Failure ] 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 ] @@ -22505,7 +20999,6 @@ crbug.com/591099 tables/mozilla_expected_failures/collapsing_borders/bug41262-6.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/core/captions1.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/core/captions2.html [ Failure ] -crbug.com/591099 tables/mozilla_expected_failures/marvin/backgr_fixed-bg.html [ Crash Failure ] crbug.com/591099 tables/mozilla_expected_failures/marvin/table_overflow_caption.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/marvin/table_overflow_caption_bottom.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/marvin/table_overflow_caption_hidden.html [ Failure ] @@ -22678,7 +21171,6 @@ crbug.com/591099 traversal/node-iterator-009.html [ Failure ] crbug.com/591099 traversal/node-iterator-prototype.html [ Failure ] crbug.com/591099 traversal/size-zero-run.html [ Failure ] -crbug.com/591099 traversal/stay-within-root.html [ Crash ] crbug.com/591099 traversal/tree-walker-003.html [ Failure ] crbug.com/591099 traversal/tree-walker-004.html [ Failure ] crbug.com/591099 traversal/tree-walker-006.html [ Failure ] @@ -22749,7 +21241,6 @@ crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/layer-opacity.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/layer-transform.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/overflow-hidden-child-layers.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/visibility-hidden.html [ Crash ] crbug.com/591099 virtual/disable-spinvalidation/compositing/culling/clear-fixed-iframe.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/culling/scrolled-within-boxshadow.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/culling/translated-boxshadow.html [ Failure Pass ] @@ -22958,7 +21449,6 @@ crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/content-loses-scrollbars.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/descendant-with-clip-path.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/do-not-crash-use-after-free-update-widget-positions.html [ Failure Pass ] -crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Crash Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/fixed-position-ancestor-clip.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/fractional-sized-scrolling-layer.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/grandchild-composited-with-border-radius-ancestor.html [ Failure ] @@ -23242,12 +21732,9 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235.html [ Crash Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/button-inner-no-repaint.html [ Failure Pass ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-change-paint-offset-keep-visual.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-color.html [ Crash Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll.html [ Crash Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-outside-block.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-subpixel.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/change-transform.html [ Failure Pass ] @@ -23457,8 +21944,6 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-after-composited-scroll.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container.html [ Crash Failure ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container.html [ Crash Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-descendants-when-receiving-paint-layer.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-invisible-element.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-paint-for-fixed-pos-inside-iframe.html [ Failure ] @@ -23506,15 +21991,12 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-overflow.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/list-marker-2.html [ Crash Failure ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/list-marker-move.html [ Crash ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/list-marker.html [ Failure ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/local-attachment-background-li-crash.html [ Crash ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/margin.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/media-audio-no-spurious-repaints.html [ Crash ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/mix-blend-mode-separate-stacking-context.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/move-caret-in-container-change-paint-offset-keep-visual.html [ Failure Pass ] -crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame.html [ Crash Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multi-subsequence-composited.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multi-subsequence-scrolled.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multicol-as-paint-container.html [ Failure Pass ] @@ -23763,7 +22245,6 @@ 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-set-disabled.html [ Failure ] 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 ] @@ -23796,7 +22277,6 @@ crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-positioned-percent-top.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-viewport-percent.html [ Failure Pass ] -crbug.com/591099 virtual/disable-spinvalidation/paint/lists/invalidate-list-marker-color.html [ Crash ] crbug.com/591099 virtual/disable-spinvalidation/paint/masks/fieldset-mask.html [ Failure ] crbug.com/591099 virtual/disable-spinvalidation/paint/overflow/interest-rect-change-scroll-down.html [ Failure Pass ] crbug.com/591099 virtual/disable-spinvalidation/paint/overflow/non-composited-fixed-position-descendant.html [ Failure ] @@ -23991,7 +22471,6 @@ crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-textMetrics-width.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-transforms-during-path.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-transforms-fillRect-shadow.html [ Crash ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/check-stale-putImageData.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/draw-focus-if-needed-invisible-crash.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/draw-focus-if-needed-on-event.html [ Crash ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/draw-focus-if-needed-scrolls-horiz.html [ Failure Pass ] @@ -24038,10 +22517,10 @@ crbug.com/591099 virtual/exotic-color-space/images/2-comp.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/2-dht.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/23-55.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/55.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/alt-text-wrapping.html [ Crash ] +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 ] +crbug.com/591099 virtual/exotic-color-space/images/bad-png.html [ Crash Pass ] crbug.com/591099 virtual/exotic-color-space/images/busted-oval-does-not-render.html [ Crash ] 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 ] @@ -24070,10 +22549,7 @@ 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-svg-foreign-object.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/content-url-broken-image-with-alt-text.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/content-url-image-with-alt-text-dynamic-2.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/crash-when-fallback-content-deleted.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/crash-when-zoom-factor-changes.html [ Crash ] 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 ] crbug.com/591099 virtual/exotic-color-space/images/cross-fade-invalidation.html [ Failure ] @@ -24104,17 +22580,17 @@ crbug.com/591099 virtual/exotic-color-space/images/image-click-scale-restore-zoomed-image.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-css3-content-data.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-document-write-assert.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/image-empty-data.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/image-hover-display-alt.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/image-in-map.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-empty-data.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-hover-display-alt.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/image-in-map.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-invalid-data.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/image-load-event-in-fragment.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-map-anchor-children.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-map-multiple-xhtml.xhtml [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-map-multiple.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/image-map-zoom-alt-content.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-map-zoom-alt-content.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-map-zoom.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/image-page-injected-script-crash.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/image-page-injected-script-crash.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-use-counters.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/image-zoom-to-25.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/image-zoom-to-500.html [ Failure ] @@ -24137,7 +22613,6 @@ crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-image-decoding.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/jpeg-yuv-progressive-image.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/large-size-image-crash.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/link-body-content-imageDimensionChanged-crash.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/load-img-with-empty-src.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/motion-jpeg-single-frame.html [ Failure ] @@ -24148,20 +22623,19 @@ crbug.com/591099 virtual/exotic-color-space/images/percent-height-image.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/pixel-crack-image-background-webkit-transform-scale.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/png-extra-row-crash.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/png-missing-plte-before-trns-crash.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/png-suite/test.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/png_per_row_alpha_decoding.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-0px-images-quirk.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-0px-images.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-10px-images.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-16px-images.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-1px-images.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-block-flow-images.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-images-empty-alt.html [ Crash ] -crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-images.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-0px-images-quirk.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-0px-images.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-10px-images.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-16px-images.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-1px-images.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-block-flow-images.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-images-empty-alt.html [ Crash Failure ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-images.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/script-counter-imageDimensionChanged-crash.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/sprite-no-bleed.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/style-access-during-imageChanged-crash.html [ Crash ] +crbug.com/591099 virtual/exotic-color-space/images/style-access-during-imageChanged-crash.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/style-access-during-imageChanged-style-freeze.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/text-content-crash-2.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/text-content-crash.html [ Failure ] @@ -24169,7 +22643,6 @@ crbug.com/591099 virtual/exotic-color-space/images/viewport-in-standalone-image-document.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/webgl-teximage2d.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/webp-flip.html [ Failure ] -crbug.com/591099 virtual/exotic-color-space/images/width-on-broken-data-src.html [ Crash ] crbug.com/591099 virtual/exotic-color-space/images/zoomed-img-size.html [ Failure ] crbug.com/591099 virtual/exotic-color-space/images/zoomed-offset-size.html [ Crash ] crbug.com/591099 virtual/gpu-rasterization/images/12-55.html [ Failure ] @@ -24289,8 +22762,8 @@ crbug.com/591099 virtual/gpu-rasterization/images/png-missing-plte-before-trns-crash.html [ Crash Pass ] crbug.com/591099 virtual/gpu-rasterization/images/png-suite/test.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/png_per_row_alpha_decoding.html [ Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk.html [ Crash ] -crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-0px-images.html [ Crash ] +crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk.html [ Crash Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-0px-images.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-10px-images.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-16px-images.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-1px-images.html [ Crash Failure ] @@ -24458,7 +22931,6 @@ crbug.com/591099 virtual/gpu/fast/canvas/canvas-textMetrics-width.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-transforms-during-path.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-transforms-fillRect-shadow.html [ Crash ] -crbug.com/591099 virtual/gpu/fast/canvas/check-stale-putImageData.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/draw-focus-if-needed-invisible-crash.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/draw-focus-if-needed-on-event.html [ Crash ] crbug.com/591099 virtual/gpu/fast/canvas/draw-focus-if-needed-scrolls-horiz.html [ Failure Pass ] @@ -24540,9 +23012,6 @@ crbug.com/591099 virtual/mojo-loading/http/tests/inspector/appcache/appcache-manifest-with-non-existing-file.html [ Pass Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/appcache/appcache-swap.html [ Pass Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/bindings/livelocation-main-frame-navigated.html [ Failure ] -crbug.com/591099 virtual/mojo-loading/http/tests/inspector/cache-storage/cache-names.html [ Timeout ] -crbug.com/591099 virtual/mojo-loading/http/tests/inspector/network/network-document-initiator.html [ Timeout ] -crbug.com/591099 virtual/mojo-loading/http/tests/inspector/network/network-fetch.html [ Timeout ] 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 ] @@ -24554,7 +23023,6 @@ 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/security/cross-frame-mouse-source-capabilities.html [ Pass Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/serviceworker/ServiceWorkerGlobalScope/registration-attribute.html [ Failure Pass ] -crbug.com/591099 virtual/mojo-loading/http/tests/websocket/cookie-document-to-ws.html [ Failure ] crbug.com/591099 virtual/mojo-localstorage/external/wpt/webstorage/event_no_duplicates.html [ Crash ] crbug.com/591099 virtual/mojo-localstorage/external/wpt/webstorage/storage_setitem.html [ Pass Timeout ] crbug.com/591099 virtual/mojo-localstorage/storage/domstorage/localstorage/missing-arguments.html [ Failure ] @@ -24609,7 +23077,6 @@ crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/extendable-event-async-waituntil.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-csp.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 ] @@ -24630,11 +23097,9 @@ crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/navigation-redirect.https.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/ready.https.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-closed-window.https.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-link-element.https.html [ Timeout ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-link-header.https.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/register-same-scope-different-script-url.https.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/registration-iframe.https.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/registration.https.html [ Timeout ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/unregister-controller.https.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/unregister-then-register-new-script.https.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/unregister-then-register.https.html [ Crash ] @@ -24667,7 +23132,7 @@ crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/char-encoding-in-hidden-charset-field-with-accept-charset.html [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/char-encoding-in-hidden-charset-field-with-get-method.html [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/char-encoding-in-hidden-charset-field-with-one-field.html [ Failure ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/char-encoding-in-text-charset-field-with-value.html [ Crash ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/char-encoding-in-text-charset-field-with-value.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/char-encoding-without-charset-field.html [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/client-hint-accept-on-subresource.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/client-hints-accept-iframe.html [ Crash ] @@ -24691,14 +23156,14 @@ crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/embed-image-load-outlives-gc-without-crashing.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/empty-cookie.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/empty-file-formdata.html [ Crash Failure ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/empty-urls.html [ Crash ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/empty-urls.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/error404.pl [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/extract-http-content-language-against-equiv.php [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/extract-http-content-language-malformed.php [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/extract-http-content-language-multiple.php [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/extract-http-content-language.php [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/favicon-as-image.html [ Crash Failure ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/font-face-in-multiple-segmented-faces.html [ Crash ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/font-face-in-multiple-segmented-faces.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/form-action-using-replaceChild.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/form-post-textplain.html [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/frame-access-during-load.html [ Failure ] @@ -24707,7 +23172,7 @@ crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/iframe-reparenting-id-collision.html [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/iframe404.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/image-blocked-src-change.html [ Failure ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/image-blocked-src-no-change.html [ Crash ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/image-blocked-src-no-change.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/image-input-type-outlives-gc-without-crashing.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/image-load-outlives-gc-without-crashing.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/image-onerror-no-load-event.html [ Failure ] @@ -24720,7 +23185,7 @@ crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/object-image-error.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/object-image-load-outlives-gc-without-crashing.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/onload-remove-iframe-crash-2.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/percent-sign-in-form-field-name.html [ Crash ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/percent-sign-in-form-field-name.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/plugin-array-detach.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/refresh-headers.php [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/resource-timing-iframe-restored-from-history.html [ Failure ] @@ -24732,14 +23197,14 @@ crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/slow-loading-image-in-pattern.html [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/slow-loading-mask.html [ Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/slow-preload-cancel.html [ Crash Failure ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-get-in-utf16be.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-get-in-utf16le.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-get-in-utf32be.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-get-in-utf32le.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-post-in-utf16be.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-post-in-utf16le.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-post-in-utf32be.html [ Crash ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-post-in-utf32le.html [ Crash ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-get-in-utf16be.html [ Crash Failure ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-get-in-utf16le.html [ Crash Failure ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-get-in-utf32be.html [ Crash Failure ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-get-in-utf32le.html [ Crash Failure ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-post-in-utf16be.html [ Crash Failure ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-post-in-utf16le.html [ Crash Failure ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-post-in-utf32be.html [ Crash Failure ] +crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/submit-post-in-utf32le.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/svg-image-load-outlives-gc-without-crashing.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/uncacheable-script-repeated.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/misc/unloadable-script.html [ Failure ] @@ -24757,7 +23222,6 @@ crbug.com/591099 virtual/off-main-thread-fetch/http/tests/security/cookies/websocket/third-party-cookie-blocked-on-cross-origin-websocket.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/security/cookies/websocket/third-party-cookie-blocked-on-same-origin-websocket.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/serviceworker/ServiceWorkerGlobalScope/registration-attribute.html [ Failure Pass ] -crbug.com/591099 virtual/off-main-thread-fetch/http/tests/serviceworker/chromium.fetch-csp.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/frame-detached-by-navigation.html [ Crash ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/resolve-after-window-close.html [ Crash Failure ] crbug.com/591099 virtual/off-main-thread-fetch/http/tests/serviceworker/chromium/service-worker-gc.html [ Failure ] @@ -24829,7 +23293,6 @@ crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-loses-scrollbars.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/descendant-with-clip-path.html [ Failure Pass ] -crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Crash Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/fixed-position-ancestor-clip.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/fractional-sized-scrolling-layer.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/grandchild-composited-with-border-radius-ancestor.html [ Failure ] @@ -24900,8 +23363,6 @@ crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/basic-scrollbar.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-appearance-property.html [ Failure ] -crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-changing-style-relayout-body-scrollablearea.html [ Crash ] -crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-changing-style-relayout-div-body-scrollablearea.html [ Crash ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-display.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-enable-changes-thickness-with-iframe.html [ Failure Pass ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-not-inherited-by-iframe.html [ Crash ] @@ -24925,7 +23386,6 @@ crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-click-does-not-blur-content.html [ Crash ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-content-crash.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-crash-on-refresh.html [ Failure ] -crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-large-overflow-rectangle.html [ Crash ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-miss-mousemove-disabled.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-miss-mousemove.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-orientation.html [ Failure ] @@ -24952,7 +23412,6 @@ crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/html-element-client-rect-excludes-scrollbars.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/jquery-rtl-scroll-type.html [ Failure Pass ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/keyboard-scroll-page-scale.html [ Failure ] -crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/listbox-wheel-event.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/non-composited-scrolling-repaint-to-ancestor-backing.html [ Failure Pass ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/overflow-auto-ltr.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/overflow-scrollability.html [ Failure ] @@ -24965,13 +23424,8 @@ crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scroll-to-origin-with-options-no-layout.html [ Failure Pass ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-dynamic-overflow.html [ Failure Pass ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-frame-overflow-hidden.html [ Crash Failure ] -crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-frame-overried-inherited-visibility-hidden.html [ Crash Failure ] -crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-frame-scrolling-no-overried-inherited-visibility-hidden.html [ Crash Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-frame-scrolling-no-visibility-hidden-child.html [ Crash Pass ] -crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-frame-scrolling-no.html [ Crash Failure ] -crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-frame-scrolling-yes.html [ Crash Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-frame-visibility-hidden-child.html [ Crash Pass ] -crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-frame.html [ Crash Failure ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-overflow-auto-visibility-override.html [ Failure Pass ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-overflow-auto-visibility-visible.html [ Failure Pass ] crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-overflow-auto.html [ Failure Pass ] @@ -24988,8 +23442,6 @@ crbug.com/591099 virtual/rootlayerscrolls/scrollbars/basic-scrollbar.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/scrollbars/custom-scrollbar-appearance-property.html [ Failure ] -crbug.com/591099 virtual/rootlayerscrolls/scrollbars/custom-scrollbar-changing-style-relayout-body-scrollablearea.html [ Crash ] -crbug.com/591099 virtual/rootlayerscrolls/scrollbars/custom-scrollbar-changing-style-relayout-div-body-scrollablearea.html [ Crash ] crbug.com/591099 virtual/rootlayerscrolls/scrollbars/custom-scrollbar-display.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/scrollbars/custom-scrollbar-enable-changes-thickness-with-iframe.html [ Failure Pass ] crbug.com/591099 virtual/rootlayerscrolls/scrollbars/custom-scrollbar-not-inherited-by-iframe.html [ Crash ] @@ -25013,7 +23465,6 @@ crbug.com/591099 virtual/rootlayerscrolls/scrollbars/scrollbar-click-does-not-blur-content.html [ Crash ] crbug.com/591099 virtual/rootlayerscrolls/scrollbars/scrollbar-content-crash.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/scrollbars/scrollbar-crash-on-refresh.html [ Failure ] -crbug.com/591099 virtual/rootlayerscrolls/scrollbars/scrollbar-large-overflow-rectangle.html [ Crash ] crbug.com/591099 virtual/rootlayerscrolls/scrollbars/scrollbar-miss-mousemove-disabled.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/scrollbars/scrollbar-miss-mousemove.html [ Failure ] crbug.com/591099 virtual/rootlayerscrolls/scrollbars/scrollbar-orientation.html [ Failure ] @@ -25082,10 +23533,8 @@ crbug.com/591099 virtual/stable/http/tests/navigation/history-back-across-form-submission-to-fragment.html [ Failure ] crbug.com/591099 virtual/stable/http/tests/navigation/image-load-in-subframe-unload-handler.html [ Crash ] crbug.com/591099 virtual/stable/http/tests/navigation/image-load-in-unload-handler.html [ Crash Pass ] -crbug.com/591099 virtual/stable/http/tests/navigation/javascriptlink-basic.html [ Crash Timeout ] -crbug.com/591099 virtual/stable/http/tests/navigation/javascriptlink-frames.html [ Crash Timeout ] -crbug.com/591099 virtual/stable/http/tests/navigation/javascriptlink-goback.html [ Crash Timeout ] -crbug.com/591099 virtual/stable/http/tests/navigation/javascriptlink-subframeload.html [ Crash Timeout ] +crbug.com/591099 virtual/stable/http/tests/navigation/javascriptlink-basic.html [ Crash Failure Timeout ] +crbug.com/591099 virtual/stable/http/tests/navigation/javascriptlink-goback.html [ Crash Failure Timeout ] crbug.com/591099 virtual/stable/http/tests/navigation/lockedhistory-iframe.html [ Failure ] crbug.com/591099 virtual/stable/http/tests/navigation/metaredirect-basic.html [ Crash Failure ] crbug.com/591099 virtual/stable/http/tests/navigation/metaredirect-frames.html [ Crash Pass ] @@ -25096,9 +23545,6 @@ crbug.com/591099 virtual/stable/http/tests/navigation/navigation-with-detached-origin-document.html [ Crash Pass ] crbug.com/591099 virtual/stable/http/tests/navigation/no-referrer-reset.html [ Failure Timeout ] crbug.com/591099 virtual/stable/http/tests/navigation/onload-navigation-iframe-2.html [ Failure ] -crbug.com/591099 virtual/stable/http/tests/navigation/ping-cookie.html [ Crash Timeout ] -crbug.com/591099 virtual/stable/http/tests/navigation/ping-cross-origin-from-https.html [ Crash Timeout ] -crbug.com/591099 virtual/stable/http/tests/navigation/ping-cross-origin.html [ Crash Timeout ] crbug.com/591099 virtual/stable/http/tests/navigation/ping-same-origin.html [ Crash Timeout ] crbug.com/591099 virtual/stable/http/tests/navigation/post-301-response.html [ Crash Pass ] crbug.com/591099 virtual/stable/http/tests/navigation/post-302-response.html [ Crash Pass ] @@ -25110,10 +23556,7 @@ crbug.com/591099 virtual/stable/http/tests/navigation/post-goback-same-url.html [ Crash Failure ] crbug.com/591099 virtual/stable/http/tests/navigation/post-goback1.html [ Crash Failure ] crbug.com/591099 virtual/stable/http/tests/navigation/post-goback2.html [ Crash Failure ] -crbug.com/591099 virtual/stable/http/tests/navigation/postredirect-basic.html [ Crash Pass ] crbug.com/591099 virtual/stable/http/tests/navigation/postredirect-frames-goback1.html [ Crash Failure ] -crbug.com/591099 virtual/stable/http/tests/navigation/postredirect-frames.html [ Crash Pass ] -crbug.com/591099 virtual/stable/http/tests/navigation/postredirect-goback1.html [ Crash Pass ] crbug.com/591099 virtual/stable/http/tests/navigation/postredirect-goback2.html [ Crash Failure ] crbug.com/591099 virtual/stable/http/tests/navigation/redirect-load-no-form-restoration.html [ Crash Pass ] crbug.com/591099 virtual/stable/http/tests/navigation/redirect302-basic.html [ Crash Failure ] @@ -25182,7 +23625,6 @@ crbug.com/591099 virtual/threaded/animations/composition/caret-color-composition.html [ Crash ] crbug.com/591099 virtual/threaded/animations/composition/stroke-dasharray-composition.html [ Crash ] crbug.com/591099 virtual/threaded/animations/computed-style.html [ Failure ] -crbug.com/591099 virtual/threaded/animations/cross-fade-list-style-image.html [ Crash ] crbug.com/591099 virtual/threaded/animations/css-animation-overrides-svg-presentation-attribute-animation.html [ Crash ] crbug.com/591099 virtual/threaded/animations/delay-start-event.html [ Failure ] crbug.com/591099 virtual/threaded/animations/display-change-does-not-terminate-animation.html [ Crash ] @@ -25224,7 +23666,6 @@ crbug.com/591099 virtual/threaded/animations/interpolation/font-weight-interpolation.html [ Crash ] crbug.com/591099 virtual/threaded/animations/interpolation/height-interpolation.html [ Crash ] crbug.com/591099 virtual/threaded/animations/interpolation/line-height-interpolation.html [ Crash ] -crbug.com/591099 virtual/threaded/animations/interpolation/list-style-image-interpolation.html [ Crash ] crbug.com/591099 virtual/threaded/animations/interpolation/margin-interpolation.html [ Crash ] crbug.com/591099 virtual/threaded/animations/interpolation/max-height-interpolation.html [ Crash ] crbug.com/591099 virtual/threaded/animations/interpolation/min-height-interpolation.html [ Crash ] @@ -25638,7 +24079,6 @@ crbug.com/591099 virtual/threaded/printing/standards-percentage-heights.html [ Failure Pass ] crbug.com/591099 virtual/threaded/printing/stretch-to-view-height.html [ Failure ] crbug.com/591099 virtual/threaded/printing/subframes-percentage-height.html [ Failure Pass ] -crbug.com/591099 virtual/threaded/printing/text-color-adjust.html [ Crash ] crbug.com/591099 virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables.html [ Failure ] crbug.com/591099 virtual/threaded/printing/thead-repeats-at-top-of-each-page.html [ Failure ] crbug.com/591099 virtual/threaded/printing/viewport-size-dependant-iframe-with-multicol-crash.html [ Failure ] @@ -25668,7 +24108,7 @@ crbug.com/591099 virtual/threaded/transitions/transition-end-event-destroy-iframe.html [ Crash ] crbug.com/591099 virtual/threaded/transitions/transition-end-event-destroy-renderer.html [ Failure ] crbug.com/591099 virtual/threaded/transitions/transition-end-event-left.html [ Failure ] -crbug.com/591099 virtual/threaded/transitions/transition-end-event-multiple-01.html [ Failure ] +crbug.com/591099 virtual/threaded/transitions/transition-end-event-multiple-01.html [ Failure Timeout ] crbug.com/591099 virtual/threaded/transitions/transition-end-event-multiple-02.html [ Failure ] crbug.com/591099 virtual/threaded/transitions/transition-end-event-multiple-03.html [ Failure ] crbug.com/591099 virtual/threaded/transitions/transition-end-event-nested.html [ Failure ] @@ -25761,3 +24201,53 @@ crbug.com/591099 webmidi/send-messages.html [ Failure ] crbug.com/591099 webmidi/send-system-messages.html [ Failure ] crbug.com/591099 xmlviewer/extensions-api.html [ Failure ] +crbug.com/591099 css3/blending/svg-blend-luminosity.html [ Failure ] +crbug.com/591099 css3/blending/svg-blend-color.html [ Failure ] +crbug.com/591099 css3/blending/svg-blend-hue.html [ Failure ] +crbug.com/591099 css3/blending/svg-blend-saturation.html [ Failure ] +crbug.com/591099 fast/forms/fieldset/legend-after-margin-horizontal-writing-mode.html [ Failure ] +crbug.com/591099 fast/forms/fieldset/legend-after-margin-vertical-writing-mode.html [ Failure ] +crbug.com/591099 fast/forms/number/number-losing-renderer-on-click.html [ Crash ] +crbug.com/591099 fast/forms/text/textfield-onchange-deletion.html [ Crash ] +crbug.com/591099 fast/forms/select-popup/popup-menu-appearance-transform.html [ Failure ] +crbug.com/591099 fast/forms/select-popup/popup-menu-appearance-minimum-font.html [ Failure ] +crbug.com/591099 fast/forms/select-popup/popup-menu-appearance-texttransform.html [ Failure ] +crbug.com/591099 fast/forms/select-popup/popup-menu-appearance-single-option.html [ Failure ] +crbug.com/591099 fast/forms/select-popup/popup-menu-key-operations.html [ Failure ] +crbug.com/591099 fast/forms/select-popup/popup-menu-appearance.html [ Failure ] +crbug.com/591099 fast/multicol/paged-becomes-multicol-with-spanner.html [ Failure ] +crbug.com/591099 fast/events/onbeforeunload-focused-iframe.html [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes-3/overconstrained-rel-pos-rtl-left-right-vrl-008.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes-3/overconstrained-rel-pos-rtl-top-bottom-vrl-006.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes-3/overconstrained-rel-pos-rtl-left-right-vlr-009.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes-3/overconstrained-rel-pos-rtl-top-bottom-vlr-007.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes-3/overconstrained-rel-pos-ltr-top-bottom-vrl-002.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes-3/overconstrained-rel-pos-ltr-top-bottom-vlr-003.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-display-3/display-contents-dynamic-list-001-none.html [ Failure ] +crbug.com/591099 external/wpt/css/css-display-3/display-contents-list-001.html [ Failure ] +crbug.com/591099 external/wpt/css/css-display-3/display-contents-dynamic-list-001-inline.html [ Failure ] +crbug.com/591099 external/wpt/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_srcdoc.html [ Crash ] +crbug.com/591099 external/wpt/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_null.tentative.html [ Crash ] +crbug.com/591099 inspector/sources/debugger/live-edit.html [ Failure ] +crbug.com/591099 inspector/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Crash Timeout ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb.html [ Failure ] +crbug.com/591099 virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb.html [ Failure ] +crbug.com/591099 virtual/layout_ng/fast/block/float/002.html [ Failure ] +crbug.com/591099 virtual/layout_ng/fast/block/float/017.html [ Failure ] +crbug.com/591099 virtual/layout_ng/fast/block/float/formatting-context-changes.html [ Failure ] +crbug.com/591099 virtual/layout_ng/fast/block/float/rubybase-children-made-inline-crash.html [ Failure ] +crbug.com/591099 http/tests/csspaint/border-color.html [ Failure ] +crbug.com/591099 fast/ruby/generated-before-counter-doesnt-crash.html [ Failure ] +crbug.com/591099 fast/pagination/auto-height.html [ Failure ] +crbug.com/591099 fast/history/saves-state-after-frame-nav.html [ Failure ] +crbug.com/591099 paint/tables/stacking-context-row-background-clipped-with-offset.html [ Failure ] +crbug.com/591099 external/wpt/css/css-rhythm-1/line-height-step-writing-mode-vrl-ruby-001.html [ Failure ] +crbug.com/591099 editing/pasteboard/smart-paste-in-text-control.html [ Failure ] +crbug.com/591099 editing/selection/readonly-disabled-hittest.html [ Failure ] +crbug.com/591099 virtual/disable-spinvalidation/paint/tables/stacking-context-row-background-clipped-with-offset.html [ Failure ] +crbug.com/591099 virtual/stable/http/tests/navigation/postredirect-frames.html [ Failure ] +crbug.com/591099 virtual/stable/http/tests/navigation/postredirect-basic.html [ Failure ] +crbug.com/591099 virtual/stable/http/tests/navigation/postredirect-goback1.html [ Failure ] +crbug.com/591099 http/tests/navigation/postredirect-frames.html [ Failure ] +crbug.com/591099 http/tests/navigation/postredirect-basic.html [ Failure ] +crbug.com/591099 http/tests/navigation/postredirect-goback1.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 4512fec7..f3d0f35 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -315,6 +315,9 @@ crbug.com/704961 [ Mac ] virtual/layout_ng/external/wpt/css/CSS2/positioning/position-applies-to-014.xht [ Failure ] crbug.com/704961 [ Mac ] virtual/layout_ng/external/wpt/css/CSS2/positioning/position-applies-to-015.xht [ Failure ] +### virtual/layout_ng Mac textarea. +crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/overhanging-tall-block.html [ Failure ] + ### virtual/layout_ng Mac 1px glyph difference. crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/basic/015.html [ Failure ] @@ -599,7 +602,7 @@ crbug.com/635619 virtual/layout_ng/fast/block/basic/white-space-pre-wraps.html [ Failure ] ### virtual/layout_ng/fast/block/float -crbug.com/635619 virtual/layout_ng/fast/block/float/002.html [ Crash ] +crbug.com/635619 virtual/layout_ng/fast/block/float/002.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/003.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/008.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/010.html [ Failure ] @@ -608,7 +611,7 @@ crbug.com/635619 virtual/layout_ng/fast/block/float/014.html [ Failure Crash ] crbug.com/635619 virtual/layout_ng/fast/block/float/015.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/016.html [ Failure ] -crbug.com/635619 virtual/layout_ng/fast/block/float/017.html [ Crash ] +crbug.com/635619 virtual/layout_ng/fast/block/float/017.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/018.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/019.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/020.html [ Failure ] @@ -640,7 +643,6 @@ crbug.com/635619 virtual/layout_ng/fast/block/float/avoiding-float-centered.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/block-with-negative-margin-clears-float.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/br-with-clear-2.html [ Failure ] -crbug.com/635619 virtual/layout_ng/fast/block/float/br-with-clear.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/centered-float-avoidance-complexity.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/checkbox-and-radio-avoid-floats.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/clear-element-too-wide-for-containing-block.html [ Failure ] @@ -661,7 +663,6 @@ crbug.com/635619 virtual/layout_ng/fast/block/float/float-in-float-painting.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-inserted-into-clean-line.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-list-changed-before-layout-crash.html [ Crash ] -crbug.com/635619 virtual/layout_ng/fast/block/float/float-not-removed-from-first-letter.html [ Crash ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-not-removed-from-next-sibling-crash.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-not-removed-from-next-sibling3.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-not-removed-from-next-sibling5.html [ Failure ] @@ -689,7 +690,7 @@ crbug.com/635619 virtual/layout_ng/fast/block/float/floats-wrap-inside-inline-003.htm [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/floats-wrap-inside-inline-004.htm [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/floats-wrap-inside-inline-007.html [ Failure ] -crbug.com/635619 virtual/layout_ng/fast/block/float/formatting-context-changes.html [ Crash ] +crbug.com/635619 virtual/layout_ng/fast/block/float/formatting-context-changes.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/independent-align-positioning.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/intruding-float-add-in-sibling-block-on-static-position.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/intruding-float-add-in-sibling-block-on-static-position2.html [ Failure ] @@ -710,13 +711,12 @@ crbug.com/635619 virtual/layout_ng/fast/block/float/overhanging-float-container-add-compositing.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/overhanging-float-remove-from-fixed-position-block.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/overhanging-float-remove-from-fixed-position-block2.html [ Failure ] -crbug.com/635619 virtual/layout_ng/fast/block/float/overhanging-tall-block.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/overlapping-floats-paint-hittest-order-1.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/overlapping-floats-paint-hittest-order-2.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/override-property-float.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/relative-painted-twice.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/remove-line-above-float-above-line-crash.html [ Failure ] -crbug.com/635619 virtual/layout_ng/fast/block/float/rubybase-children-made-inline-crash.html [ Crash ] +crbug.com/635619 virtual/layout_ng/fast/block/float/rubybase-children-made-inline-crash.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/rubybase-children-moved-crash-2.html [ Failure Crash ] crbug.com/635619 virtual/layout_ng/fast/block/float/rubybase-children-moved-crash.html [ Crash ] crbug.com/635619 virtual/layout_ng/fast/block/float/shrink-to-avoid-float-complexity.html [ Failure ] @@ -760,8 +760,6 @@ crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/empty-clear-blocks.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/line-beside-float-complex-margin-collapsing.html [ Failure Crash ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/self-collapsing-block-creates-block-formatting-context.html [ Failure ] -crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/self-collapsing-block-getting-layout-set.html [ Crash ] -crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/self-collapsing-block-with-float-children.html [ Crash ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/self-collapsing-block-with-float-descendants.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/self-collapsing-block-with-overflow-hidden-and-float-child.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/self-collapsing-cols-creates-block-formatting-context.html [ Failure ] @@ -776,6 +774,9 @@ crbug.com/724701 virtual/layout_ng/overflow/overflow-basic-004.html [ Failure ] crbug.com/728378 virtual/layout_ng/overflow/overflow-bug-chrome-ng-001.html [ Failure ] crbug.com/728378 virtual/layout_ng/overflow/overflow-transform-002.html [ Failure ] +crbug.com/728378 virtual/layout_ng/overflow/overflow-position-001.html [ Failure ] +crbug.com/728378 virtual/layout_ng/overflow/overflow-position-002.html [ Failure ] +crbug.com/728378 virtual/layout_ng/overflow/overflow-position-003.html [ Failure ] # ====== LayoutNG-only failures until here ======
diff --git a/third_party/WebKit/LayoutTests/bluetooth/requestDevice/acceptAllDevices/optional-services-missing.html b/third_party/WebKit/LayoutTests/bluetooth/requestDevice/acceptAllDevices/optional-services-missing.html index 738e0f0..1aef3568 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/requestDevice/acceptAllDevices/optional-services-missing.html +++ b/third_party/WebKit/LayoutTests/bluetooth/requestDevice/acceptAllDevices/optional-services-missing.html
@@ -8,7 +8,7 @@ 'use strict'; promise_test(() => { return getHealthThermometerDevice({acceptAllDevices: true}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryServices(), new DOMException( 'Origin is not allowed to access any service. ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.html b/third_party/WebKit/LayoutTests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.html index 1a69b79..2b9fef68 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.html +++ b/third_party/WebKit/LayoutTests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.html
@@ -16,7 +16,7 @@ filters: [{services: ['health_thermometer']}], optionalServices: ['human_interface_device'] }) - .then(([device, fake_peripheral]) => { + .then(({device, fake_peripheral}) => { return fake_peripheral .setNextGATTConnectionResponse({code: HCI_SUCCESS}) .then(() => device.gatt.connect())
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-before.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-before.js index 3945d6f..1c93f99 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-before.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-before.js
@@ -3,7 +3,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { device.gatt.disconnect(); return assert_promise_rejects_with_message( device.gatt.CALLS([
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-during-error.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-during-error.js index f79f856..4dafb7b0 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-during-error.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-during-error.js
@@ -1,7 +1,7 @@ 'use strict'; promise_test(() => { return getEmptyHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { let promise = assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService('health_thermometer')|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-during-success.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-during-success.js index 1256f567..722a04b 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-during-success.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-called-during-success.js
@@ -3,7 +3,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { let promise = assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService('health_thermometer')|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-invalidates-objects.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-invalidates-objects.js index deb310d1..3367d92 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-invalidates-objects.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnect-invalidates-objects.js
@@ -3,7 +3,7 @@ let promise; return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => { + .then(({device}) => { return device.gatt.CALLS([ getPrimaryService('health_thermometer')| getPrimaryServices()|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnected-device.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnected-device.js index 2ae7af2..e1d66cb 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnected-device.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/disconnected-device.js
@@ -4,7 +4,7 @@ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access'] }) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService('health_thermometer')| getPrimaryServices()|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/discovery-complete-no-permission-absent-service.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/discovery-complete-no-permission-absent-service.js index 27f8bba..cba08269 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/discovery-complete-no-permission-absent-service.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/discovery-complete-no-permission-absent-service.js
@@ -7,7 +7,7 @@ 'SecurityError'); return getHealthThermometerDeviceWithServicesDiscovered({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService(glucose.alias)|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/discovery-complete-service-not-found.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/discovery-complete-service-not-found.js index 879b6cd..39f8376 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/discovery-complete-service-not-found.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/discovery-complete-service-not-found.js
@@ -3,7 +3,7 @@ return getHealthThermometerDeviceWithServicesDiscovered({ filters: [{services: ['health_thermometer']}], optionalServices: ['glucose']}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService('glucose')| getPrimaryServices('glucose')[UUID]
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/garbage-collection-ran-during-error.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/garbage-collection-ran-during-error.js index 360ee82..7ae3837 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/garbage-collection-ran-during-error.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/garbage-collection-ran-during-error.js
@@ -2,7 +2,7 @@ promise_test(() => { let promise; return getEmptyHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { promise = assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService('health_thermometer')|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/garbage-collection-ran-during-success.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/garbage-collection-ran-during-success.js index 18e98f6a..f03a204 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/garbage-collection-ran-during-success.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/garbage-collection-ran-during-success.js
@@ -3,7 +3,7 @@ let promise; return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => { + .then(({device}) => { promise = assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService('health_thermometer') |
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/get-different-service-after-reconnection.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/get-different-service-after-reconnection.js index 2dcc9ab6..e18bc2aa 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/get-different-service-after-reconnection.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/get-different-service-after-reconnection.js
@@ -3,7 +3,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { let services_first_connection; return device.gatt.CALLS([ getPrimaryService('health_thermometer')|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/get-same-object.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/get-same-object.js index 167e2c7e..10d440f 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/get-same-object.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/get-same-object.js
@@ -3,7 +3,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ device.gatt.CALLS([ getPrimaryService('health_thermometer')| getPrimaryServices()|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/invalid-service-name.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/invalid-service-name.js index 32544f0..5205b5c 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/invalid-service-name.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/invalid-service-name.js
@@ -1,7 +1,7 @@ 'use strict'; promise_test(() => { return getHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { return assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService('wrong_name')|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-absent-service.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-absent-service.js index 5be6047..061ff09 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-absent-service.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-absent-service.js
@@ -7,7 +7,7 @@ 'SecurityError'); return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService(glucose.alias)|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-for-any-service.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-for-any-service.js index e2e95c2e..41286232 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-for-any-service.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-for-any-service.js
@@ -1,7 +1,7 @@ 'use strict'; promise_test(() => { return getHealthThermometerDevice({acceptAllDevices: true}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService('heart_rate')| getPrimaryServices()|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-present-service.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-present-service.js index f7de4d2..eb9dc48c 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-present-service.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/no-permission-present-service.js
@@ -7,7 +7,7 @@ 'SecurityError'); return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService(generic_access.alias)|
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/service-not-found.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/service-not-found.js index 09c7d916..888aee2 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/service-not-found.js +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/server/service-not-found.js
@@ -3,7 +3,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['glucose']}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.CALLS([ getPrimaryService('glucose')| getPrimaryServices('glucose')[UUID]
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/blocklisted-characteristics-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/blocklisted-characteristic.js similarity index 63% copy from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/blocklisted-characteristics-with-uuid.html copy to third_party/WebKit/LayoutTests/bluetooth/script-tests/service/blocklisted-characteristic.js index 799d8d8..34669a5 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/blocklisted-characteristics-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/blocklisted-characteristic.js
@@ -1,18 +1,16 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> -<script> 'use strict'; promise_test(() => { return setBluetoothFakeAdapter('BlocklistTestAdapter') .then(() => requestDeviceWithKeyDown({ filters: [{services: ['device_information']}]})) .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('device_information')) + .then(gatt => gatt.getPrimaryService('device_information')) .then(service => { return assert_promise_rejects_with_message( - service.getCharacteristics('serial_number_string'), + service.CALLS([ + getCharacteristic('serial_number_string')| + getCharacteristics('serial_number_string')[UUID] + ]), new DOMException('getCharacteristic(s) called with blocklisted UUID. ' + 'https://goo.gl/4NeimX', 'SecurityError'), @@ -20,4 +18,3 @@ }); }, 'Serial Number String characteristic is blocklisted. Should reject with ' + 'SecurityError.'); -</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/characteristic-not-found.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/characteristic-not-found.js new file mode 100644 index 0000000..8b7269a --- /dev/null +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/characteristic-not-found.js
@@ -0,0 +1,17 @@ +'use strict'; +promise_test(() => { + return setBluetoothFakeAdapter('HeartRateAdapter') + .then(() => requestDeviceWithKeyDown({ + filters: [{services: ['heart_rate']}]})) + .then(device => device.gatt.connect()) + .then(gatt => gatt.getPrimaryService('heart_rate')) + .then(service => assert_promise_rejects_with_message( + service.CALLS([ + getCharacteristic('battery_level')| + getCharacteristics('battery_level')[UUID] + ]), + new DOMException( + 'No Characteristics matching UUID ' + battery_level.uuid + ' found ' + + 'in Service with UUID ' + heart_rate.uuid + '.', + 'NotFoundError'))); +}, 'Request for absent characteristics with UUID. Reject with NotFoundError.');
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/device-disconnects-before.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/device-disconnects-before.js new file mode 100644 index 0000000..b83d2471 --- /dev/null +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/device-disconnects-before.js
@@ -0,0 +1,26 @@ +'use strict'; +promise_test(() => { + return setBluetoothFakeAdapter('DisconnectingHeartRateAdapter') + .then(() => requestDeviceWithKeyDown({ + filters: [{services: ['heart_rate']}], + optionalServices: [request_disconnection_service_uuid] + })) + .then(device => device.gatt.connect()) + .then(gatt => { + let heart_rate_service; + return gatt.getPrimaryService('heart_rate') + .then(hrs => heart_rate_service = hrs) + .then(() => get_request_disconnection(gatt)) + .then(requestDisconnection => requestDisconnection()) + .then(() => assert_promise_rejects_with_message( + heart_rate_service.CALLS([ + getCharacteristic('heart_rate_measurement')| + getCharacteristics()| + getCharacteristics('heart_rate_measurement')[UUID] + ]), + new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError'))); + }); +}, 'Device disconnects before FUNCTION_NAME call. Reject with NetworkError.');
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/device-disconnects-during.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/device-disconnects-during.js new file mode 100644 index 0000000..0fe50a5d --- /dev/null +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/device-disconnects-during.js
@@ -0,0 +1,28 @@ +'use strict'; +promise_test(() => { + return setBluetoothFakeAdapter('DisconnectingHeartRateAdapter') + .then(() => requestDeviceWithKeyDown({ + filters: [{services: ['heart_rate']}], + optionalServices: [request_disconnection_service_uuid] + })) + .then(device => device.gatt.connect()) + .then(gatt => { + let heart_rate_service; + return gatt.getPrimaryService('heart_rate') + .then(hrs => heart_rate_service = hrs) + .then(() => get_request_disconnection(gatt)) + .then(requestDisconnection => { + requestDisconnection(); + return assert_promise_rejects_with_message( + heart_rate_service.CALLS([ + getCharacteristic('heart_rate_measurement')| + getCharacteristics()| + getCharacteristics('heart_rate_measurement')[UUID] + ]), + new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError')); + }); + }); +}, 'Device disconnects during FUNCTION_NAME call. Reject with NetworkError.');
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/device-goes-out-of-range.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/device-goes-out-of-range.js new file mode 100644 index 0000000..361d003 --- /dev/null +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/device-goes-out-of-range.js
@@ -0,0 +1,22 @@ +'use strict'; +promise_test(() => { + return setBluetoothFakeAdapter('HeartRateAdapter') + .then(() => requestDeviceWithKeyDown({ + filters: [{services: ['heart_rate']}], + optionalServices: ['generic_access']})) + .then(device => device.gatt.connect()) + .then(gatt => gatt.getPrimaryService('generic_access')) + .then(service => { + return setBluetoothFakeAdapter('EmptyAdapter') + .then(() => assert_promise_rejects_with_message( + service.CALLS([ + getCharacteristic('gap.device_name')| + getCharacteristics()| + getCharacteristics('gap.device_name')[UUID] + ]), + new DOMException('Bluetooth Device is no longer in range.', + 'NetworkError'), + 'Device went out of range.')); + }); +}, 'FUNCTION_NAME called after device goes out of range. Reject with ' + + 'NetworkError.');
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/disconnect-called-before.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/disconnect-called-before.js new file mode 100644 index 0000000..c69428746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/disconnect-called-before.js
@@ -0,0 +1,23 @@ +'use strict'; +promise_test(() => { + return setBluetoothFakeAdapter('HeartRateAdapter') + .then(() => requestDeviceWithKeyDown({ + filters: [{services: ['heart_rate']}]})) + .then(device => device.gatt.connect()) + .then(gatt => { + return gatt.getPrimaryService('heart_rate') + .then(heart_rate_service => { + gatt.disconnect(); + return assert_promise_rejects_with_message( + heart_rate_service.CALLS([ + getCharacteristic('heart_rate_measurement')| + getCharacteristics()| + getCharacteristics('heart_rate_measurement')[UUID] + ]), + new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError')); + }); + }); +}, 'disconnect() called before FUNCTION_NAME. Reject with NetworkError.');
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/disconnect-called-during.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/disconnect-called-during.js new file mode 100644 index 0000000..9a805a5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/disconnect-called-during.js
@@ -0,0 +1,24 @@ +'use strict'; +promise_test(() => { + return setBluetoothFakeAdapter('HeartRateAdapter') + .then(() => requestDeviceWithKeyDown({ + filters: [{services: ['heart_rate']}]})) + .then(device => device.gatt.connect()) + .then(gatt => { + return gatt.getPrimaryService('heart_rate') + .then(heart_rate_service => { + let promise = assert_promise_rejects_with_message( + heart_rate_service.CALLS([ + getCharacteristic('heart_rate_measurement')| + getCharacteristics()| + getCharacteristics('heart_rate_measurement')[UUID] + ]), + new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError')); + gatt.disconnect(); + return promise; + }); + }); +}, 'disconnect() called during FUNCTION_NAME. Reject with NetworkError.');
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/invalid-characteristic-name.html b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/invalid-characteristic-name.js similarity index 67% copy from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/invalid-characteristic-name.html copy to third_party/WebKit/LayoutTests/bluetooth/script-tests/service/invalid-characteristic-name.js index fbead68..70866d3 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/invalid-characteristic-name.html +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/invalid-characteristic-name.js
@@ -1,8 +1,3 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> -<script> 'use strict'; promise_test(() => { return setBluetoothFakeAdapter('HeartRateAdapter') @@ -10,11 +5,15 @@ filters: [{services: ['heart_rate']}], optionalServices: ['generic_access']})) .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('generic_access')) + .then(gatt => gatt.getPrimaryService('generic_access')) .then(service => { return assert_promise_rejects_with_message( - service.getCharacteristic('wrong_name'), new DOMException( - 'Failed to execute \'getCharacteristic\' on ' + + service.CALLS([ + getCharacteristic('wrong_name')| + getCharacteristics('wrong_name') + ]), + new DOMException( + 'Failed to execute \'FUNCTION_NAME\' on ' + '\'BluetoothRemoteGATTService\': Invalid Characteristic name: ' + '\'wrong_name\'. ' + 'It must be a valid UUID alias (e.g. 0x1234), ' + @@ -27,4 +26,3 @@ 'Wrong Characteristic name passed.'); }); }, 'Wrong Characteristic name. Reject with TypeError.'); -</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/reconnect-during.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/reconnect-during.js new file mode 100644 index 0000000..5a773f99 --- /dev/null +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/reconnect-during.js
@@ -0,0 +1,25 @@ +'use strict'; +promise_test(() => { + return setBluetoothFakeAdapter('HeartRateAdapter') + .then(() => requestDeviceWithKeyDown({ + filters: [{services: ['heart_rate']}]})) + .then(device => device.gatt.connect()) + .then(gatt => { + return gatt.getPrimaryService('heart_rate') + .then(service => { + let promise = assert_promise_rejects_with_message( + service.CALLS([ + getCharacteristic('heart_rate_measurement')| + getCharacteristics()| + getCharacteristics('heart_rate_measurement')[UUID] + ]), + new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError')); + gatt.disconnect(); + return gatt.connect().then(() => promise); + }); + }); +}, 'disconnect() and connect() called during FUNCTION_NAME. Reject with ' + + 'NetworkError.');
diff --git a/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/service-is-removed.js b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/service-is-removed.js new file mode 100644 index 0000000..7a76d533 --- /dev/null +++ b/third_party/WebKit/LayoutTests/bluetooth/script-tests/service/service-is-removed.js
@@ -0,0 +1,21 @@ +'use strict'; +promise_test(() => { + return setBluetoothFakeAdapter('HeartRateAdapter') + .then(() => requestDeviceWithKeyDown({ + filters: [{services: ['heart_rate']}], + optionalServices: ['generic_access']})) + .then(device => device.gatt.connect()) + .then(gatt => gatt.getPrimaryService('generic_access')) + .then(service => { + return setBluetoothFakeAdapter('MissingServiceHeartRateAdapter') + .then(() => assert_promise_rejects_with_message( + service.CALLS([ + getCharacteristic('gap.device_name')| + getCharacteristics()| + getCharacteristics('gap.device_name')[UUID] + ]), + new DOMException('GATT Service no longer exists.', + 'InvalidStateError'), + 'Service got removed.')); + }); +}, 'Service is removed before FUNCTION_NAME call. Reject with InvalidStateError.');
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/connect/connection-succeeds.html b/third_party/WebKit/LayoutTests/bluetooth/server/connect/connection-succeeds.html index a5fb002..78067cb6 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/connect/connection-succeeds.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/connect/connection-succeeds.html
@@ -8,7 +8,7 @@ 'use strict'; promise_test(() => { return getDiscoveredHealthThermometerDevice() - .then(([device, fake_peripheral]) => { + .then(({device, fake_peripheral}) => { return fake_peripheral.setNextGATTConnectionResponse({code: HCI_SUCCESS}) .then(() => device.gatt.connect()) .then(gatt => assert_true(gatt.connected));
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/connect/garbage-collection-ran-during-success.html b/third_party/WebKit/LayoutTests/bluetooth/server/connect/garbage-collection-ran-during-success.html index 60156c1..7b735914 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/connect/garbage-collection-ran-during-success.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/connect/garbage-collection-ran-during-success.html
@@ -8,7 +8,7 @@ 'use strict'; promise_test(() => { return getDiscoveredHealthThermometerDevice() - .then(([device, fake_peripheral]) => { + .then(({device, fake_peripheral}) => { return fake_peripheral.setNextGATTConnectionResponse({code: HCI_SUCCESS}) .then(() => { // Don't return the promise and let |device| go out of scope
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/connect/get-same-gatt-server.html b/third_party/WebKit/LayoutTests/bluetooth/server/connect/get-same-gatt-server.html index d6d1a42..62f9d0b 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/connect/get-same-gatt-server.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/connect/get-same-gatt-server.html
@@ -8,7 +8,7 @@ 'use strict'; promise_test(() => { return getDiscoveredHealthThermometerDevice() - .then(([device, fake_peripheral]) => { + .then(({device, fake_peripheral}) => { return fake_peripheral .setNextGATTConnectionResponse({code: HCI_SUCCESS}) .then(() => device.gatt.connect())
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/device-same-object.html b/third_party/WebKit/LayoutTests/bluetooth/server/device-same-object.html index c6f391c..f1aa39cc 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/device-same-object.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/device-same-object.html
@@ -8,7 +8,7 @@ 'use strict'; promise_test(() => { return getDiscoveredHealthThermometerDevice() - .then(([device, fake_peripheral]) => { + .then(({device, fake_peripheral}) => { return fake_peripheral.setNextGATTConnectionResponse({code: HCI_SUCCESS}) .then(() => device.gatt.connect()); })
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-before.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-before.html index 36e2de71..86e704f 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-before.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-before.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { device.gatt.disconnect(); return assert_promise_rejects_with_message( device.gatt.getPrimaryService('health_thermometer'),
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-during-error.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-during-error.html index 4eb61ea1..b4fbe18 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-during-error.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-during-error.html
@@ -9,7 +9,7 @@ 'use strict'; promise_test(() => { return getEmptyHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { let promise = assert_promise_rejects_with_message( device.gatt.getPrimaryService('health_thermometer'), new DOMException('GATT Server is disconnected. ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-during-success.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-during-success.html index c2bd90f..9adb4ca6 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-during-success.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-called-during-success.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { let promise = assert_promise_rejects_with_message( device.gatt.getPrimaryService('health_thermometer'), new DOMException('GATT Server is disconnected. ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-invalidates-objects.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-invalidates-objects.html index 83741ef7..eb20948 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-invalidates-objects.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnect-invalidates-objects.html
@@ -11,7 +11,7 @@ let promise; return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => { + .then(({device}) => { return device.gatt.getPrimaryService('health_thermometer') // Convert to array if necessary. .then(s => {
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnected-device.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnected-device.html index a7061fa..938b159b 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnected-device.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-disconnected-device.html
@@ -12,7 +12,7 @@ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access'] }) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryService('health_thermometer'), new DOMException('GATT Server is disconnected. ' + 'Cannot retrieve services. ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-discovery-complete-no-permission-absent-service.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-discovery-complete-no-permission-absent-service.html index cb05a7a..1659be5 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-discovery-complete-no-permission-absent-service.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-discovery-complete-no-permission-absent-service.html
@@ -15,7 +15,7 @@ 'SecurityError'); return getHealthThermometerDeviceWithServicesDiscovered({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ assert_promise_rejects_with_message( device.gatt.getPrimaryService(glucose.alias), expected), assert_promise_rejects_with_message(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-discovery-complete-service-not-found.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-discovery-complete-service-not-found.html index f6978485..962c713 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-discovery-complete-service-not-found.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-discovery-complete-service-not-found.html
@@ -11,7 +11,7 @@ return getHealthThermometerDeviceWithServicesDiscovered({ filters: [{services: ['health_thermometer']}], optionalServices: ['glucose']}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryService('glucose'), new DOMException( 'No Services matching UUID ' + glucose.uuid + ' found in Device.',
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-error.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-error.html index a0c3a56..ae48249 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-error.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-error.html
@@ -10,7 +10,7 @@ promise_test(() => { let promise; return getEmptyHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { promise = assert_promise_rejects_with_message( device.gatt.getPrimaryService('health_thermometer'), new DOMException(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-success.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-success.html index a6429fb1..d275cea 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-success.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-success.html
@@ -11,7 +11,7 @@ let promise; return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => { + .then(({device}) => { promise = assert_promise_rejects_with_message( device.gatt.getPrimaryService('health_thermometer'), new DOMException(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-get-different-service-after-reconnection.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-get-different-service-after-reconnection.html index 92b3a1b8d..69411a5b 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-get-different-service-after-reconnection.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-get-different-service-after-reconnection.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { let services_first_connection; return device.gatt.getPrimaryService('health_thermometer') .then(services => services_first_connection = services)
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-get-same-object.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-get-same-object.html index 3fc19c6..3783693f2 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-get-same-object.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-get-same-object.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ device.gatt.getPrimaryService('health_thermometer'), device.gatt.getPrimaryService('health_thermometer')])) .then(([services_first_call, services_second_call]) => {
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-invalid-service-name.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-invalid-service-name.html index 591757d1..722be1a 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-invalid-service-name.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-invalid-service-name.html
@@ -9,7 +9,7 @@ 'use strict'; promise_test(() => { return getHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { return assert_promise_rejects_with_message( device.gatt.getPrimaryService('wrong_name'), new DOMException(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-absent-service.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-absent-service.html index 04fa5a1..88362fe 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-absent-service.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-absent-service.html
@@ -15,7 +15,7 @@ 'SecurityError'); return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ assert_promise_rejects_with_message( device.gatt.getPrimaryService(glucose.alias), expected), assert_promise_rejects_with_message(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-for-any-service.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-for-any-service.html index d02d25d..7301f20 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-for-any-service.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-for-any-service.html
@@ -9,7 +9,7 @@ 'use strict'; promise_test(() => { return getHealthThermometerDevice({acceptAllDevices: true}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryService('heart_rate'), new DOMException('Origin is not allowed to access any service. Tip: ' + 'Add the service UUID to \'optionalServices\' in ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-present-service.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-present-service.html index 2a92858..d5e841c 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-present-service.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-no-permission-present-service.html
@@ -15,7 +15,7 @@ 'SecurityError'); return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ assert_promise_rejects_with_message( device.gatt.getPrimaryService(generic_access.alias), expected), assert_promise_rejects_with_message(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-service-not-found.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-service-not-found.html index ed44846d..d7290ba 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-service-not-found.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/gen-service-not-found.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['glucose']}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryService('glucose'), new DOMException( 'No Services matching UUID ' + glucose.uuid + ' found in Device.',
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/service-found.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/service-found.html index 69338c2..a544178 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/service-found.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryService/service-found.html
@@ -10,7 +10,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { return Promise.all([ device.gatt.getPrimaryService(generic_access.alias), device.gatt.getPrimaryService(generic_access.name),
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.html index 5f72453..39d834d 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.html
@@ -10,7 +10,7 @@ return getHIDDevice({ filters: [{services: ['battery_service']}], optionalServices: ['human_interface_device']}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryServices('human_interface_device'), new DOMException('Origin is not allowed to access the service. ' + 'Tip: Add the service UUID to \'optionalServices\' ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/blocklisted-services.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/blocklisted-services.html index ca39ae68..f7d2592a 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/blocklisted-services.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/blocklisted-services.html
@@ -13,7 +13,7 @@ 'generic_access', 'human_interface_device' ]}) - .then(([device]) => device.gatt.getPrimaryServices()) + .then(({device}) => device.gatt.getPrimaryServices()) .then(services => { assert_equals(services.length, 2); let uuid_set = new Set(services.map(s => s.uuid));
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.html index fa7df561..f5354b89 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { device.gatt.disconnect(); return assert_promise_rejects_with_message( device.gatt.getPrimaryServices('health_thermometer'),
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-before.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-before.html index 2b6213db..2c19bda2 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-before.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-before.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { device.gatt.disconnect(); return assert_promise_rejects_with_message( device.gatt.getPrimaryServices(),
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error-with-uuid.html index a29f4a6f..01017a2 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error-with-uuid.html
@@ -9,7 +9,7 @@ 'use strict'; promise_test(() => { return getEmptyHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { let promise = assert_promise_rejects_with_message( device.gatt.getPrimaryServices('health_thermometer'), new DOMException('GATT Server is disconnected. ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error.html index aeecb4c..1e11f89 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error.html
@@ -9,7 +9,7 @@ 'use strict'; promise_test(() => { return getEmptyHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { let promise = assert_promise_rejects_with_message( device.gatt.getPrimaryServices(), new DOMException('GATT Server is disconnected. ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success-with-uuid.html index 5069b35..a6c7211 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success-with-uuid.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { let promise = assert_promise_rejects_with_message( device.gatt.getPrimaryServices('health_thermometer'), new DOMException('GATT Server is disconnected. ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success.html index 003aa676..523c668 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { let promise = assert_promise_rejects_with_message( device.gatt.getPrimaryServices(), new DOMException('GATT Server is disconnected. ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects-with-uuid.html index 8450d8e0..26b6589f 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects-with-uuid.html
@@ -11,7 +11,7 @@ let promise; return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => { + .then(({device}) => { return device.gatt.getPrimaryServices('health_thermometer') // Convert to array if necessary. .then(s => {
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects.html index 45a160a..62a1165 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects.html
@@ -11,7 +11,7 @@ let promise; return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => { + .then(({device}) => { return device.gatt.getPrimaryServices() // Convert to array if necessary. .then(s => {
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnected-device-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnected-device-with-uuid.html index 48474bb5..202df7ec 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnected-device-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnected-device-with-uuid.html
@@ -12,7 +12,7 @@ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access'] }) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryServices('health_thermometer'), new DOMException('GATT Server is disconnected. ' + 'Cannot retrieve services. ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnected-device.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnected-device.html index 9f7a190c..e327868 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnected-device.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-disconnected-device.html
@@ -12,7 +12,7 @@ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access'] }) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryServices(), new DOMException('GATT Server is disconnected. ' + 'Cannot retrieve services. ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-discovery-complete-no-permission-absent-service-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-discovery-complete-no-permission-absent-service-with-uuid.html index 85737f76..2d341428 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-discovery-complete-no-permission-absent-service-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-discovery-complete-no-permission-absent-service-with-uuid.html
@@ -15,7 +15,7 @@ 'SecurityError'); return getHealthThermometerDeviceWithServicesDiscovered({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ assert_promise_rejects_with_message( device.gatt.getPrimaryServices(glucose.alias), expected), assert_promise_rejects_with_message(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-discovery-complete-service-not-found-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-discovery-complete-service-not-found-with-uuid.html index 0682b61a..84e5bcef 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-discovery-complete-service-not-found-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-discovery-complete-service-not-found-with-uuid.html
@@ -11,7 +11,7 @@ return getHealthThermometerDeviceWithServicesDiscovered({ filters: [{services: ['health_thermometer']}], optionalServices: ['glucose']}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryServices('glucose'), new DOMException( 'No Services matching UUID ' + glucose.uuid + ' found in Device.',
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error-with-uuid.html index d78d076..ae626b2 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error-with-uuid.html
@@ -10,7 +10,7 @@ promise_test(() => { let promise; return getEmptyHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { promise = assert_promise_rejects_with_message( device.gatt.getPrimaryServices('health_thermometer'), new DOMException(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error.html index 1beb3147..4d50a5c 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error.html
@@ -10,7 +10,7 @@ promise_test(() => { let promise; return getEmptyHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { promise = assert_promise_rejects_with_message( device.gatt.getPrimaryServices(), new DOMException(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success-with-uuid.html index 23c33e0..58f9f534 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success-with-uuid.html
@@ -11,7 +11,7 @@ let promise; return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => { + .then(({device}) => { promise = assert_promise_rejects_with_message( device.gatt.getPrimaryServices('health_thermometer'), new DOMException(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success.html index eb9b69ee..05983aa 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success.html
@@ -11,7 +11,7 @@ let promise; return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => { + .then(({device}) => { promise = assert_promise_rejects_with_message( device.gatt.getPrimaryServices(), new DOMException(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection-with-uuid.html index cdd6a8f..6bb3339 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection-with-uuid.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { let services_first_connection; return device.gatt.getPrimaryServices('health_thermometer') .then(services => services_first_connection = services)
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection.html index 1c7d192..230c7485 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => { + .then(({device}) => { let services_first_connection; return device.gatt.getPrimaryServices() .then(services => services_first_connection = services)
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.html index 0b50d54d..5f56fe0 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ device.gatt.getPrimaryServices('health_thermometer'), device.gatt.getPrimaryServices('health_thermometer')])) .then(([services_first_call, services_second_call]) => {
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-same-object.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-same-object.html index 242ddf6c..1685f6f 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-same-object.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-get-same-object.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ device.gatt.getPrimaryServices(), device.gatt.getPrimaryServices()])) .then(([services_first_call, services_second_call]) => {
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-invalid-service-name.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-invalid-service-name.html index f8d010b..ce17288 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-invalid-service-name.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-invalid-service-name.html
@@ -9,7 +9,7 @@ 'use strict'; promise_test(() => { return getHealthThermometerDevice() - .then(([device]) => { + .then(({device}) => { return assert_promise_rejects_with_message( device.gatt.getPrimaryServices('wrong_name'), new DOMException(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-absent-service-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-absent-service-with-uuid.html index bbebc7a..ce19ff45 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-absent-service-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-absent-service-with-uuid.html
@@ -15,7 +15,7 @@ 'SecurityError'); return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ assert_promise_rejects_with_message( device.gatt.getPrimaryServices(glucose.alias), expected), assert_promise_rejects_with_message(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service-with-uuid.html index c80c983..e6e5be02 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service-with-uuid.html
@@ -9,7 +9,7 @@ 'use strict'; promise_test(() => { return getHealthThermometerDevice({acceptAllDevices: true}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryServices('heart_rate'), new DOMException('Origin is not allowed to access any service. Tip: ' + 'Add the service UUID to \'optionalServices\' in ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service.html index c771e477..45306589 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service.html
@@ -9,7 +9,7 @@ 'use strict'; promise_test(() => { return getHealthThermometerDevice({acceptAllDevices: true}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryServices(), new DOMException('Origin is not allowed to access any service. Tip: ' + 'Add the service UUID to \'optionalServices\' in ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-present-service-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-present-service-with-uuid.html index bd8fd430..622bdaf 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-present-service-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-no-permission-present-service-with-uuid.html
@@ -15,7 +15,7 @@ 'SecurityError'); return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ assert_promise_rejects_with_message( device.gatt.getPrimaryServices(generic_access.alias), expected), assert_promise_rejects_with_message(
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-service-not-found-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-service-not-found-with-uuid.html index cd9dce1..79c7d89 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-service-not-found-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/gen-service-not-found-with-uuid.html
@@ -11,7 +11,7 @@ return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['glucose']}) - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryServices('glucose'), new DOMException( 'No Services matching UUID ' + glucose.uuid + ' found in Device.',
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-found-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-found-with-uuid.html index 73409c8..63ac04e 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-found-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-found-with-uuid.html
@@ -7,9 +7,9 @@ <script> 'use strict'; promise_test(() => { - return getHealthThermometerDevice({ + return getTwoHealthThermometerServicesDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => Promise.all([ + .then(({device}) => Promise.all([ device.gatt.getPrimaryServices(health_thermometer.alias), device.gatt.getPrimaryServices(health_thermometer.name), device.gatt.getPrimaryServices(health_thermometer.uuid)]))
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-found.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-found.html index 79706f6..880108c 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-found.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-found.html
@@ -7,10 +7,10 @@ <script> 'use strict'; promise_test(function() { - return getHealthThermometerDevice({ + return getTwoHealthThermometerServicesDevice({ filters: [{services: ['health_thermometer']}], optionalServices: ['generic_access']}) - .then(([device]) => device.gatt.getPrimaryServices()) + .then(({device}) => device.gatt.getPrimaryServices()) .then(services => { // Expect three service instances. assert_equals(services.length, 3);
diff --git a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-not-found.html b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-not-found.html index 744fda8..f621118 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-not-found.html +++ b/third_party/WebKit/LayoutTests/bluetooth/server/getPrimaryServices/services-not-found.html
@@ -8,7 +8,7 @@ 'use strict'; promise_test(() => { return getEmptyHealthThermometerDevice() - .then(([device]) => assert_promise_rejects_with_message( + .then(({device}) => assert_promise_rejects_with_message( device.gatt.getPrimaryServices(), new DOMException('No Services found in device.', 'NotFoundError'))); }, 'Request for services in a device with no services. Reject with ' +
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/device-same-from-2-services.html b/third_party/WebKit/LayoutTests/bluetooth/service/device-same-from-2-services.html index be9e995..d1ef99d6 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/device-same-from-2-services.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/device-same-from-2-services.html
@@ -7,9 +7,9 @@ <script> 'use strict'; promise_test(() => { - return getHealthThermometerDevice({ + return getTwoHealthThermometerServicesDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => device.gatt.getPrimaryServices('health_thermometer')) + .then(({device}) => device.gatt.getPrimaryServices('health_thermometer')) .then(([service1, service2]) => { assert_equals(service1.device, service2.device); });
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/device-same-object.html b/third_party/WebKit/LayoutTests/bluetooth/service/device-same-object.html index 1029c3ef..d3f4808 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/device-same-object.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/device-same-object.html
@@ -9,7 +9,7 @@ promise_test(() => { return getHealthThermometerDevice({ filters: [{services: ['health_thermometer']}]}) - .then(([device]) => device.gatt.getPrimaryService('health_thermometer')) + .then(({device}) => device.gatt.getPrimaryService('health_thermometer')) .then(service => { assert_equals(service.device, service.device); });
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/blocklisted-characteristic.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/blocklisted-characteristic.html deleted file mode 100644 index 29588f3..0000000 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/blocklisted-characteristic.html +++ /dev/null
@@ -1,22 +0,0 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> -<script> -'use strict'; -promise_test(() => { - return setBluetoothFakeAdapter('BlocklistTestAdapter') - .then(() => requestDeviceWithKeyDown({ - filters: [{services: ['device_information']}]})) - .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('device_information')) - .then(service => { - return assert_promise_rejects_with_message( - service.getCharacteristic('serial_number_string'), - new DOMException('getCharacteristic(s) called with blocklisted UUID. ' + - 'https://goo.gl/4NeimX', - 'SecurityError'), - 'Serial Number String characteristic is blocklisted.'); - }); -}, 'Serial Number String characteristic is blocklisted.'); -</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/characteristic-not-found.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/characteristic-not-found.html deleted file mode 100644 index dcbf0ab2..0000000 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/characteristic-not-found.html +++ /dev/null
@@ -1,21 +0,0 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> -<script> -'use strict'; -promise_test(() => { - return setBluetoothFakeAdapter('HeartRateAdapter') - .then(() => requestDeviceWithKeyDown({ - filters: [{services: ['heart_rate']}], - optionalServices: ['generic_access']})) - .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('generic_access')) - .then(service => assert_promise_rejects_with_message( - service.getCharacteristic('battery_level'), - new DOMException( - 'No Characteristics matching UUID ' + battery_level.uuid + ' found in Service with UUID ' + - generic_access.uuid + '.', - 'NotFoundError'))); -}, 'Request for absent characteristic. Reject with NotFoundError.'); -</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/blocklisted-characteristics-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.html similarity index 72% copy from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/blocklisted-characteristics-with-uuid.html copy to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.html index 799d8d8..8298f96 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/blocklisted-characteristics-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,10 +12,10 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['device_information']}]})) .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('device_information')) + .then(gatt => gatt.getPrimaryService('device_information')) .then(service => { return assert_promise_rejects_with_message( - service.getCharacteristics('serial_number_string'), + service.getCharacteristic('serial_number_string'), new DOMException('getCharacteristic(s) called with blocklisted UUID. ' + 'https://goo.gl/4NeimX', 'SecurityError'), @@ -20,4 +23,5 @@ }); }, 'Serial Number String characteristic is blocklisted. Should reject with ' + 'SecurityError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-characteristic-not-found.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-characteristic-not-found.html new file mode 100644 index 0000000..2fc5c3e --- /dev/null +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-characteristic-not-found.html
@@ -0,0 +1,24 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="../../../resources/testharness.js"></script> +<script src="../../../resources/testharnessreport.js"></script> +<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> +<script> +'use strict'; +promise_test(() => { + return setBluetoothFakeAdapter('HeartRateAdapter') + .then(() => requestDeviceWithKeyDown({ + filters: [{services: ['heart_rate']}]})) + .then(device => device.gatt.connect()) + .then(gatt => gatt.getPrimaryService('heart_rate')) + .then(service => assert_promise_rejects_with_message( + service.getCharacteristic('battery_level'), + new DOMException( + 'No Characteristics matching UUID ' + battery_level.uuid + ' found ' + + 'in Service with UUID ' + heart_rate.uuid + '.', + 'NotFoundError'))); +}, 'Request for absent characteristics with UUID. Reject with NotFoundError.'); + +</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-disconnects-before.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-device-disconnects-before.html similarity index 70% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-disconnects-before.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-device-disconnects-before.html index 61f8e12..552d963c 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-disconnects-before.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-device-disconnects-before.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -11,11 +14,11 @@ optionalServices: [request_disconnection_service_uuid] })) .then(device => device.gatt.connect()) - .then(gattServer => { + .then(gatt => { let heart_rate_service; - return gattServer.getPrimaryService('heart_rate') + return gatt.getPrimaryService('heart_rate') .then(hrs => heart_rate_service = hrs) - .then(() => get_request_disconnection(gattServer)) + .then(() => get_request_disconnection(gatt)) .then(requestDisconnection => requestDisconnection()) .then(() => assert_promise_rejects_with_message( heart_rate_service.getCharacteristic('heart_rate_measurement'), @@ -24,5 +27,6 @@ '(Re)connect first with `device.gatt.connect`.', 'NetworkError'))); }); -}, 'Device disconnects before getCharacteristic. Reject with NetworkError'); +}, 'Device disconnects before getCharacteristic call. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-disconnects-during.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-device-disconnects-during.html similarity index 71% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-disconnects-during.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-device-disconnects-during.html index c31f0ab..93d746e 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-disconnects-during.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-device-disconnects-during.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -11,11 +14,11 @@ optionalServices: [request_disconnection_service_uuid] })) .then(device => device.gatt.connect()) - .then(gattServer => { + .then(gatt => { let heart_rate_service; - return gattServer.getPrimaryService('heart_rate') + return gatt.getPrimaryService('heart_rate') .then(hrs => heart_rate_service = hrs) - .then(() => get_request_disconnection(gattServer)) + .then(() => get_request_disconnection(gatt)) .then(requestDisconnection => { requestDisconnection(); return assert_promise_rejects_with_message( @@ -26,5 +29,6 @@ 'NetworkError')); }); }); -}, 'Device disconnects during getCharacteristic. Reject with NetworkError.'); +}, 'Device disconnects during getCharacteristic call. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-goes-out-of-range.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-device-goes-out-of-range.html similarity index 66% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-goes-out-of-range.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-device-goes-out-of-range.html index f0650a07f..0f4e55ab 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-goes-out-of-range.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-device-goes-out-of-range.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -10,14 +13,16 @@ filters: [{services: ['heart_rate']}], optionalServices: ['generic_access']})) .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('generic_access')) + .then(gatt => gatt.getPrimaryService('generic_access')) .then(service => { return setBluetoothFakeAdapter('EmptyAdapter') .then(() => assert_promise_rejects_with_message( service.getCharacteristic('gap.device_name'), new DOMException('Bluetooth Device is no longer in range.', 'NetworkError'), - 'Device went out of range.')); + 'Device went out of range.')); }); -}, 'Device goes out of range. Reject with NetworkError.'); +}, 'getCharacteristic called after device goes out of range. Reject with ' + + 'NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/disconnect-called-before.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-disconnect-called-before.html similarity index 75% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/disconnect-called-before.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-disconnect-called-before.html index 79fd8eb..8d0b806 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/disconnect-called-before.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-disconnect-called-before.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,10 +12,10 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['heart_rate']}]})) .then(device => device.gatt.connect()) - .then(gattServer => { - return gattServer.getPrimaryService('heart_rate') + .then(gatt => { + return gatt.getPrimaryService('heart_rate') .then(heart_rate_service => { - gattServer.disconnect(); + gatt.disconnect(); return assert_promise_rejects_with_message( heart_rate_service.getCharacteristic('heart_rate_measurement'), new DOMException( @@ -22,4 +25,5 @@ }); }); }, 'disconnect() called before getCharacteristic. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/disconnect-called-during.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-disconnect-called-during.html similarity index 75% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/disconnect-called-during.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-disconnect-called-during.html index 0399d0ef..7cab30f 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/disconnect-called-during.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-disconnect-called-during.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,8 +12,8 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['heart_rate']}]})) .then(device => device.gatt.connect()) - .then(gattServer => { - return gattServer.getPrimaryService('heart_rate') + .then(gatt => { + return gatt.getPrimaryService('heart_rate') .then(heart_rate_service => { let promise = assert_promise_rejects_with_message( heart_rate_service.getCharacteristic('heart_rate_measurement'), @@ -18,9 +21,10 @@ 'GATT Server is disconnected. Cannot retrieve characteristics. ' + '(Re)connect first with `device.gatt.connect`.', 'NetworkError')); - gattServer.disconnect(); + gatt.disconnect(); return promise; }); }); }, 'disconnect() called during getCharacteristic. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/invalid-characteristic-name.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.html similarity index 77% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/invalid-characteristic-name.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.html index fbead68..bedf50d 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/invalid-characteristic-name.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -10,10 +13,11 @@ filters: [{services: ['heart_rate']}], optionalServices: ['generic_access']})) .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('generic_access')) + .then(gatt => gatt.getPrimaryService('generic_access')) .then(service => { return assert_promise_rejects_with_message( - service.getCharacteristic('wrong_name'), new DOMException( + service.getCharacteristic('wrong_name'), + new DOMException( 'Failed to execute \'getCharacteristic\' on ' + '\'BluetoothRemoteGATTService\': Invalid Characteristic name: ' + '\'wrong_name\'. ' + @@ -27,4 +31,5 @@ 'Wrong Characteristic name passed.'); }); }, 'Wrong Characteristic name. Reject with TypeError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/reconnect-during.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-reconnect-during.html similarity index 72% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/reconnect-during.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-reconnect-during.html index 5a357a22..e4c22b8 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/reconnect-during.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-reconnect-during.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,8 +12,8 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['heart_rate']}]})) .then(device => device.gatt.connect()) - .then(gattServer => { - return gattServer.getPrimaryService('heart_rate') + .then(gatt => { + return gatt.getPrimaryService('heart_rate') .then(service => { let promise = assert_promise_rejects_with_message( service.getCharacteristic('heart_rate_measurement'), @@ -18,10 +21,11 @@ 'GATT Server is disconnected. Cannot retrieve characteristics. ' + '(Re)connect first with `device.gatt.connect`.', 'NetworkError')); - gattServer.disconnect(); - return gattServer.connect().then(() => promise); + gatt.disconnect(); + return gatt.connect().then(() => promise); }); }); }, 'disconnect() and connect() called during getCharacteristic. Reject with ' + 'NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/service-is-removed.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-service-is-removed.html similarity index 70% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/service-is-removed.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-service-is-removed.html index 64cad1e..054cc6b 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/service-is-removed.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/gen-service-is-removed.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -10,7 +13,7 @@ filters: [{services: ['heart_rate']}], optionalServices: ['generic_access']})) .then(device => device.gatt.connect()) - .then(gattService => gattService.getPrimaryService('generic_access')) + .then(gatt => gatt.getPrimaryService('generic_access')) .then(service => { return setBluetoothFakeAdapter('MissingServiceHeartRateAdapter') .then(() => assert_promise_rejects_with_message( @@ -19,5 +22,6 @@ 'InvalidStateError'), 'Service got removed.')); }); -}, 'Service is removed. Reject with InvalidStateError.'); +}, 'Service is removed before getCharacteristic call. Reject with InvalidStateError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/characteristics-not-found-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/characteristics-not-found-with-uuid.html deleted file mode 100644 index c6f49d7e..0000000 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/characteristics-not-found-with-uuid.html +++ /dev/null
@@ -1,20 +0,0 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> -<script> -'use strict'; -promise_test(() => { - let expected = new DOMException( - 'No Characteristics matching UUID ' + battery_level.uuid + ' found in Service with UUID ' + - heart_rate.uuid + '.', - 'NotFoundError'); - return setBluetoothFakeAdapter('HeartRateAdapter') - .then(() => requestDeviceWithKeyDown({ - filters: [{services: ['heart_rate']}]})) - .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('heart_rate')) - .then(service => assert_promise_rejects_with_message( - service.getCharacteristics('battery_level'), expected)); -}, 'Request for absent characteristics with UUID. Reject with NotFoundError.'); -</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-before-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-before-with-uuid.html deleted file mode 100644 index bb8925bb..0000000 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-before-with-uuid.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> -<script> -'use strict'; -promise_test(() => { - return setBluetoothFakeAdapter('DisconnectingHeartRateAdapter') - .then(() => requestDeviceWithKeyDown({ - filters: [{services: ['heart_rate']}], - optionalServices: [request_disconnection_service_uuid] - })) - .then(device => device.gatt.connect()) - .then(gattServer => { - let heart_rate_service; - return gattServer.getPrimaryService('heart_rate') - .then(hrs => heart_rate_service = hrs) - .then(() => get_request_disconnection(gattServer)) - .then(requestDisconnection => requestDisconnection()) - .then(() => assert_promise_rejects_with_message( - heart_rate_service.getCharacteristics('heart_rate_measurement'), - new DOMException( - 'GATT Server is disconnected. Cannot retrieve characteristics. ' + - '(Re)connect first with `device.gatt.connect`.', - 'NetworkError'))); - }); -}, 'Device disconnects before getCharacteristics. Reject with NetworkError'); -</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-goes-out-of-range-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-goes-out-of-range-with-uuid.html deleted file mode 100644 index 524a3b4..0000000 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-goes-out-of-range-with-uuid.html +++ /dev/null
@@ -1,22 +0,0 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> -<script> -'use strict'; -promise_test(() => { - return setBluetoothFakeAdapter('HeartRateAdapter') - .then(() => requestDeviceWithKeyDown({ - filters: [{services: ['heart_rate']}]})) - .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('heart_rate')) - .then(service => { - return setBluetoothFakeAdapter('EmptyAdapter') - .then(() => assert_promise_rejects_with_message( - service.getCharacteristics('heart_rate_measurement'), - new DOMException('Bluetooth Device is no longer in range.', - 'NetworkError'), - 'Device went out of range.')); - }); -}, 'Device goes out of range with UUID. Reject with NetworkError.'); -</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-goes-out-of-range.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-goes-out-of-range.html deleted file mode 100644 index 810743d1..0000000 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-goes-out-of-range.html +++ /dev/null
@@ -1,22 +0,0 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> -<script> -'use strict'; -promise_test(() => { - return setBluetoothFakeAdapter('HeartRateAdapter') - .then(() => requestDeviceWithKeyDown({ - filters: [{services: ['heart_rate']}]})) - .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('heart_rate')) - .then(service => { - return setBluetoothFakeAdapter('EmptyAdapter') - .then(() => assert_promise_rejects_with_message( - service.getCharacteristics(), - new DOMException('Bluetooth Device is no longer in range.', - 'NetworkError'), - 'Device went out of range.')); - }); -}, 'Device goes out of range. Reject with NetworkError.'); -</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/blocklisted-characteristics-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.html similarity index 77% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/blocklisted-characteristics-with-uuid.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.html index 799d8d8..dec3ef40 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/blocklisted-characteristics-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,7 +12,7 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['device_information']}]})) .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('device_information')) + .then(gatt => gatt.getPrimaryService('device_information')) .then(service => { return assert_promise_rejects_with_message( service.getCharacteristics('serial_number_string'), @@ -20,4 +23,5 @@ }); }, 'Serial Number String characteristic is blocklisted. Should reject with ' + 'SecurityError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.html new file mode 100644 index 0000000..5519358 --- /dev/null +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.html
@@ -0,0 +1,24 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="../../../resources/testharness.js"></script> +<script src="../../../resources/testharnessreport.js"></script> +<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> +<script> +'use strict'; +promise_test(() => { + return setBluetoothFakeAdapter('HeartRateAdapter') + .then(() => requestDeviceWithKeyDown({ + filters: [{services: ['heart_rate']}]})) + .then(device => device.gatt.connect()) + .then(gatt => gatt.getPrimaryService('heart_rate')) + .then(service => assert_promise_rejects_with_message( + service.getCharacteristics('battery_level'), + new DOMException( + 'No Characteristics matching UUID ' + battery_level.uuid + ' found ' + + 'in Service with UUID ' + heart_rate.uuid + '.', + 'NotFoundError'))); +}, 'Request for absent characteristics with UUID. Reject with NotFoundError.'); + +</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-before.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-before-with-uuid.html similarity index 65% copy from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-before.html copy to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-before-with-uuid.html index e5725ee8..7ac9238 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-before.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-before-with-uuid.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -11,18 +14,19 @@ optionalServices: [request_disconnection_service_uuid] })) .then(device => device.gatt.connect()) - .then(gattServer => { + .then(gatt => { let heart_rate_service; - return gattServer.getPrimaryService('heart_rate') + return gatt.getPrimaryService('heart_rate') .then(hrs => heart_rate_service = hrs) - .then(() => get_request_disconnection(gattServer)) + .then(() => get_request_disconnection(gatt)) .then(requestDisconnection => requestDisconnection()) .then(() => assert_promise_rejects_with_message( - heart_rate_service.getCharacteristics(), + heart_rate_service.getCharacteristics('heart_rate_measurement'), new DOMException( 'GATT Server is disconnected. Cannot retrieve characteristics. ' + '(Re)connect first with `device.gatt.connect`.', 'NetworkError'))); }); -}, 'Device disconnects before getCharacteristics. Reject with NetworkError'); +}, 'Device disconnects before getCharacteristics call. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-before.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-before.html similarity index 70% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-before.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-before.html index e5725ee8..bd5ef78 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-before.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-before.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -11,11 +14,11 @@ optionalServices: [request_disconnection_service_uuid] })) .then(device => device.gatt.connect()) - .then(gattServer => { + .then(gatt => { let heart_rate_service; - return gattServer.getPrimaryService('heart_rate') + return gatt.getPrimaryService('heart_rate') .then(hrs => heart_rate_service = hrs) - .then(() => get_request_disconnection(gattServer)) + .then(() => get_request_disconnection(gatt)) .then(requestDisconnection => requestDisconnection()) .then(() => assert_promise_rejects_with_message( heart_rate_service.getCharacteristics(), @@ -24,5 +27,6 @@ '(Re)connect first with `device.gatt.connect`.', 'NetworkError'))); }); -}, 'Device disconnects before getCharacteristics. Reject with NetworkError'); +}, 'Device disconnects before getCharacteristics call. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-during-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-during-with-uuid.html similarity index 71% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-during-with-uuid.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-during-with-uuid.html index f54cc3e..fb26653 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-during-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-during-with-uuid.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -11,11 +14,11 @@ optionalServices: [request_disconnection_service_uuid] })) .then(device => device.gatt.connect()) - .then(gattServer => { + .then(gatt => { let heart_rate_service; - return gattServer.getPrimaryService('heart_rate') + return gatt.getPrimaryService('heart_rate') .then(hrs => heart_rate_service = hrs) - .then(() => get_request_disconnection(gattServer)) + .then(() => get_request_disconnection(gatt)) .then(requestDisconnection => { requestDisconnection(); return assert_promise_rejects_with_message( @@ -26,5 +29,6 @@ 'NetworkError')); }); }); -}, 'Device disconnects during getCharacteristics. Reject with NetworkError.'); +}, 'Device disconnects during getCharacteristics call. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-during.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-during.html similarity index 71% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-during.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-during.html index 40b74d9bb..d8d2125 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/device-disconnects-during.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-disconnects-during.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -11,11 +14,11 @@ optionalServices: [request_disconnection_service_uuid] })) .then(device => device.gatt.connect()) - .then(gattServer => { + .then(gatt => { let heart_rate_service; - return gattServer.getPrimaryService('heart_rate') + return gatt.getPrimaryService('heart_rate') .then(hrs => heart_rate_service = hrs) - .then(() => get_request_disconnection(gattServer)) + .then(() => get_request_disconnection(gatt)) .then(requestDisconnection => { requestDisconnection(); return assert_promise_rejects_with_message( @@ -26,5 +29,6 @@ 'NetworkError')); }); }); -}, 'Device disconnects during getCharacteristics. Reject with NetworkError.'); +}, 'Device disconnects during getCharacteristics call. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-goes-out-of-range.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-goes-out-of-range-with-uuid.html similarity index 61% copy from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-goes-out-of-range.html copy to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-goes-out-of-range-with-uuid.html index f0650a07f..f68a44d18 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-goes-out-of-range.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-goes-out-of-range-with-uuid.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -10,14 +13,16 @@ filters: [{services: ['heart_rate']}], optionalServices: ['generic_access']})) .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('generic_access')) + .then(gatt => gatt.getPrimaryService('generic_access')) .then(service => { return setBluetoothFakeAdapter('EmptyAdapter') .then(() => assert_promise_rejects_with_message( - service.getCharacteristic('gap.device_name'), + service.getCharacteristics('gap.device_name'), new DOMException('Bluetooth Device is no longer in range.', 'NetworkError'), - 'Device went out of range.')); + 'Device went out of range.')); }); -}, 'Device goes out of range. Reject with NetworkError.'); +}, 'getCharacteristics called after device goes out of range. Reject with ' + + 'NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-goes-out-of-range.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-goes-out-of-range.html similarity index 62% copy from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-goes-out-of-range.html copy to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-goes-out-of-range.html index f0650a07f..3d46c24 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/device-goes-out-of-range.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-device-goes-out-of-range.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -10,14 +13,16 @@ filters: [{services: ['heart_rate']}], optionalServices: ['generic_access']})) .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('generic_access')) + .then(gatt => gatt.getPrimaryService('generic_access')) .then(service => { return setBluetoothFakeAdapter('EmptyAdapter') .then(() => assert_promise_rejects_with_message( - service.getCharacteristic('gap.device_name'), + service.getCharacteristics(), new DOMException('Bluetooth Device is no longer in range.', 'NetworkError'), - 'Device went out of range.')); + 'Device went out of range.')); }); -}, 'Device goes out of range. Reject with NetworkError.'); +}, 'getCharacteristics called after device goes out of range. Reject with ' + + 'NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-before-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-before-with-uuid.html similarity index 75% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-before-with-uuid.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-before-with-uuid.html index cffa248..f989ea1 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-before-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-before-with-uuid.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,10 +12,10 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['heart_rate']}]})) .then(device => device.gatt.connect()) - .then(gattServer => { - return gattServer.getPrimaryService('heart_rate') + .then(gatt => { + return gatt.getPrimaryService('heart_rate') .then(heart_rate_service => { - gattServer.disconnect(); + gatt.disconnect(); return assert_promise_rejects_with_message( heart_rate_service.getCharacteristics('heart_rate_measurement'), new DOMException( @@ -22,4 +25,5 @@ }); }); }, 'disconnect() called before getCharacteristics. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-before.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-before.html similarity index 74% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-before.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-before.html index f635fc3..00a84496 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-before.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-before.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,10 +12,10 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['heart_rate']}]})) .then(device => device.gatt.connect()) - .then(gattServer => { - return gattServer.getPrimaryService('heart_rate') + .then(gatt => { + return gatt.getPrimaryService('heart_rate') .then(heart_rate_service => { - gattServer.disconnect(); + gatt.disconnect(); return assert_promise_rejects_with_message( heart_rate_service.getCharacteristics(), new DOMException( @@ -22,4 +25,5 @@ }); }); }, 'disconnect() called before getCharacteristics. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-during-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-during-with-uuid.html similarity index 75% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-during-with-uuid.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-during-with-uuid.html index 8e8da3a..1f2057c8 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-during-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-during-with-uuid.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,8 +12,8 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['heart_rate']}]})) .then(device => device.gatt.connect()) - .then(gattServer => { - return gattServer.getPrimaryService('heart_rate') + .then(gatt => { + return gatt.getPrimaryService('heart_rate') .then(heart_rate_service => { let promise = assert_promise_rejects_with_message( heart_rate_service.getCharacteristics('heart_rate_measurement'), @@ -18,9 +21,10 @@ 'GATT Server is disconnected. Cannot retrieve characteristics. ' + '(Re)connect first with `device.gatt.connect`.', 'NetworkError')); - gattServer.disconnect(); + gatt.disconnect(); return promise; }); }); }, 'disconnect() called during getCharacteristics. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-during.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-during.html similarity index 75% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-during.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-during.html index 4cda3b1..f54b2c1 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/disconnect-called-during.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-disconnect-called-during.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,8 +12,8 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['heart_rate']}]})) .then(device => device.gatt.connect()) - .then(gattServer => { - return gattServer.getPrimaryService('heart_rate') + .then(gatt => { + return gatt.getPrimaryService('heart_rate') .then(heart_rate_service => { let promise = assert_promise_rejects_with_message( heart_rate_service.getCharacteristics(), @@ -18,9 +21,10 @@ 'GATT Server is disconnected. Cannot retrieve characteristics. ' + '(Re)connect first with `device.gatt.connect`.', 'NetworkError')); - gattServer.disconnect(); + gatt.disconnect(); return promise; }); }); }, 'disconnect() called during getCharacteristics. Reject with NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/invalid-characteristic-name.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.html similarity index 74% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/invalid-characteristic-name.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.html index b207c20..3b1c15a1 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/invalid-characteristic-name.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -10,10 +13,11 @@ filters: [{services: ['heart_rate']}], optionalServices: ['generic_access']})) .then(device => device.gatt.connect()) - .then(gattServer => gattServer.getPrimaryService('generic_access')) + .then(gatt => gatt.getPrimaryService('generic_access')) .then(service => { return assert_promise_rejects_with_message( - service.getCharacteristics('wrong_name'), new DOMException( + service.getCharacteristics('wrong_name'), + new DOMException( 'Failed to execute \'getCharacteristics\' on ' + '\'BluetoothRemoteGATTService\': Invalid Characteristic name: ' + '\'wrong_name\'. ' + @@ -26,5 +30,6 @@ 'TypeError'), 'Wrong Characteristic name passed.'); }); -}, 'Invalid Characteristic name. Reject with TypeError.'); +}, 'Wrong Characteristic name. Reject with TypeError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/reconnect-during-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.html similarity index 72% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/reconnect-during-with-uuid.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.html index 07086af..1a684ac 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/reconnect-during-with-uuid.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,8 +12,8 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['heart_rate']}]})) .then(device => device.gatt.connect()) - .then(gattServer => { - return gattServer.getPrimaryService('heart_rate') + .then(gatt => { + return gatt.getPrimaryService('heart_rate') .then(service => { let promise = assert_promise_rejects_with_message( service.getCharacteristics('heart_rate_measurement'), @@ -18,10 +21,11 @@ 'GATT Server is disconnected. Cannot retrieve characteristics. ' + '(Re)connect first with `device.gatt.connect`.', 'NetworkError')); - gattServer.disconnect(); - return gattServer.connect().then(() => promise); + gatt.disconnect(); + return gatt.connect().then(() => promise); }); }); }, 'disconnect() and connect() called during getCharacteristics. Reject with ' + 'NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/reconnect-during.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-reconnect-during.html similarity index 71% rename from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/reconnect-during.html rename to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-reconnect-during.html index 1afecaa..0018212 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/reconnect-during.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-reconnect-during.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -9,8 +12,8 @@ .then(() => requestDeviceWithKeyDown({ filters: [{services: ['heart_rate']}]})) .then(device => device.gatt.connect()) - .then(gattServer => { - return gattServer.getPrimaryService('heart_rate') + .then(gatt => { + return gatt.getPrimaryService('heart_rate') .then(service => { let promise = assert_promise_rejects_with_message( service.getCharacteristics(), @@ -18,10 +21,11 @@ 'GATT Server is disconnected. Cannot retrieve characteristics. ' + '(Re)connect first with `device.gatt.connect`.', 'NetworkError')); - gattServer.disconnect(); - return gattServer.connect().then(() => promise); + gatt.disconnect(); + return gatt.connect().then(() => promise); }); }); }, 'disconnect() and connect() called during getCharacteristics. Reject with ' + 'NetworkError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/service-is-removed.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-service-is-removed-with-uuid.html similarity index 65% copy from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/service-is-removed.html copy to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-service-is-removed-with-uuid.html index 64cad1e..02164968 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/service-is-removed.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-service-is-removed-with-uuid.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -10,14 +13,15 @@ filters: [{services: ['heart_rate']}], optionalServices: ['generic_access']})) .then(device => device.gatt.connect()) - .then(gattService => gattService.getPrimaryService('generic_access')) + .then(gatt => gatt.getPrimaryService('generic_access')) .then(service => { return setBluetoothFakeAdapter('MissingServiceHeartRateAdapter') .then(() => assert_promise_rejects_with_message( - service.getCharacteristic('gap.device_name'), + service.getCharacteristics('gap.device_name'), new DOMException('GATT Service no longer exists.', 'InvalidStateError'), 'Service got removed.')); }); -}, 'Service is removed. Reject with InvalidStateError.'); +}, 'Service is removed before getCharacteristics call. Reject with InvalidStateError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/service-is-removed.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-service-is-removed.html similarity index 66% copy from third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/service-is-removed.html copy to third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-service-is-removed.html index 64cad1e..e2f4567b 100644 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristic/service-is-removed.html +++ b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/gen-service-is-removed.html
@@ -1,7 +1,10 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> <!DOCTYPE html> <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> <script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> +<script src="../../../resources/bluetooth/web-bluetooth-test.js"></script> +<script src="../../../resources/mojo-helpers.js"></script> <script> 'use strict'; promise_test(() => { @@ -10,14 +13,15 @@ filters: [{services: ['heart_rate']}], optionalServices: ['generic_access']})) .then(device => device.gatt.connect()) - .then(gattService => gattService.getPrimaryService('generic_access')) + .then(gatt => gatt.getPrimaryService('generic_access')) .then(service => { return setBluetoothFakeAdapter('MissingServiceHeartRateAdapter') .then(() => assert_promise_rejects_with_message( - service.getCharacteristic('gap.device_name'), + service.getCharacteristics(), new DOMException('GATT Service no longer exists.', 'InvalidStateError'), 'Service got removed.')); }); -}, 'Service is removed. Reject with InvalidStateError.'); +}, 'Service is removed before getCharacteristics call. Reject with InvalidStateError.'); + </script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/service-is-removed-with-uuid.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/service-is-removed-with-uuid.html deleted file mode 100644 index 6d468a7c..0000000 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/service-is-removed-with-uuid.html +++ /dev/null
@@ -1,22 +0,0 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> -<script> -'use strict'; -promise_test(() => { - return setBluetoothFakeAdapter('HeartRateAdapter') - .then(() => requestDeviceWithKeyDown({ - filters: [{services: ['heart_rate']}]})) - .then(device => device.gatt.connect()) - .then(gattService => gattService.getPrimaryService('heart_rate')) - .then(service => { - return setBluetoothFakeAdapter('MissingServiceHeartRateAdapter') - .then(() => assert_promise_rejects_with_message( - service.getCharacteristics('heart_rate_measurement'), - new DOMException('GATT Service no longer exists.', - 'InvalidStateError'), - 'Service got removed.')); - }); -}, 'Service is removed. Reject with InvalidStateError.'); -</script>
diff --git a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/service-is-removed.html b/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/service-is-removed.html deleted file mode 100644 index 314f2ca..0000000 --- a/third_party/WebKit/LayoutTests/bluetooth/service/getCharacteristics/service-is-removed.html +++ /dev/null
@@ -1,22 +0,0 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script> -<script> -'use strict'; -promise_test(() => { - return setBluetoothFakeAdapter('HeartRateAdapter') - .then(() => requestDeviceWithKeyDown({ - filters: [{services: ['heart_rate']}]})) - .then(device => device.gatt.connect()) - .then(gattService => gattService.getPrimaryService('heart_rate')) - .then(service => { - return setBluetoothFakeAdapter('MissingServiceHeartRateAdapter') - .then(() => assert_promise_rejects_with_message( - service.getCharacteristics(), - new DOMException('GATT Service no longer exists.', - 'InvalidStateError'), - 'Service got removed.')); - }); -}, 'Service is removed. Reject with InvalidStateError.'); -</script>
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic.html index e4fbfce9..56a3742d 100644 --- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic.html +++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic.html
@@ -25,7 +25,7 @@ testDiv.addEventListener('wheel', wheelHandler); if (window.eventSender) { eventSender.mouseMoveTo(testDiv.offsetLeft + 5, testDiv.offsetTop + 5); - eventSender.mouseScrollBy(-1, -2, false, false, 0, true, 'phaseBegan'); + eventSender.mouseScrollBy(-1, -2); var positive = "deltaX > 0 && deltaY > 0"; var correct = "deltaX == testDiv.scrollLeft && deltaY == testDiv.scrollTop"; shouldBecomeEqual(positive + " && " + correct , "true", finishJSTest);
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-ctrl.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-ctrl.html index 581c776b..94f1428 100644 --- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-ctrl.html +++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-ctrl.html
@@ -23,7 +23,7 @@ debug('With ctrl modifier set and canScroll set to be false'); wheelEventCount = 0; eventSender.mouseMoveTo(testDiv.offsetLeft + 5, testDiv.offsetTop + 5); - eventSender.mouseScrollBy(0, scrollAmount, false, true, "ctrlKey", false , "phaseBegan"); + eventSender.mouseScrollBy(0, scrollAmount, false, true, "ctrlKey", false); shouldBe("wheelEventCount", "1"); shouldEvaluateTo("deltaY", expectedDeltaY); shouldBeTrue("ctrlKey"); @@ -32,7 +32,7 @@ debug('Without ctrl and canScroll set to be default true'); wheelEventCount = 0; eventSender.mouseMoveTo(testDiv.offsetLeft + 5, testDiv.offsetTop + 5); - eventSender.mouseScrollBy(0, scrollAmount, false, true, 0, true, "phaseChanged"); + eventSender.mouseScrollBy(0, scrollAmount, false, true); shouldBe("wheelEventCount", "1"); shouldEvaluateTo("deltaY", expectedDeltaY); shouldBeFalse("ctrlKey"); @@ -45,7 +45,7 @@ debug('With ctrl modifier set and canScroll set to be false'); wheelEventCount = 0; eventSender.mouseMoveTo(testDiv.offsetLeft + 5, testDiv.offsetTop + 5); - eventSender.mouseScrollBy(0, scrollAmount, false, true, "ctrlKey", false, "phaseChanged"); + eventSender.mouseScrollBy(0, scrollAmount, false, true, "ctrlKey", false); shouldBe("wheelEventCount", "1"); shouldEvaluateTo("deltaY", expectedDeltaY); shouldBeTrue("ctrlKey"); @@ -54,7 +54,7 @@ debug('With ctrl modifier set and canScroll set to be true'); wheelEventCount = 0; eventSender.mouseMoveTo(testDiv.offsetLeft + 5, testDiv.offsetTop + 5); - eventSender.mouseScrollBy(0, scrollAmount, false, true, "ctrlKey", true, "phaseChanged"); + eventSender.mouseScrollBy(0, scrollAmount, false, true, "ctrlKey", true); shouldBe("wheelEventCount", "1"); shouldEvaluateTo("deltaY", expectedDeltaY); shouldBeTrue("ctrlKey"); @@ -63,7 +63,7 @@ debug('Now without ctrl and canScroll set to be default true'); wheelEventCount = 0; eventSender.mouseMoveTo(testDiv.offsetLeft + 5, testDiv.offsetTop + 5); - eventSender.mouseScrollBy(0, scrollAmount, false, true, 0, true, "phaseChanged"); + eventSender.mouseScrollBy(0, scrollAmount, false, true); shouldBe("wheelEventCount", "1"); shouldEvaluateTo("deltaY", expectedDeltaY); shouldBeFalse("ctrlKey");
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-scrolling-div.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-scrolling-div.html index d5a2cf7..3c091fc 100644 --- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-scrolling-div.html +++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-scrolling-div.html
@@ -16,7 +16,7 @@ // EventSender uses 40px per tick. eventSender.mouseMoveTo(overflowElement.offsetLeft + 5, overflowElement.offsetTop + 5); - eventSender.mouseScrollBy(-2.5, -5, false, true, 0, true, "phaseBegan"); + eventSender.mouseScrollBy(-2.5, -5); } div = document.getElementById("overflow");
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node.html index a54f5f9..bb8cb39 100644 --- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node.html +++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node.html
@@ -9,7 +9,7 @@ var div = document.querySelector('div'); if (window.eventSender) { eventSender.mouseMoveTo(div.offsetLeft + 5, div.offsetTop + 5); - eventSender.mouseScrollBy(0, 120, false, true, 0, true, "phaseBegan"); + eventSender.mouseScrollBy(0,120); } else { debug("FAIL: This test requires window.eventSender."); finishJSTest();
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-mousewheel-interaction.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-mousewheel-interaction.html index 69b8b33..ac46109 100644 --- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-mousewheel-interaction.html +++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-mousewheel-interaction.html
@@ -10,7 +10,7 @@ div.addEventListener('mousewheel', mouseWheelHandler); if (window.eventSender) { eventSender.mouseMoveTo(div.offsetLeft + 5, div.offsetTop + 5); - eventSender.mouseScrollBy(10, 20, false, true, 0, true, "phaseBegan"); + eventSender.mouseScrollBy(10, 20); finishJSTest(); } else { debug("FAIL: This test requires window.eventSender.");
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/async-xhr-json-mime-type.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/async-xhr-json-mime-type.html index f84e6dbb..c49cc83 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/async-xhr-json-mime-type.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/async-xhr-json-mime-type.html
@@ -35,10 +35,9 @@ reportRequest(request) request.requestContent().then(step3); } - function step3() + function step3(content) { - var request = lastRequest(); - InspectorTest.addResult("request.content: " + request.content); + InspectorTest.addResult("request.content: " + content); InspectorTest.addConsoleSniffer(step4); InspectorTest.evaluateInPage("loadIframe('" + encodedContentType + "')"); @@ -49,10 +48,9 @@ reportRequest(request); request.requestContent().then(step5); } - function step5() + function step5(content) { - var request = lastRequest(); - InspectorTest.addResult("request.content: " + request.content); + InspectorTest.addResult("request.content: " + content); callback(); }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/cached-resource-destroyed-moved-to-storage.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/cached-resource-destroyed-moved-to-storage.html index 7b54cfb3..08de7cc 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/cached-resource-destroyed-moved-to-storage.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/cached-resource-destroyed-moved-to-storage.html
@@ -40,13 +40,13 @@ } var originalContentLength; - function step3() + function step3(content) { InspectorTest.addResult(imageRequest.url()); InspectorTest.addResult("request.type: " + imageRequest.resourceType()); - InspectorTest.addResult("request.content.length after requesting content: " + imageRequest.content.length); - originalContentLength = imageRequest.content.length; - InspectorTest.assertTrue(imageRequest.content.length > 0, "No content before destroying CachedResource."); + InspectorTest.addResult("request.content.length after requesting content: " + content.length); + originalContentLength = content.length; + InspectorTest.assertTrue(content.length > 0, "No content before destroying CachedResource."); InspectorTest.addResult("Releasing cached resource."); // Loading another image to the same image element so that the original image cached resource is released. @@ -68,15 +68,14 @@ function step6() { // Re-request content now that CachedResource should have been destroyed. - delete imageRequest._content; + delete imageRequest._contentData; imageRequest.requestContent().then(step7); } - function step7() + function step7(content) { - InspectorTest.addResult("request.content.length after requesting content: " + imageRequest.content.length); - originalContentLength = imageRequest.content.length; - InspectorTest.assertTrue(imageRequest.content.length === originalContentLength, "Content changed after cached resource was destroyed"); + InspectorTest.addResult("request.content.length after requesting content: " + content.length); + InspectorTest.assertTrue(content.length === originalContentLength, "Content changed after cached resource was destroyed"); InspectorTest.completeTest(); } }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/cached-resource-destroyed-too-big-discarded.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/cached-resource-destroyed-too-big-discarded.html index f6946652..609b40b3 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/cached-resource-destroyed-too-big-discarded.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/cached-resource-destroyed-too-big-discarded.html
@@ -42,12 +42,12 @@ imageRequest.requestContent().then(step3); } - function step3() + function step3(content) { InspectorTest.addResult(imageRequest.url()); InspectorTest.addResult("request.type: " + imageRequest.resourceType()); - InspectorTest.addResult("request.content.length after requesting content: " + imageRequest.content.length); - InspectorTest.assertTrue(imageRequest.content.length > 0, "No content before destroying CachedResource."); + InspectorTest.addResult("request.content.length after requesting content: " + content.length); + InspectorTest.assertTrue(content.length > 0, "No content before destroying CachedResource."); InspectorTest.addResult("Releasing cached resource."); // Loading another image to the same image element so that the original image cached resource is released. @@ -71,14 +71,14 @@ function step6() { // Re-request content now that CachedResource should have been destroyed. - delete imageRequest._content; + delete imageRequest._contentData; imageRequest.requestContent().then(step7); } - function step7() + function step7(content) { - InspectorTest.addResult("request.content after requesting content: " + imageRequest.content); - InspectorTest.assertTrue(!imageRequest.content, "Content available after CachedResource was destroyed."); + InspectorTest.addResult("request.content after requesting content: " + content); + InspectorTest.assertTrue(!content, "Content available after CachedResource was destroyed."); InspectorTest.completeTest(); } }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/json-preview.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/json-preview.html index 5e869df7..412b372d 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/json-preview.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/json-preview.html
@@ -10,21 +10,18 @@ InspectorTest.addResult("Creating a NetworkRequest with type: " + type); var request = new SDK.NetworkRequest(SDK.targetManager.mainTarget(), 0, 'http://localhost'); request.mimeType = type; - request._content = '{"number": 42}'; + request._contentData = Promise.resolve({ error: null, content: '{"number": 42}', encoded: false }); return request; } - function testPreviewer(request) + async function testPreviewer(request) { - return new Promise(function(done) { - var previewView = new Network.RequestPreviewView(request, null); - - previewView._createPreviewView(function(previewer) { - InspectorTest.addResult("Its previewer is searchable: " + (previewer && previewer instanceof UI.SearchableView)); - InspectorTest.addResult("Its previewer is the JSON previewer: " + (previewer && previewer._searchProvider && previewer._searchProvider instanceof Network.JSONView)); - done(); - }); - }); + var previewView = new Network.RequestPreviewView(request, null); + var previewerPromise = InspectorTest.addSnifferPromise(previewView, "_previewViewHandledForTest"); + previewView.wasShown(); + var previewer = await previewerPromise; + InspectorTest.addResult("Its previewer is searchable: " + (previewer && previewer instanceof UI.SearchableView)); + InspectorTest.addResult("Its previewer is the JSON previewer: " + (previewer && previewer._searchProvider && previewer._searchProvider instanceof Network.JSONView)); } function testType(contentType, callback)
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-cachedresources-with-same-urls.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-cachedresources-with-same-urls.html index cd84aed..e5bbb35 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-cachedresources-with-same-urls.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-cachedresources-with-same-urls.html
@@ -30,33 +30,22 @@ InspectorTest.recordNetwork(); InspectorTest.evaluateInPage("loadImages()"); - function step2(msg) + async function step2(msg) { // inspector-test.js appears in network panel occasionally in Safari on // Mac, so checking two last requests. var requests = InspectorTest.networkRequests(); var request1 = requests[requests.length - 2]; var request2 = requests[requests.length - 1]; - request1.requestContent().then(contentLoaded); - request2.requestContent().then(contentLoaded); - } - var contentLoadedCount = 0; - function contentLoaded() - { - if (++contentLoadedCount !== 2) - return; - - var requests = InspectorTest.networkRequests(); - var request1 = requests[requests.length - 2]; - var request2 = requests[requests.length - 1]; + var request1Content = await request1.requestContent() + var request2Content = await request2.requestContent(); InspectorTest.addResult(request1.url()); InspectorTest.addResult(request2.url()); - InspectorTest.assertTrue(request1.content !== request2.content); + InspectorTest.assertTrue(request1Content !== request2Content); InspectorTest.completeTest(); } - } </script> </head>
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-choose-preview-view-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-choose-preview-view-expected.txt index ad135fd4..020f2907 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-choose-preview-view-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-choose-preview-view-expected.txt
@@ -1,47 +1,38 @@ Tests to make sure the proper view is used for the data that is received in network panel. - -Running: testSimpleJSON +Simple JSON Creating a NetworkRequest with mimeType: application/json Content: [533,3223] Its previewer type: SearchableView > widget vbox json-view - -Running: testMimeJSON +MIME JSON Creating a NetworkRequest with mimeType: application/vnd.document+json Content: {foo0foo: 123} Its previewer type: SearchableView > widget vbox json-view - -Running: testSimpleXML +Simple XML Creating a NetworkRequest with mimeType: text/xml Content: <bar><foo/></bar> Its previewer type: SearchableView > widget shadow-xml-view source-code - -Running: testXMLMimeButJSON +XML MIME But JSON Creating a NetworkRequest with mimeType: text/xml Content: {foo0: 'barr', 'barr': 'fooo'} Its previewer type: SearchableView > widget vbox json-view - -Running: testXMLWithUnknownMime +XML With Unknown MIME Creating a NetworkRequest with mimeType: text/foobar Content: <bar><foo/></bar> Its previewer type: SearchableView > widget vbox - -Running: testXMLWithError500 +XML With Error 500 Creating a NetworkRequest with mimeType: text/xml Content: <bar><foo/></bar> Its previewer type: SearchableView > widget shadow-xml-view source-code - -Running: testUnknownMimeTextWithError500 +Unknown MIME Text With Error 500 Creating a NetworkRequest with mimeType: text/foobar Content: Foo Bar Its previewer type: SearchableView > widget vbox - -Running: testBinaryImageFile +Binary Image File Creating a NetworkRequest with mimeType: image/png Content: Bin**NULL**ary File**NULL****NULL** Its previewer type: SearchableView > widget vbox - -Running: testBinaryBlankImageFile +Binary Blank Image File Creating a NetworkRequest with mimeType: image/png Content: Its previewer type: widget vbox empty-view-scroller
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-choose-preview-view.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-choose-preview-view.html index 307641d6..df6ec9c 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-choose-preview-view.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-choose-preview-view.html
@@ -3,7 +3,7 @@ <script src="../inspector-test.js"></script> <script src="../network-test.js"></script> <script> -function test() +async function test() { function createNetworkRequest(mimeType, content, statusCode) { @@ -11,7 +11,7 @@ var request = new SDK.NetworkRequest(SDK.targetManager.mainTarget(), 0, 'http://localhost'); InspectorTest.addResult("Content: " + content.replace(/\0/g, "**NULL**")); request.mimeType = mimeType; - request._content = content; + request._contentData = Promise.resolve({error: null, content: content, encoded: false}); if (statusCode !== undefined) request.statusCode = statusCode; return request; @@ -26,59 +26,43 @@ return previewer.contentElement.className; } - function testPreviewer(request, callback) - { - var previewView = new Network.RequestPreviewView(request, new Network.RequestResponseView(request)); - - previewView._createPreviewView(function(previewer) { - InspectorTest.addResult("Its previewer type: " + getViewName(previewer)); - callback(); - }); - } - - function testType(contentType, content, statusCode, callback) + async function testPreviewer(contentType, content, statusCode) { var request = createNetworkRequest(contentType, content, statusCode); - testPreviewer(request, callback); - } - InspectorTest.runTestSuite([ - function testSimpleJSON(next) - { - testType("application/json", "[533,3223]", 200, next); - }, - function testMimeJSON(next) - { - testType("application/vnd.document+json", "{foo0foo: 123}", 200, next); - }, - function testSimpleXML(next) - { - testType("text/xml", "<bar><foo/></bar>", 200, next); - }, - function testXMLMimeButJSON(next) - { - testType("text/xml", "{foo0: 'barr', 'barr': 'fooo'}", 200, next); - }, - function testXMLWithUnknownMime(next) - { - testType("text/foobar", "<bar><foo/></bar>", 200, next); - }, - function testXMLWithError500(next) - { - testType("text/xml", "<bar><foo/></bar>", 500, next); - }, - function testUnknownMimeTextWithError500(next) - { - testType("text/foobar", "Foo Bar", 500, next); - }, - function testBinaryImageFile(next) - { - testType("image/png", "Bin\0ary\1 File\0\0", 200, next); - }, - function testBinaryBlankImageFile(next) - { - testType("image/png", "", 200, next); - }, - ]); + var previewView = new Network.RequestPreviewView(request, new Network.RequestResponseView(request)); + var previewerPromise = InspectorTest.addSnifferPromise(previewView, "_previewViewHandledForTest"); + previewView.wasShown(); + InspectorTest.addResult("Its previewer type: " + getViewName(await previewerPromise)); + } + + InspectorTest.addResult("Simple JSON"); + await testPreviewer("application/json", "[533,3223]", 200); + + InspectorTest.addResult("MIME JSON"); + await testPreviewer("application/vnd.document+json", "{foo0foo: 123}", 200); + + InspectorTest.addResult("Simple XML"); + await testPreviewer("text/xml", "<bar><foo/></bar>", 200); + + InspectorTest.addResult("XML MIME But JSON"); + await testPreviewer("text/xml", "{foo0: 'barr', 'barr': 'fooo'}", 200); + + InspectorTest.addResult("XML With Unknown MIME"); + await testPreviewer("text/foobar", "<bar><foo/></bar>", 200); + + InspectorTest.addResult("XML With Error 500"); + await testPreviewer("text/xml", "<bar><foo/></bar>", 500); + + InspectorTest.addResult("Unknown MIME Text With Error 500"); + await testPreviewer("text/foobar", "Foo Bar", 500); + + InspectorTest.addResult("Binary Image File"); + await testPreviewer("image/png", "Bin\0ary\1 File\0\0", 200); + + InspectorTest.addResult("Binary Blank Image File"); + await testPreviewer("image/png", "", 200); + + InspectorTest.completeTest(); } </script> </head>
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-content-replacement-xhr.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-content-replacement-xhr.html index ee4bf4f..afeee38 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-content-replacement-xhr.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-content-replacement-xhr.html
@@ -35,9 +35,10 @@ return callback(); InspectorTest.addResult(request.url()); - function contentLoaded() + async function contentLoaded(content) { - InspectorTest.addResult("resource.content: " + request.content); + + InspectorTest.addResult("resource.content: " + content); callback(); }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr.html index 090b113..0736fa7 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr.html
@@ -11,9 +11,9 @@ return callback(); InspectorTest.addResult(request.url()); - function contentLoaded() + function contentLoaded(content) { - InspectorTest.addResult("resource.content: " + request.content); + InspectorTest.addResult("resource.content: " + content); callback(); }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disable-cache-memory.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disable-cache-memory.html index 2d0477c..23157e0 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disable-cache-memory.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disable-cache-memory.html
@@ -29,13 +29,7 @@ function scriptLoaded() { var request = InspectorTest.networkRequests().pop(); - request.requestContent().then(contentLoaded); - } - - function contentLoaded() - { - var request = InspectorTest.networkRequests().pop(); - callback(request.content); + request.requestContent().then(callback); } }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disable-cache-xhrs.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disable-cache-xhrs.html index b73e4ae..187ad30 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disable-cache-xhrs.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disable-cache-xhrs.html
@@ -23,7 +23,7 @@ InspectorTest.makeSimpleXHR("GET", "resources/resource.php?random=1&cached=1", true, step4); } - function step4(msg) + async function step4(msg) { // inspector-test.js appears in network panel occasionally in Safari on // Mac, so checking two last resources. @@ -31,27 +31,16 @@ var request1 = requests[requests.length - 3]; var request2 = requests[requests.length - 2]; var request3 = requests[requests.length - 1]; - request1.requestContent().then(contentLoaded); - request2.requestContent().then(contentLoaded); - request3.requestContent().then(contentLoaded); - } - var contentLoadedCount = 0; - function contentLoaded() - { - if (++contentLoadedCount !== 3) - return; - - var requests = InspectorTest.networkRequests(); - var request1 = requests[requests.length - 3]; - var request2 = requests[requests.length - 2]; - var request3 = requests[requests.length - 1]; + var request1Content = await request1.requestContent(); + var request2Content = await request2.requestContent(); + var request3Content = await request3.requestContent(); InspectorTest.addResult(request1.url()); InspectorTest.addResult(request2.url()); InspectorTest.addResult(request3.url()); - InspectorTest.assertTrue(request1.content === request2.content, "First and second resources are equal"); - InspectorTest.assertTrue(request2.content !== request3.content, "Second and third resources differ"); + InspectorTest.assertTrue(request1Content === request2Content, "First and second resources are equal"); + InspectorTest.assertTrue(request2Content !== request3Content, "Second and third resources differ"); InspectorTest.NetworkAgent.setCacheDisabled(false).then(step5); }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disabling-check-no-memory-leak.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disabling-check-no-memory-leak.html index c2ae3ca..b22cfb2 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disabling-check-no-memory-leak.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-disabling-check-no-memory-leak.html
@@ -12,10 +12,17 @@ { await InspectorTest.NetworkAgent.disable(); var request1 = InspectorTest.networkRequests().pop(); - await request1.requestContent(); - var request1 = InspectorTest.networkRequests().pop(); - InspectorTest.addResult("resource.content after disabling network domain: " + request1.content); - await InspectorTest.NetworkAgent.enable(); + request1.requestContent().then(step4); + } + + function step4(content) + { + InspectorTest.addResult("resource.content after disabling network domain: " + content); + InspectorTest.NetworkAgent.enable().then(step5); + } + + function step5() + { InspectorTest.completeTest(); } }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-empty-xhr.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-empty-xhr.html index cf735ed..b002244 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-empty-xhr.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-empty-xhr.html
@@ -11,9 +11,9 @@ return callback(); InspectorTest.addResult(request.url()); - function contentLoaded() + function contentLoaded(content) { - InspectorTest.addResult("resource.content: " + request.content); + InspectorTest.addResult("resource.content: " + content); callback(); }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-eventsource-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-eventsource-expected.txt index 0996e0dd..7c7af33 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-eventsource-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-eventsource-expected.txt
@@ -3,7 +3,6 @@ [page] got event: hello http://127.0.0.1:8000/inspector/network/resources/event-stream.asis resource.type: eventsource -resource.content before requesting content: undefined resource.content after requesting content: data: hello
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-eventsource.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-eventsource.html index cf513ec0..9e2d7979 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-eventsource.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-eventsource.html
@@ -29,21 +29,15 @@ InspectorTest.recordNetwork(); InspectorTest.callFunctionInPageAsync("receiveEvent").then(step2); - function step2() + async function step2() { var request1 = InspectorTest.networkRequests().pop(); InspectorTest.addResult(request1.url()); InspectorTest.addResult("resource.type: " + request1.resourceType()); - InspectorTest.addResult("resource.content before requesting content: " + request1.content); InspectorTest.assertTrue(!request1.failed, "Resource loading failed."); - request1.requestContent().then(step3); - } - function step3() - { - var request1 = InspectorTest.networkRequests().pop(); - InspectorTest.addResult("resource.content after requesting content: " + request1.content); - + var content = await request1.requestContent(); + InspectorTest.addResult("resource.content after requesting content: " + content); InspectorTest.completeTest(); } }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-fetch-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-fetch-expected.txt index a285648..8ca676f 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-fetch-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-fetch-expected.txt
@@ -2,6 +2,5 @@ http://127.0.0.1:8000/inspector/network/resources/resource.php resource.type: fetch -resource.content before requesting content: undefined resource.content after requesting content: Hello world
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-fetch.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-fetch.html index 7890181..f15a6499 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-fetch.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-fetch.html
@@ -8,22 +8,20 @@ InspectorTest.recordNetwork(); InspectorTest.makeFetch("resources/resource.php", {}, step2); - function step2() + async function step2() { var request1 = InspectorTest.networkRequests().pop(); InspectorTest.addResult(request1.url()); InspectorTest.addResult("resource.type: " + request1.resourceType()); - InspectorTest.addResult("resource.content before requesting content: " + request1.content); InspectorTest.assertTrue(!request1.failed, "Resource loading failed."); - request1.requestContent().then(step3); + + var content = await request1.requestContent(); + InspectorTest.addResult("resource.content after requesting content: " + content); + InspectorTest.completeTest(); } function step3() { - var request1 = InspectorTest.networkRequests().pop(); - InspectorTest.addResult("resource.content after requesting content: " + request1.content); - - InspectorTest.completeTest(); } } </script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-iframe-load-and-delete-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-iframe-load-and-delete-expected.txt index 2455c843..1b9ca409 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-iframe-load-and-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-iframe-load-and-delete-expected.txt
@@ -3,10 +3,8 @@ http://127.0.0.1:8000/inspector/network/resources/resource.php resource.type: document -resource.content before requesting content: undefined resource.content after requesting content: Hello world http://127.0.0.1:8000/inspector/network/resources/resource.php resource.type: document -resource.content before requesting content: undefined resource.content after requesting content: Hello world
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-iframe-load-and-delete.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-iframe-load-and-delete.html index 782fe5e..763ce4c 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-iframe-load-and-delete.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-iframe-load-and-delete.html
@@ -42,34 +42,20 @@ InspectorTest.addConsoleSniffer(step2); InspectorTest.evaluateInPage("loadIframe()"); - function step2() + async function step2() { var requests = InspectorTest.networkRequests(); var request1 = requests[requests.length - 2]; InspectorTest.addResult(request1.url()); InspectorTest.addResult("resource.type: " + request1.resourceType()); - InspectorTest.addResult("resource.content before requesting content: " + request1.content); - request1.requestContent().then(step3); - } - - function step3() - { - var requests = InspectorTest.networkRequests(); - var request1 = requests[requests.length - 2]; - InspectorTest.addResult("resource.content after requesting content: " + request1.content); + var content = await request1.requestContent(); + InspectorTest.addResult("resource.content after requesting content: " + content); var request2 = requests[requests.length - 1]; InspectorTest.addResult(request2.url()); InspectorTest.addResult("resource.type: " + request2.resourceType()); - InspectorTest.addResult("resource.content before requesting content: " + request2.content); - request2.requestContent().then(step4); - } - - function step4() - { - var requests = InspectorTest.networkRequests(); - var request2 = requests[requests.length - 1]; - InspectorTest.addResult("resource.content after requesting content: " + request2.content); + var content = await request2.requestContent(); + InspectorTest.addResult("resource.content after requesting content: " + content); InspectorTest.completeTest(); }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-image-404-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-image-404-expected.txt index 474b38e..e56ad81e 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-image-404-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-image-404-expected.txt
@@ -4,7 +4,6 @@ Bug 84265 http://127.0.0.1:8000/inspector/network/resources/404.php resource.type: image -resource.content before requesting content: undefined resources count = 1 http://127.0.0.1:8000/inspector/network/resources/404.php resource.content after requesting content: 404 - resource was not found.
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-image-404.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-image-404.html index 6721c37f..2405766c 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-image-404.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-image-404.html
@@ -26,19 +26,19 @@ var request1 = InspectorTest.networkRequests().pop(); InspectorTest.addResult(request1.url()); InspectorTest.addResult("resource.type: " + request1.resourceType()); - InspectorTest.addResult("resource.content before requesting content: " + request1.content); InspectorTest.assertTrue(!request1.failed, "Resource loading failed."); request1.requestContent().then(step3); } - function step3() + async function step3() { var requests = InspectorTest.networkRequests(); requests.sort(function(a, b) {return a.url().localeCompare(b.url());}); InspectorTest.addResult("resources count = " + requests.length); for (i = 0; i < requests.length; i++) { InspectorTest.addResult(requests[i].url()); - InspectorTest.addResult("resource.content after requesting content: " + requests[i].content); + var content = await requests[i].requestContent(); + InspectorTest.addResult("resource.content after requesting content: " + content); }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-imported-resource-content-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-imported-resource-content-expected.txt index 75b163a9..1d67ded8 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-imported-resource-content-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-imported-resource-content-expected.txt
@@ -2,7 +2,6 @@ http://127.0.0.1:8000/inspector/network/resources/imported.html resource.type: other -resource.content before requesting content: undefined resource.content after requesting content: Imported Resource
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-imported-resource-content.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-imported-resource-content.html index 10b44ce..dbe2d29 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-imported-resource-content.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-imported-resource-content.html
@@ -21,15 +21,13 @@ var request = InspectorTest.networkRequests().pop(); InspectorTest.addResult(request.url()); InspectorTest.addResult("resource.type: " + request.resourceType()); - InspectorTest.addResult("resource.content before requesting content: " + request.content); InspectorTest.assertTrue(!request.failed, "Resource loading failed."); request.requestContent().then(step3); } - function step3() + function step3(content) { - var request = InspectorTest.networkRequests().pop(); - InspectorTest.addResult("resource.content after requesting content: " + request.content); + InspectorTest.addResult("resource.content after requesting content: " + content); InspectorTest.completeTest(); } }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-double.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-double.html index e1a199c..b5c2bb6 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-double.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-double.html
@@ -23,7 +23,7 @@ InspectorTest.evaluateInPage("makeXHRForJSONArguments(\"" + jsonArgs1 + "\"); makeXHRForJSONArguments(\"" + jsonArgs2 + "\")"); var totalXHRs = 2; - function step2(msg) + async function step2(msg) { if (msg.messageText.indexOf("XHR loaded") === -1 || (--totalXHRs)) { InspectorTest.addConsoleSniffer(step2); @@ -33,21 +33,12 @@ var requests = InspectorTest.networkRequests(); var request1 = requests[requests.length - 2]; var request2 = requests[requests.length - 1]; - request1.requestContent().then(step3); - request2.requestContent().then(step3); - } + var request1Content = await request1.requestContent(); + var request2Content = await request2.requestContent(); - var toLoad = 2; - function step3() - { - if (--toLoad) - return; - var requests = InspectorTest.networkRequests(); - var request1 = requests[requests.length - 2]; - var request2 = requests[requests.length - 1]; - InspectorTest.addResult("resource1.content: " + request1.content); - InspectorTest.addResult("resource2.content: " + request2.content); - InspectorTest.assertTrue(request1.content === 'request1' && request2.content === 'request2'); + InspectorTest.addResult("resource1.content: " + request1Content); + InspectorTest.addResult("resource2.content: " + request2Content); + InspectorTest.assertTrue(request1Content === 'request1' && request2Content === 'request2'); InspectorTest.completeTest(); } }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-expected.txt index 2d157c1..6e0a299 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-expected.txt
@@ -3,6 +3,5 @@ http://127.0.0.1:8000/inspector/network/resources/resource.php resource.type: xhr -resource.content before requesting content: undefined resource.content after requesting content: Hello world
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-response-type-blob-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-response-type-blob-expected.txt index 1309bbd..5599a4c 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-response-type-blob-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-response-type-blob-expected.txt
@@ -4,6 +4,5 @@ http://127.0.0.1:8000/inspector/network/resources/resource.php resource.type: xhr resource.size: 11 -resource.content before requesting content: undefined resource.content after requesting content: Hello world
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-response-type-blob.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-response-type-blob.html index d0d7a31..f793ef9 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-response-type-blob.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async-response-type-blob.html
@@ -14,15 +14,13 @@ InspectorTest.addResult(request1.url()); InspectorTest.addResult("resource.type: " + request1.resourceType()); InspectorTest.addResult("resource.size: " + request1.resourceSize); - InspectorTest.addResult("resource.content before requesting content: " + request1.content); InspectorTest.assertTrue(!request1.failed, "Resource loading failed."); request1.requestContent().then(step3); } - function step3() + function step3(content) { - var request1 = InspectorTest.networkRequests().pop(); - InspectorTest.addResult("resource.content after requesting content: " + request1.content); + InspectorTest.addResult("resource.content after requesting content: " + content); InspectorTest.completeTest(); }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async.html index 50dcc7c2..1ca02bf 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-async.html
@@ -13,15 +13,13 @@ var request1 = InspectorTest.networkRequests().pop(); InspectorTest.addResult(request1.url()); InspectorTest.addResult("resource.type: " + request1.resourceType()); - InspectorTest.addResult("resource.content before requesting content: " + request1.content); InspectorTest.assertTrue(!request1.failed, "Resource loading failed."); request1.requestContent().then(step3); } - function step3() + function step3(content) { - var request1 = InspectorTest.networkRequests().pop(); - InspectorTest.addResult("resource.content after requesting content: " + request1.content); + InspectorTest.addResult("resource.content after requesting content: " + content); InspectorTest.completeTest(); }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-binary-content.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-binary-content.html index 0c4517e5f..18fbe31 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-binary-content.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-binary-content.html
@@ -9,20 +9,17 @@ InspectorTest.recordNetwork(); InspectorTest.makeSimpleXHR("GET", "resources/binary.data", true, step2); - function step2() + async function step2() { var request = InspectorTest.networkRequests().pop(); InspectorTest.addResult("request.type: " + request.resourceType()); InspectorTest.addResult("request.mimeType: " + request.mimeType); - request.requestContent().then(step3); - } - function step3() - { - var request = InspectorTest.networkRequests().pop(); - InspectorTest.addResult("request.contentEncoded: " + request.contentEncoded); - InspectorTest.addResult("request.content: " + request.content); - var raw = window.atob(request.content); + var contentData = await request.contentData(); + + InspectorTest.addResult("request.contentEncoded: " + contentData.encoded); + InspectorTest.addResult("request.content: " + contentData.content); + var raw = window.atob(contentData.content); var bytes = []; for (var i = 0; i < raw.length; ++i) bytes.push(raw.charCodeAt(i));
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-sync-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-sync-expected.txt index 0831374..ff9d7172 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-sync-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-sync-expected.txt
@@ -4,6 +4,5 @@ http://127.0.0.1:8000/inspector/network/resources/resource.php resource.type: xhr -resource.content before requesting content: undefined resource.content after requesting content: Hello world
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-sync.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-sync.html index f40371e..cfed3a3c 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-sync.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-sync.html
@@ -13,15 +13,13 @@ var request1 = InspectorTest.networkRequests().pop(); InspectorTest.addResult(request1.url()); InspectorTest.addResult("resource.type: " + request1.resourceType()); - InspectorTest.addResult("resource.content before requesting content: " + request1.content); InspectorTest.assertTrue(!request1.failed, "Resource loading failed."); request1.requestContent().then(step3); } - function step3() + function step3(content) { - var request1 = InspectorTest.networkRequests().pop(); - InspectorTest.addResult("resource.content after requesting content: " + request1.content); + InspectorTest.addResult("resource.content after requesting content: " + content); InspectorTest.completeTest(); }
diff --git a/third_party/WebKit/LayoutTests/overflow/overflow-position-001.html b/third_party/WebKit/LayoutTests/overflow/overflow-position-001.html new file mode 100644 index 0000000..2076b33c --- /dev/null +++ b/third_party/WebKit/LayoutTests/overflow/overflow-position-001.html
@@ -0,0 +1,54 @@ +<!doctype html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<style> +#container { + writing-mode: horizontal-tb; + overflow: scroll; + position: relative; + width: 200px; + height: 100px; + box-shadow: 0px 0px 12px 0px black; +} +#target { + width: 100%; + height: 100%; + background-color: rgba(0, 255, 0, 0.3); +} +</style> +<p>Overflow: child position and size</p> +<div id="container"> + <div id="target">foo</div> +</div> +<script> + +var container = document.querySelector('#container'); +var target = document.querySelector('#target'); + +function getTargetOffset() { + var containerRect = container.getBoundingClientRect(); + var targetRect = target.getBoundingClientRect(); + return { + top: targetRect.top - containerRect.top, + left: targetRect.left - containerRect.left + } +} + +test(function() { + assert_equals(target.offsetWidth, container.clientWidth, "width"); + assert_equals(target.offsetHeight, container.clientHeight, "height"); + var targetOffset = getTargetOffset(); + assert_equals(targetOffset.top, container.clientTop, "top"); + assert_equals(targetOffset.left, container.clientLeft, "left"); +}, "position with scrollbars"); + +test(function() { + container.style.direction = "rtl"; + assert_equals(target.offsetWidth, container.clientWidth, "width"); + assert_equals(target.offsetHeight, container.clientHeight, "height"); + var targetOffset = getTargetOffset(); + assert_equals(targetOffset.top, container.clientTop, "top"); + assert_equals(targetOffset.left, container.clientLeft, "left"); +}, "position with scrollbars + rtl"); +</script> +
diff --git a/third_party/WebKit/LayoutTests/overflow/overflow-position-002.html b/third_party/WebKit/LayoutTests/overflow/overflow-position-002.html new file mode 100644 index 0000000..a47666a8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/overflow/overflow-position-002.html
@@ -0,0 +1,54 @@ +<!doctype html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<style> +#container { + writing-mode: vertical-lr; + overflow: scroll; + position: relative; + width: 200px; + height: 100px; + box-shadow: 0px 0px 12px 0px black; +} +#target { + width: 100%; + height: 100%; + background-color: rgba(0, 255, 0, 0.3); +} +</style> +<p>Overflow: child position and size + writing-mode: vertical-lr</p> +<div id="container"> + <div id="target">foo</div> +</div> +<script> + +var container = document.querySelector('#container'); +var target = document.querySelector('#target'); + +function getTargetOffset() { + var containerRect = container.getBoundingClientRect(); + var targetRect = target.getBoundingClientRect(); + return { + top: targetRect.top - containerRect.top, + left: targetRect.left - containerRect.left + } +} + +test(function() { + assert_equals(target.offsetWidth, container.clientWidth, "width"); + assert_equals(target.offsetHeight, container.clientHeight, "height"); + var targetOffset = getTargetOffset(); + assert_equals(targetOffset.top, container.clientTop, "top"); + assert_equals(targetOffset.left, container.clientLeft, "left"); +}, "position with scrollbars"); + +test(function() { + container.style.direction = "rtl"; + assert_equals(target.offsetWidth, container.clientWidth, "width"); + assert_equals(target.offsetHeight, container.clientHeight, "height"); + var targetOffset = getTargetOffset(); + assert_equals(targetOffset.top, container.clientTop, "top"); + assert_equals(targetOffset.left, container.clientLeft, "left"); +}, "position with scrollbars + rtl"); +</script> +
diff --git a/third_party/WebKit/LayoutTests/overflow/overflow-position-003.html b/third_party/WebKit/LayoutTests/overflow/overflow-position-003.html new file mode 100644 index 0000000..6b958129 --- /dev/null +++ b/third_party/WebKit/LayoutTests/overflow/overflow-position-003.html
@@ -0,0 +1,54 @@ +<!doctype html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<style> +#container { + writing-mode: vertical-rl; + overflow: scroll; + position: relative; + width: 200px; + height: 100px; + box-shadow: 0px 0px 12px 0px black; +} +#target { + width: 100%; + height: 100%; + background-color: rgba(0, 255, 0, 0.3); +} +</style> +<p>Overflow: child position and size + writing-mode: vertical-rl</p> +<div id="container"> + <div id="target">foo</div> +</div> +<script> + +var container = document.querySelector('#container'); +var target = document.querySelector('#target'); + +function getTargetOffset() { + var containerRect = container.getBoundingClientRect(); + var targetRect = target.getBoundingClientRect(); + return { + top: targetRect.top - containerRect.top, + left: targetRect.left - containerRect.left + } +} + +test(function() { + assert_equals(target.offsetWidth, container.clientWidth, "width"); + assert_equals(target.offsetHeight, container.clientHeight, "height"); + var targetOffset = getTargetOffset(); + assert_equals(targetOffset.top, container.clientTop, "top"); + assert_equals(targetOffset.left, container.clientLeft, "left"); +}, "position with scrollbars"); + +test(function() { + container.style.direction = "rtl"; + assert_equals(target.offsetWidth, container.clientWidth, "width"); + assert_equals(target.offsetHeight, container.clientHeight, "height"); + var targetOffset = getTargetOffset(); + assert_equals(targetOffset.top, container.clientTop, "top"); + assert_equals(targetOffset.left, container.clientLeft, "left"); +}, "position with scrollbars + rtl"); +</script> +
diff --git a/third_party/WebKit/LayoutTests/resources/bluetooth/bluetooth-helpers.js b/third_party/WebKit/LayoutTests/resources/bluetooth/bluetooth-helpers.js index 86581b8..fbff635 100644 --- a/third_party/WebKit/LayoutTests/resources/bluetooth/bluetooth-helpers.js +++ b/third_party/WebKit/LayoutTests/resources/bluetooth/bluetooth-helpers.js
@@ -456,26 +456,94 @@ })])); } -// Returns a BluetoothDevice discovered using |options| and its -// corresponding FakePeripheral. +// Returns an object containing a BluetoothDevice discovered using |options|, +// its corresponding FakePeripheral and FakeRemoteGATTServices. // The simulated device is called 'Health Thermometer' it has two known service -// UUIDs: 'generic_access' and 'health_thermometer'. The device has been -// connected to and its services are ready to be discovered. +// UUIDs: 'generic_access' and 'health_thermometer' which correspond to two +// services with the same UUIDs. The device has been connected to and its +// services are ready to be discovered. // TODO(crbug.com/719816): Add characteristics and descriptors. function getHealthThermometerDevice(options) { + let device; + let fake_peripheral; + let fake_generic_access; + let fake_health_thermometer; + + return getConnectedHealthThermometerDevice(options) + .then(result => { + ({ + device, + fake_peripheral, + fake_generic_access, + fake_health_thermometer, + } = result); + }) + .then(() => fake_peripheral.setNextGATTDiscoveryResponse({ + code: HCI_SUCCESS})) + .then(() => ({ + device: device, + fake_peripheral: fake_peripheral, + fake_generic_access: fake_generic_access, + fake_health_thermometer1: fake_health_thermometer, + })); +} + +// Similar to getHealthThermometerDevice except that the peripheral has +// two 'health_thermometer' services. +function getTwoHealthThermometerServicesDevice(options) { + let device; + let fake_peripheral; + let fake_generic_access; + let fake_health_thermometer1; + let fake_health_thermometer2; + + return getConnectedHealthThermometerDevice(options) + .then(result => { + ({ + device, + fake_peripheral, + fake_generic_access, + fake_health_thermometer: fake_health_thermometer1, + } = result); + }) + .then(() => fake_peripheral.addFakeService({uuid: 'health_thermometer'})) + .then(s => fake_health_thermometer2 = s) + .then(() => fake_peripheral.setNextGATTDiscoveryResponse({ + code: HCI_SUCCESS})) + .then(() => ({ + device: device, + fake_peripheral: fake_peripheral, + fake_generic_access: fake_generic_access, + fake_health_thermometer1: fake_health_thermometer1, + fake_health_thermometer2: fake_health_thermometer2 + })); +} + +// Similar to getHealthThermometerDevice except the GATT discovery +// response has not been set yet so more attributes can still be added. +function getConnectedHealthThermometerDevice(options) { + let device; + let fake_peripheral; + let fake_generic_access; + let fake_health_thermometer; return getDiscoveredHealthThermometerDevice(options) - .then(([device, fake_peripheral]) => { - return fake_peripheral.setNextGATTConnectionResponse({code: HCI_SUCCESS}) - .then(() => device.gatt.connect()) - .then(() => fake_peripheral.addFakeService({uuid: 'generic_access'})) - .then(() => fake_peripheral.addFakeService({ - uuid: 'health_thermometer'})) - .then(() => fake_peripheral.addFakeService({ - uuid: 'health_thermometer'})) - .then(() => fake_peripheral.setNextGATTDiscoveryResponse({ - code: HCI_SUCCESS})) - .then(() => [device, fake_peripheral]); - }); + .then(result => { + ({device, fake_peripheral} = result); + }) + .then(() => fake_peripheral.setNextGATTConnectionResponse({ + code: HCI_SUCCESS})) + .then(() => device.gatt.connect()) + .then(() => fake_peripheral.addFakeService({uuid: 'generic_access'})) + .then(s => fake_generic_access = s) + .then(() => fake_peripheral.addFakeService({ + uuid: 'health_thermometer'})) + .then(s => fake_health_thermometer = s) + .then(() => ({ + device: device, + fake_peripheral: fake_peripheral, + fake_generic_access: fake_generic_access, + fake_health_thermometer: fake_health_thermometer, + })); } // Returns the same device and fake peripheral as getHealthThermometerDevice() @@ -513,7 +581,10 @@ })) .then(() => requestDeviceWithKeyDown(options)) .then(device => device.gatt.connect()) - .then(gatt => [gatt.device, fake_peripheral]); + .then(gatt => ({ + device: gatt.device, + fake_peripheral: fake_peripheral + })); }); } @@ -521,12 +592,15 @@ // characteristics, or descriptors. function getEmptyHealthThermometerDevice(options) { return getDiscoveredHealthThermometerDevice(options) - .then(([device, fake_peripheral]) => { + .then(({device, fake_peripheral}) => { return fake_peripheral.setNextGATTConnectionResponse({code: HCI_SUCCESS}) .then(() => device.gatt.connect()) .then(() => fake_peripheral.setNextGATTDiscoveryResponse({ code: HCI_SUCCESS})) - .then(() => [device, fake_peripheral]); + .then(() => ({ + device: device, + fake_peripheral: fake_peripheral + })); }); } @@ -549,8 +623,7 @@ .then(fake_peripheral => { return requestDeviceWithKeyDown(options) .then(device => { - return fake_peripheral - .setNextGATTConnectionResponse({ + return fake_peripheral.setNextGATTConnectionResponse({ code: HCI_SUCCESS}) .then(() => device.gatt.connect()) .then(() => fake_peripheral.addFakeService({ @@ -561,7 +634,10 @@ uuid: 'human_interface_device'})) .then(() => fake_peripheral.setNextGATTDiscoveryResponse({ code: HCI_SUCCESS})) - .then(() => [device, fake_peripheral]); + .then(() => ({ + device: device, + fake_peripheral: fake_peripheral + })); }); }); }; @@ -578,6 +654,9 @@ }) .then(fake_peripheral => { return requestDeviceWithKeyDown(options) - .then(device => [device, fake_peripheral]); + .then(device => ({ + device: device, + fake_peripheral: fake_peripheral + })); }); }
diff --git a/third_party/WebKit/ManualTests/forms/calendar-picker.html b/third_party/WebKit/ManualTests/forms/calendar-picker.html index 99dbdd40..dd9a6c3 100644 --- a/third_party/WebKit/ManualTests/forms/calendar-picker.html +++ b/third_party/WebKit/ManualTests/forms/calendar-picker.html
@@ -283,28 +283,28 @@ doc.documentElement.innerHTML = '<head></head><body><div id=main>Loading...</div></body>'; var commonCssLink = doc.createElement('link'); commonCssLink.rel = 'stylesheet'; - commonCssLink.href = '../../Source/web/resources/pickerCommon.css?' + (new Date()).getTime(); + commonCssLink.href = '../../Source/core/html/forms/resources/pickerCommon.css?' + (new Date()).getTime(); doc.head.appendChild(commonCssLink); var buttonCssLink = doc.createElement('link'); buttonCssLink.rel = 'stylesheet'; - buttonCssLink.href = '../../Source/web/resources/pickerButton.css?' + (new Date()).getTime(); + buttonCssLink.href = '../../Source/core/html/forms/resources/pickerButton.css?' + (new Date()).getTime(); doc.head.appendChild(buttonCssLink); var suggestionPickerCssLink = doc.createElement('link'); suggestionPickerCssLink.rel = 'stylesheet'; - suggestionPickerCssLink.href = '../../Source/web/resources/suggestionPicker.css?' + (new Date()).getTime(); + suggestionPickerCssLink.href = '../../Source/core/html/forms/resources/suggestionPicker.css?' + (new Date()).getTime(); doc.head.appendChild(suggestionPickerCssLink); var link = doc.createElement('link'); link.rel = 'stylesheet'; - link.href = '../../Source/web/resources/calendarPicker.css?' + (new Date()).getTime(); + link.href = '../../Source/core/html/forms/resources/calendarPicker.css?' + (new Date()).getTime(); doc.head.appendChild(link); var commonJsScript = doc.createElement('script'); - commonJsScript.src = '../../Source/web/resources/pickerCommon.js?' + (new Date()).getTime(); + commonJsScript.src = '../../Source/core/html/forms/resources/pickerCommon.js?' + (new Date()).getTime(); doc.body.appendChild(commonJsScript); var suggestionPickerJsScript = doc.createElement('script'); - suggestionPickerJsScript.src = '../../Source/web/resources/suggestionPicker.js?' + (new Date()).getTime(); + suggestionPickerJsScript.src = '../../Source/core/html/forms/resources/suggestionPicker.js?' + (new Date()).getTime(); doc.body.appendChild(suggestionPickerJsScript); var script = doc.createElement('script'); - script.src = '../../Source/web/resources/calendarPicker.js?' + (new Date()).getTime(); + script.src = '../../Source/core/html/forms/resources/calendarPicker.js?' + (new Date()).getTime(); doc.body.appendChild(script); var pagePopupController = {
diff --git a/third_party/WebKit/ManualTests/forms/color-suggestion-picker.html b/third_party/WebKit/ManualTests/forms/color-suggestion-picker.html index 87158624c..88990f6 100644 --- a/third_party/WebKit/ManualTests/forms/color-suggestion-picker.html +++ b/third_party/WebKit/ManualTests/forms/color-suggestion-picker.html
@@ -38,17 +38,17 @@ doc.documentElement.innerHTML = '<head></head><body><div id=main>Loading...</div></body>'; var commonCssLink = doc.createElement('link'); commonCssLink.rel = 'stylesheet'; - commonCssLink.href = '../../Source/web/resources/pickerCommon.css?' + (new Date()).getTime(); + commonCssLink.href = '../../Source/core/html/forms/resources/pickerCommon.css?' + (new Date()).getTime(); doc.head.appendChild(commonCssLink); var link = doc.createElement('link'); link.rel = 'stylesheet'; - link.href = '../../Source/web/resources/colorSuggestionPicker.css?' + (new Date()).getTime(); + link.href = '../../Source/core/html/forms/resources/colorSuggestionPicker.css?' + (new Date()).getTime(); doc.head.appendChild(link); var commonJsScript = doc.createElement('script'); - commonJsScript.src = '../../Source/web/resources/pickerCommon.js?' + (new Date()).getTime(); + commonJsScript.src = '../../Source/core/html/forms/resources/pickerCommon.js?' + (new Date()).getTime(); doc.body.appendChild(commonJsScript); var script = doc.createElement('script'); - script.src = '../../Source/web/resources/colorSuggestionPicker.js?' + (new Date()).getTime(); + script.src = '../../Source/core/html/forms/resources/colorSuggestionPicker.js?' + (new Date()).getTime(); doc.body.appendChild(script); var pagePopupController = {
diff --git a/third_party/WebKit/ManualTests/forms/date-suggestion-picker.html b/third_party/WebKit/ManualTests/forms/date-suggestion-picker.html index 9e9ec999..127ffb3 100644 --- a/third_party/WebKit/ManualTests/forms/date-suggestion-picker.html +++ b/third_party/WebKit/ManualTests/forms/date-suggestion-picker.html
@@ -194,28 +194,28 @@ doc.documentElement.innerHTML = '<head></head><body><div id=main>Loading...</div></body>'; var commonCssLink = doc.createElement('link'); commonCssLink.rel = 'stylesheet'; - commonCssLink.href = '../../Source/web/resources/pickerCommon.css?' + (new Date()).getTime(); + commonCssLink.href = '../../Source/core/html/forms/resources/pickerCommon.css?' + (new Date()).getTime(); doc.head.appendChild(commonCssLink); var buttonCssLink = doc.createElement('link'); buttonCssLink.rel = 'stylesheet'; - buttonCssLink.href = '../../Source/web/resources/pickerButton.css?' + (new Date()).getTime(); + buttonCssLink.href = '../../Source/core/html/forms/resources/pickerButton.css?' + (new Date()).getTime(); doc.head.appendChild(buttonCssLink); var suggestionPickerCssLink = doc.createElement('link'); suggestionPickerCssLink.rel = 'stylesheet'; - suggestionPickerCssLink.href = '../../Source/web/resources/suggestionPicker.css?' + (new Date()).getTime(); + suggestionPickerCssLink.href = '../../Source/core/html/forms/resources/suggestionPicker.css?' + (new Date()).getTime(); doc.head.appendChild(suggestionPickerCssLink); var link = doc.createElement('link'); link.rel = 'stylesheet'; - link.href = '../../Source/web/resources/calendarPicker.css?' + (new Date()).getTime(); + link.href = '../../Source/core/html/forms/resources/calendarPicker.css?' + (new Date()).getTime(); doc.head.appendChild(link); var commonJsScript = doc.createElement('script'); - commonJsScript.src = '../../Source/web/resources/pickerCommon.js?' + (new Date()).getTime(); + commonJsScript.src = '../../Source/core/html/forms/resources/pickerCommon.js?' + (new Date()).getTime(); doc.body.appendChild(commonJsScript); var suggestionPickerJsScript = doc.createElement('script'); - suggestionPickerJsScript.src = '../../Source/web/resources/suggestionPicker.js?' + (new Date()).getTime(); + suggestionPickerJsScript.src = '../../Source/core/html/forms/resources/suggestionPicker.js?' + (new Date()).getTime(); doc.body.appendChild(suggestionPickerJsScript); var script = doc.createElement('script'); - script.src = '../../Source/web/resources/calendarPicker.js?' + (new Date()).getTime(); + script.src = '../../Source/core/html/forms/resources/calendarPicker.js?' + (new Date()).getTime(); doc.body.appendChild(script); var pagePopupController = {
diff --git a/third_party/WebKit/ManualTests/forms/list-picker.html b/third_party/WebKit/ManualTests/forms/list-picker.html index af87915..358412e 100644 --- a/third_party/WebKit/ManualTests/forms/list-picker.html +++ b/third_party/WebKit/ManualTests/forms/list-picker.html
@@ -199,17 +199,17 @@ doc.documentElement.innerHTML = '<!DOCTYPE html><head></head><body><div id=main>Loading...</div></body>'; var commonCssLink = doc.createElement('link'); commonCssLink.rel = 'stylesheet'; - commonCssLink.href = '../../Source/web/resources/pickerCommon.css?' + (new Date()).getTime(); + commonCssLink.href = '../../Source/core/html/forms/resources/pickerCommon.css?' + (new Date()).getTime(); doc.head.appendChild(commonCssLink); var listPickerCssLink = doc.createElement('link'); listPickerCssLink.rel = 'stylesheet'; - listPickerCssLink.href = '../../Source/web/resources/listPicker.css?' + (new Date()).getTime(); + listPickerCssLink.href = '../../Source/core/html/forms/resources/listPicker.css?' + (new Date()).getTime(); doc.head.appendChild(listPickerCssLink); var commonJsScript = doc.createElement('script'); - commonJsScript.src = '../../Source/web/resources/pickerCommon.js?' + (new Date()).getTime(); + commonJsScript.src = '../../Source/core/html/forms/resources/pickerCommon.js?' + (new Date()).getTime(); doc.body.appendChild(commonJsScript); var listPickerJsScript = doc.createElement('script'); - listPickerJsScript.src = '../../Source/web/resources/listPicker.js?' + (new Date()).getTime(); + listPickerJsScript.src = '../../Source/core/html/forms/resources/listPicker.js?' + (new Date()).getTime(); doc.body.appendChild(listPickerJsScript); var pagePopupController = {
diff --git a/third_party/WebKit/Source/core/dom/BUILD.gn b/third_party/WebKit/Source/core/dom/BUILD.gn index 18499bd..f8c6ad2d 100644 --- a/third_party/WebKit/Source/core/dom/BUILD.gn +++ b/third_party/WebKit/Source/core/dom/BUILD.gn
@@ -124,6 +124,10 @@ "DocumentParserClient.h", "DocumentParserTiming.cpp", "DocumentParserTiming.h", + "DocumentShutdownNotifier.cpp", + "DocumentShutdownNotifier.h", + "DocumentShutdownObserver.cpp", + "DocumentShutdownObserver.h", "DocumentStatisticsCollector.cpp", "DocumentStatisticsCollector.h", "DocumentStyleSheetCollection.cpp",
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp index fd0f51c..780fc4a 100644 --- a/third_party/WebKit/Source/core/dom/Document.cpp +++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -2636,6 +2636,7 @@ GetPage()->GetEventHandlerRegistry().DocumentDetached(*this); // Signal destruction to mutation observers. + DocumentShutdownNotifier::NotifyContextDestroyed(); SynchronousMutationNotifier::NotifyContextDestroyed(); // If this Document is associated with a live DocumentLoader, the @@ -6855,6 +6856,7 @@ ContainerNode::Trace(visitor); ExecutionContext::Trace(visitor); SecurityContext::Trace(visitor); + DocumentShutdownNotifier::Trace(visitor); SynchronousMutationNotifier::Trace(visitor); }
diff --git a/third_party/WebKit/Source/core/dom/Document.h b/third_party/WebKit/Source/core/dom/Document.h index efed3a4..758c631f 100644 --- a/third_party/WebKit/Source/core/dom/Document.h +++ b/third_party/WebKit/Source/core/dom/Document.h
@@ -38,6 +38,8 @@ #include "core/dom/DocumentEncodingData.h" #include "core/dom/DocumentInit.h" #include "core/dom/DocumentLifecycle.h" +#include "core/dom/DocumentShutdownNotifier.h" +#include "core/dom/DocumentShutdownObserver.h" #include "core/dom/DocumentTiming.h" #include "core/dom/ExecutionContext.h" #include "core/dom/MutationObserver.h" @@ -252,6 +254,7 @@ public TreeScope, public SecurityContext, public ExecutionContext, + public DocumentShutdownNotifier, public SynchronousMutationNotifier, public Supplementable<Document> { DEFINE_WRAPPERTYPEINFO();
diff --git a/third_party/WebKit/Source/core/dom/DocumentShutdownNotifier.cpp b/third_party/WebKit/Source/core/dom/DocumentShutdownNotifier.cpp new file mode 100644 index 0000000..5ebeea36 --- /dev/null +++ b/third_party/WebKit/Source/core/dom/DocumentShutdownNotifier.cpp
@@ -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. + +#include "core/dom/DocumentShutdownNotifier.h" + +#include "core/dom/Document.h" +#include "core/dom/DocumentShutdownObserver.h" + +namespace blink { + +DocumentShutdownNotifier::DocumentShutdownNotifier() = default; + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/DocumentShutdownNotifier.h b/third_party/WebKit/Source/core/dom/DocumentShutdownNotifier.h new file mode 100644 index 0000000..2fc23368 --- /dev/null +++ b/third_party/WebKit/Source/core/dom/DocumentShutdownNotifier.h
@@ -0,0 +1,29 @@ +// 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 DocumentShutdownNotifier_h +#define DocumentShutdownNotifier_h + +#include "core/CoreExport.h" +#include "platform/LifecycleNotifier.h" + +namespace blink { + +class Document; +class DocumentShutdownObserver; + +// Sibling class of DocumentShutdownObserver; implemented by Document to notify +// subclasses of DocumentShutdownObserver of Document shutdown. +class CORE_EXPORT DocumentShutdownNotifier + : public LifecycleNotifier<Document, DocumentShutdownObserver> { + protected: + DocumentShutdownNotifier(); + + private: + DISALLOW_COPY_AND_ASSIGN(DocumentShutdownNotifier); +}; + +} // namespace blink + +#endif // DocumentShutdownNotifier_h
diff --git a/third_party/WebKit/Source/core/dom/DocumentShutdownObserver.cpp b/third_party/WebKit/Source/core/dom/DocumentShutdownObserver.cpp new file mode 100644 index 0000000..4aec88f --- /dev/null +++ b/third_party/WebKit/Source/core/dom/DocumentShutdownObserver.cpp
@@ -0,0 +1,17 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/dom/DocumentShutdownObserver.h" + +#include "core/dom/Document.h" +#include "core/dom/DocumentShutdownNotifier.h" + +namespace blink { + +void DocumentShutdownObserver::ContextDestroyed(Document*) {} + +DocumentShutdownObserver::DocumentShutdownObserver() + : LifecycleObserver(nullptr) {} + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/DocumentShutdownObserver.h b/third_party/WebKit/Source/core/dom/DocumentShutdownObserver.h new file mode 100644 index 0000000..d3e83589 --- /dev/null +++ b/third_party/WebKit/Source/core/dom/DocumentShutdownObserver.h
@@ -0,0 +1,35 @@ +// 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 DocumentShutdownObserver_h +#define DocumentShutdownObserver_h + +#include "core/CoreExport.h" +#include "platform/LifecycleObserver.h" + +namespace blink { + +class Document; + +// This class is a base class for classes which observe Document shutdown +// synchronously. +// Note: this functionality is also provided by SynchronousMutationObserver, +// but if you don't need to respond to the other events handled by that class, +// using this class is more efficient. +class CORE_EXPORT DocumentShutdownObserver + : public LifecycleObserver<Document, DocumentShutdownObserver> { + public: + // Called when detaching document. + virtual void ContextDestroyed(Document*); + + protected: + DocumentShutdownObserver(); + + private: + DISALLOW_COPY_AND_ASSIGN(DocumentShutdownObserver); +}; + +} // namespace blink + +#endif // DocumentShutdownObserver_h
diff --git a/third_party/WebKit/Source/core/dom/DocumentTest.cpp b/third_party/WebKit/Source/core/dom/DocumentTest.cpp index d06b908f..6ebc468 100644 --- a/third_party/WebKit/Source/core/dom/DocumentTest.cpp +++ b/third_party/WebKit/Source/core/dom/DocumentTest.cpp
@@ -249,6 +249,42 @@ SynchronousMutationObserver::Trace(visitor); } +class TestDocumentShutdownObserver + : public GarbageCollectedFinalized<TestDocumentShutdownObserver>, + public DocumentShutdownObserver { + USING_GARBAGE_COLLECTED_MIXIN(TestDocumentShutdownObserver); + + public: + TestDocumentShutdownObserver(Document&); + virtual ~TestDocumentShutdownObserver() = default; + + int CountContextDestroyedCalled() const { + return context_destroyed_called_counter_; + } + + DECLARE_TRACE(); + + private: + // Implement |DocumentShutdownObserver| member functions. + void ContextDestroyed(Document*) final; + + int context_destroyed_called_counter_ = 0; + + DISALLOW_COPY_AND_ASSIGN(TestDocumentShutdownObserver); +}; + +TestDocumentShutdownObserver::TestDocumentShutdownObserver(Document& document) { + SetContext(&document); +} + +void TestDocumentShutdownObserver::ContextDestroyed(Document*) { + ++context_destroyed_called_counter_; +} + +DEFINE_TRACE(TestDocumentShutdownObserver) { + DocumentShutdownObserver::Trace(visitor); +} + class MockValidationMessageClient : public GarbageCollectedFinalized<MockValidationMessageClient>, public ValidationMessageClient { @@ -732,6 +768,17 @@ EXPECT_EQ(3u, observer.UpdatedCharacterDataRecords()[3]->new_length_); } +TEST_F(DocumentTest, DocumentShutdownNotifier) { + auto& observer = *new TestDocumentShutdownObserver(GetDocument()); + + EXPECT_EQ(GetDocument(), observer.LifecycleContext()); + EXPECT_EQ(0, observer.CountContextDestroyedCalled()); + + GetDocument().Shutdown(); + EXPECT_EQ(nullptr, observer.LifecycleContext()); + EXPECT_EQ(1, observer.CountContextDestroyedCalled()); +} + // This tests that meta-theme-color can be found correctly TEST_F(DocumentTest, ThemeColor) { {
diff --git a/third_party/WebKit/Source/core/dom/SynchronousMutationObserver.h b/third_party/WebKit/Source/core/dom/SynchronousMutationObserver.h index 63e3865..bcfdfa0 100644 --- a/third_party/WebKit/Source/core/dom/SynchronousMutationObserver.h +++ b/third_party/WebKit/Source/core/dom/SynchronousMutationObserver.h
@@ -20,6 +20,9 @@ // This class is a base class for classes which observe DOM tree mutation // synchronously. If you want to observe DOM tree mutation asynchronously see // MutationObserver Web API. +// Note: if you only need to observe Document shutdown, +// DocumentShutdownObserver provides this same functionality more efficiently +// (since it doesn't observe the other events). // // TODO(yosin): Following classes should be derived from this class to // simplify Document class.
diff --git a/third_party/WebKit/Source/core/editing/BUILD.gn b/third_party/WebKit/Source/core/editing/BUILD.gn index 8e0ef90..6293673 100644 --- a/third_party/WebKit/Source/core/editing/BUILD.gn +++ b/third_party/WebKit/Source/core/editing/BUILD.gn
@@ -91,6 +91,7 @@ "VisibleUnitsParagraph.cpp", "VisibleUnitsSentence.cpp", "VisibleUnitsWord.cpp", + "WebSubstringUtil.mm", "WritingDirection.h", "commands/AppendNodeCommand.cpp", "commands/AppendNodeCommand.h",
diff --git a/third_party/WebKit/Source/web/mac/WebSubstringUtil.mm b/third_party/WebKit/Source/core/editing/WebSubstringUtil.mm similarity index 98% rename from third_party/WebKit/Source/web/mac/WebSubstringUtil.mm rename to third_party/WebKit/Source/core/editing/WebSubstringUtil.mm index 1c5cfec..e892011 100644 --- a/third_party/WebKit/Source/web/mac/WebSubstringUtil.mm +++ b/third_party/WebKit/Source/core/editing/WebSubstringUtil.mm
@@ -101,9 +101,8 @@ // to use the font. // TODO(shuchen): Support scaling the font as necessary according to CSS // transforms, not just pinch-zoom. - if (!font || - floor(fontPlatformData.size()) != - floor([[font fontDescriptor] pointSize])) { + if (!font || floor(fontPlatformData.size()) != + floor([[font fontDescriptor] pointSize])) { font = [NSFont systemFontOfSize:style->GetFont() .GetFontDescription() .ComputedSize() *
diff --git a/third_party/WebKit/Source/web/resources/.clang-format b/third_party/WebKit/Source/core/html/forms/resources/.clang-format similarity index 100% rename from third_party/WebKit/Source/web/resources/.clang-format rename to third_party/WebKit/Source/core/html/forms/resources/.clang-format
diff --git a/third_party/WebKit/Source/web/resources/calendarPicker.css b/third_party/WebKit/Source/core/html/forms/resources/calendarPicker.css similarity index 100% rename from third_party/WebKit/Source/web/resources/calendarPicker.css rename to third_party/WebKit/Source/core/html/forms/resources/calendarPicker.css
diff --git a/third_party/WebKit/Source/web/resources/calendarPicker.js b/third_party/WebKit/Source/core/html/forms/resources/calendarPicker.js similarity index 100% rename from third_party/WebKit/Source/web/resources/calendarPicker.js rename to third_party/WebKit/Source/core/html/forms/resources/calendarPicker.js
diff --git a/third_party/WebKit/Source/web/resources/colorSuggestionPicker.css b/third_party/WebKit/Source/core/html/forms/resources/colorSuggestionPicker.css similarity index 100% rename from third_party/WebKit/Source/web/resources/colorSuggestionPicker.css rename to third_party/WebKit/Source/core/html/forms/resources/colorSuggestionPicker.css
diff --git a/third_party/WebKit/Source/web/resources/colorSuggestionPicker.js b/third_party/WebKit/Source/core/html/forms/resources/colorSuggestionPicker.js similarity index 100% rename from third_party/WebKit/Source/web/resources/colorSuggestionPicker.js rename to third_party/WebKit/Source/core/html/forms/resources/colorSuggestionPicker.js
diff --git a/third_party/WebKit/Source/web/resources/listPicker.css b/third_party/WebKit/Source/core/html/forms/resources/listPicker.css similarity index 100% rename from third_party/WebKit/Source/web/resources/listPicker.css rename to third_party/WebKit/Source/core/html/forms/resources/listPicker.css
diff --git a/third_party/WebKit/Source/web/resources/listPicker.js b/third_party/WebKit/Source/core/html/forms/resources/listPicker.js similarity index 100% rename from third_party/WebKit/Source/web/resources/listPicker.js rename to third_party/WebKit/Source/core/html/forms/resources/listPicker.js
diff --git a/third_party/WebKit/Source/web/resources/pickerButton.css b/third_party/WebKit/Source/core/html/forms/resources/pickerButton.css similarity index 100% rename from third_party/WebKit/Source/web/resources/pickerButton.css rename to third_party/WebKit/Source/core/html/forms/resources/pickerButton.css
diff --git a/third_party/WebKit/Source/web/resources/pickerCommon.css b/third_party/WebKit/Source/core/html/forms/resources/pickerCommon.css similarity index 100% rename from third_party/WebKit/Source/web/resources/pickerCommon.css rename to third_party/WebKit/Source/core/html/forms/resources/pickerCommon.css
diff --git a/third_party/WebKit/Source/web/resources/pickerCommon.js b/third_party/WebKit/Source/core/html/forms/resources/pickerCommon.js similarity index 100% rename from third_party/WebKit/Source/web/resources/pickerCommon.js rename to third_party/WebKit/Source/core/html/forms/resources/pickerCommon.js
diff --git a/third_party/WebKit/Source/web/resources/suggestionPicker.css b/third_party/WebKit/Source/core/html/forms/resources/suggestionPicker.css similarity index 100% rename from third_party/WebKit/Source/web/resources/suggestionPicker.css rename to third_party/WebKit/Source/core/html/forms/resources/suggestionPicker.css
diff --git a/third_party/WebKit/Source/web/resources/suggestionPicker.js b/third_party/WebKit/Source/core/html/forms/resources/suggestionPicker.js similarity index 100% rename from third_party/WebKit/Source/web/resources/suggestionPicker.js rename to third_party/WebKit/Source/core/html/forms/resources/suggestionPicker.js
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp index 63891ab..1b0e7390 100644 --- a/third_party/WebKit/Source/core/input/EventHandler.cpp +++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -238,7 +238,6 @@ scroll_manager_->Clear(); gesture_manager_->Clear(); mouse_event_manager_->Clear(); - mouse_wheel_event_manager_->Clear(); last_deferred_tap_element_ = nullptr; event_handler_will_reset_capturing_mouse_events_node_ = false; }
diff --git a/third_party/WebKit/Source/core/input/MouseWheelEventManager.cpp b/third_party/WebKit/Source/core/input/MouseWheelEventManager.cpp index 6a8a308..e830907 100644 --- a/third_party/WebKit/Source/core/input/MouseWheelEventManager.cpp +++ b/third_party/WebKit/Source/core/input/MouseWheelEventManager.cpp
@@ -18,100 +18,37 @@ namespace blink { MouseWheelEventManager::MouseWheelEventManager(LocalFrame& frame, ScrollManager& scroll_manager) - : frame_(frame), wheel_target_(nullptr), scroll_manager_(scroll_manager) {} + : frame_(frame), scroll_manager_(scroll_manager) {} DEFINE_TRACE(MouseWheelEventManager) { visitor->Trace(frame_); - visitor->Trace(wheel_target_); visitor->Trace(scroll_manager_); } -void MouseWheelEventManager::Clear() { - wheel_target_ = nullptr; -} - WebInputEventResult MouseWheelEventManager::HandleWheelEvent( const WebMouseWheelEvent& event) { - bool wheel_scroll_latching = - RuntimeEnabledFeatures::TouchpadAndWheelScrollLatchingEnabled(); - +#if OS(MACOSX) + // Filter Mac OS specific phases, usually with a zero-delta. + // https://crbug.com/553732 + // TODO(chongz): EventSender sends events with + // |WebMouseWheelEvent::PhaseNone|, + // but it shouldn't. + const int kWheelEventPhaseNoEventMask = WebMouseWheelEvent::kPhaseEnded | + WebMouseWheelEvent::kPhaseCancelled | + WebMouseWheelEvent::kPhaseMayBegin; + if ((event.phase & kWheelEventPhaseNoEventMask) || + (event.momentum_phase & kWheelEventPhaseNoEventMask)) + return WebInputEventResult::kNotHandled; +#endif Document* doc = frame_->GetDocument(); - if (!doc || doc->GetLayoutViewItem().IsNull()) + + if (doc->GetLayoutViewItem().IsNull()) return WebInputEventResult::kNotHandled; LocalFrameView* view = frame_->View(); if (!view) return WebInputEventResult::kNotHandled; - if (wheel_scroll_latching) { - const int kWheelEventPhaseEndedEventMask = - WebMouseWheelEvent::kPhaseEnded | WebMouseWheelEvent::kPhaseCancelled; - const int kWheelEventPhaseNoEventMask = - kWheelEventPhaseEndedEventMask | WebMouseWheelEvent::kPhaseMayBegin; - - if ((event.phase & kWheelEventPhaseEndedEventMask) || - (event.momentum_phase & kWheelEventPhaseEndedEventMask)) { - wheel_target_ = nullptr; - } - - if ((event.phase & kWheelEventPhaseNoEventMask) || - (event.momentum_phase & kWheelEventPhaseNoEventMask)) { - // Filter wheel events with zero deltas and reset the wheel_target_ node. - DCHECK(!event.delta_x && !event.delta_y); - return WebInputEventResult::kNotHandled; - } - - if (event.phase == WebMouseWheelEvent::kPhaseBegan) { - // Find and save the wheel_target_, this target will be used for the rest - // of the current scrolling sequence. - DCHECK(!wheel_target_); - wheel_target_ = FindTargetNode(event, doc, view); - } - } else { // !wheel_scroll_latching, wheel_target_ will be updated for each - // wheel event. -#if OS(MACOSX) - // Filter Mac OS specific phases, usually with a zero-delta. - // https://crbug.com/553732 - // TODO(chongz): EventSender sends events with - // |WebMouseWheelEvent::PhaseNone|, - // but it shouldn't. - const int kWheelEventPhaseNoEventMask = - WebMouseWheelEvent::kPhaseEnded | WebMouseWheelEvent::kPhaseCancelled | - WebMouseWheelEvent::kPhaseMayBegin; - if ((event.phase & kWheelEventPhaseNoEventMask) || - (event.momentum_phase & kWheelEventPhaseNoEventMask)) - return WebInputEventResult::kNotHandled; -#endif - - wheel_target_ = FindTargetNode(event, doc, view); - } - - LocalFrame* subframe = - EventHandlingUtil::SubframeForTargetNode(wheel_target_.Get()); - if (subframe) { - WebInputEventResult result = - subframe->GetEventHandler().HandleWheelEvent(event); - if (result != WebInputEventResult::kNotHandled) - scroll_manager_->SetFrameWasScrolledByUser(); - return result; - } - - if (wheel_target_) { - WheelEvent* dom_event = - WheelEvent::Create(event, wheel_target_->GetDocument().domWindow()); - DispatchEventResult dom_event_result = - wheel_target_->DispatchEvent(dom_event); - if (dom_event_result != DispatchEventResult::kNotCanceled) - return EventHandlingUtil::ToWebInputEventResult(dom_event_result); - } - - return WebInputEventResult::kNotHandled; -} - -Node* MouseWheelEventManager::FindTargetNode(const WebMouseWheelEvent& event, - const Document* doc, - const LocalFrameView* view) { - DCHECK(doc && !doc->GetLayoutViewItem().IsNull() && view); LayoutPoint v_point = view->RootFrameToContents(FlooredIntPoint(event.PositionInRootFrame())); @@ -128,7 +65,24 @@ if (!node && result.GetScrollbar()) node = doc->documentElement(); - return node; + LocalFrame* subframe = EventHandlingUtil::SubframeForTargetNode(node); + if (subframe) { + WebInputEventResult result = + subframe->GetEventHandler().HandleWheelEvent(event); + if (result != WebInputEventResult::kNotHandled) + scroll_manager_->SetFrameWasScrolledByUser(); + return result; + } + + if (node) { + WheelEvent* dom_event = + WheelEvent::Create(event, node->GetDocument().domWindow()); + DispatchEventResult dom_event_result = node->DispatchEvent(dom_event); + if (dom_event_result != DispatchEventResult::kNotCanceled) + return EventHandlingUtil::ToWebInputEventResult(dom_event_result); + } + + return WebInputEventResult::kNotHandled; } } // namespace blink
diff --git a/third_party/WebKit/Source/core/input/MouseWheelEventManager.h b/third_party/WebKit/Source/core/input/MouseWheelEventManager.h index 809ed02..ecf2e5ae 100644 --- a/third_party/WebKit/Source/core/input/MouseWheelEventManager.h +++ b/third_party/WebKit/Source/core/input/MouseWheelEventManager.h
@@ -11,10 +11,7 @@ namespace blink { -class Document; class LocalFrame; -class LocalFrameView; -class Node; class ScrollManager; class WebMouseWheelEvent; @@ -26,17 +23,10 @@ explicit MouseWheelEventManager(LocalFrame&, ScrollManager&); DECLARE_TRACE(); - void Clear(); - WebInputEventResult HandleWheelEvent(const WebMouseWheelEvent&); private: - Node* FindTargetNode(const WebMouseWheelEvent&, - const Document*, - const LocalFrameView*); - const Member<LocalFrame> frame_; - Member<Node> wheel_target_; Member<ScrollManager> scroll_manager_; };
diff --git a/third_party/WebKit/Source/core/layout/BUILD.gn b/third_party/WebKit/Source/core/layout/BUILD.gn index cdd6c4aaf..19144509 100644 --- a/third_party/WebKit/Source/core/layout/BUILD.gn +++ b/third_party/WebKit/Source/core/layout/BUILD.gn
@@ -462,6 +462,7 @@ "LayoutThemeFontProviderWin.cpp", "LayoutThemeWin.cpp", "LayoutThemeWin.h", + "WebFontRenderingWin.cpp", ] } else { # Not Windows. sources += [ "LayoutThemeFontProviderDefault.cpp" ] @@ -471,6 +472,7 @@ sources += [ "LayoutThemeLinux.cpp", "LayoutThemeLinux.h", + "WebFontRenderingLinux.cpp", ] } @@ -478,6 +480,7 @@ sources += [ "LayoutThemeAndroid.cpp", "LayoutThemeAndroid.h", + "WebFontRenderingAndroid.cpp", ] }
diff --git a/third_party/WebKit/Source/web/linux/WebFontRendering.cpp b/third_party/WebKit/Source/core/layout/WebFontRenderingAndroid.cpp similarity index 100% copy from third_party/WebKit/Source/web/linux/WebFontRendering.cpp copy to third_party/WebKit/Source/core/layout/WebFontRenderingAndroid.cpp
diff --git a/third_party/WebKit/Source/web/linux/WebFontRendering.cpp b/third_party/WebKit/Source/core/layout/WebFontRenderingLinux.cpp similarity index 100% rename from third_party/WebKit/Source/web/linux/WebFontRendering.cpp rename to third_party/WebKit/Source/core/layout/WebFontRenderingLinux.cpp
diff --git a/third_party/WebKit/Source/web/win/WebFontRendering.cpp b/third_party/WebKit/Source/core/layout/WebFontRenderingWin.cpp similarity index 100% rename from third_party/WebKit/Source/web/win/WebFontRendering.cpp rename to third_party/WebKit/Source/core/layout/WebFontRenderingWin.cpp
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc index 8af4036e..f0f2bcd 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
@@ -228,8 +228,9 @@ if (Style().SpecifiesColumns()) return false; - if (!box_->IsLayoutBlockFlow()) + if (!box_->IsLayoutNGBlockFlow()) return false; + return RuntimeEnabledFeatures::LayoutNGEnabled(); }
diff --git a/third_party/WebKit/Source/core/page/PrintContextTest.cpp b/third_party/WebKit/Source/core/page/PrintContextTest.cpp index 98a7ec6..69f59f7 100644 --- a/third_party/WebKit/Source/core/page/PrintContextTest.cpp +++ b/third_party/WebKit/Source/core/page/PrintContextTest.cpp
@@ -95,7 +95,7 @@ page_rect); GetPrintContext().OutputLinkedDestinations(context, page_rect); } - builder.EndRecording()->playback(&canvas); + builder.EndRecording()->Playback(&canvas); GetPrintContext().EndPrintMode(); }
diff --git a/third_party/WebKit/Source/core/testing/sim/SimDisplayItemList.cpp b/third_party/WebKit/Source/core/testing/sim/SimDisplayItemList.cpp index 8ebdbb6..0d2b790 100644 --- a/third_party/WebKit/Source/core/testing/sim/SimDisplayItemList.cpp +++ b/third_party/WebKit/Source/core/testing/sim/SimDisplayItemList.cpp
@@ -17,7 +17,7 @@ sk_sp<const PaintRecord> record, const WebRect& record_bounds) { SimCanvas canvas(record_bounds.width, record_bounds.height); - record->playback(&canvas); + record->Playback(&canvas); commands_.Append(canvas.Commands().data(), canvas.Commands().size()); }
diff --git a/third_party/WebKit/Source/devtools/front_end/network/RequestPreviewView.js b/third_party/WebKit/Source/devtools/front_end/network/RequestPreviewView.js index ef1cad37..c99d068 100644 --- a/third_party/WebKit/Source/devtools/front_end/network/RequestPreviewView.js +++ b/third_party/WebKit/Source/devtools/front_end/network/RequestPreviewView.js
@@ -52,6 +52,7 @@ this._emptyWidget = this._createEmptyWidget(); this._emptyWidget.show(this.element); this._previewView = this._emptyWidget; + this._previewViewHandledForTest(this._previewView); } return; }
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js index f888690b..b27e2c5e 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js
@@ -74,6 +74,21 @@ } /** + * @param {!SDK.NetworkRequest} request + * @return {!Promise<!SDK.NetworkRequest.ContentData>} + */ + static async requestContentData(request) { + if (request.resourceType() === Common.resourceTypes.WebSocket) + return {error: 'Content for WebSockets is currently not supported', content: null, encoded: false}; + if (!request.finished) + await request.once(SDK.NetworkRequest.Events.FinishedLoading); + var manager = request.networkManager(); + var response = await manager._networkAgent.invoke_getResponseBody({requestId: request.requestId()}); + var error = response[Protocol.Error] || null; + return {error: error, content: error ? null : response.body, encoded: response.base64Encoded}; + } + + /** * @param {!SDK.NetworkManager.Conditions} conditions * @return {!Protocol.Network.ConnectionType} * TODO(allada): this belongs to NetworkConditionsSelector, which should hardcode/guess it.
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkRequest.js b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkRequest.js index b6c8a31..7de550b 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkRequest.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkRequest.js
@@ -73,6 +73,7 @@ /** @type {!Common.ResourceType} */ this._resourceType = Common.resourceTypes.Other; + // TODO(allada) Migrate everything away from this and remove it. this._contentEncoded = false; this._pendingContentCallbacks = []; /** @type {!Array.<!SDK.NetworkRequest.WebSocketFrame>} */ @@ -365,11 +366,8 @@ this._finished = x; - if (x) { + if (x) this.dispatchEventToListeners(SDK.NetworkRequest.Events.FinishedLoading, this); - if (this._pendingContentCallbacks.length) - this._innerRequestContent(); - } } /** @@ -865,6 +863,7 @@ return values.join(', '); } + // TODO(allada) Migrate everything away from using this function and use .contentData() instead. /** * @return {?string|undefined} */ @@ -872,6 +871,7 @@ return this._content; } + // TODO(allada) Migrate everything away from using this function and use .contentData() instead. /** * @return {?Protocol.Error|undefined} */ @@ -879,6 +879,7 @@ return this._contentError; } + // TODO(allada) Migrate everything away from using this function and use .contentData() instead. /** * @return {boolean} */ @@ -887,6 +888,16 @@ } /** + * @return {!Promise<!SDK.NetworkRequest.ContentData>} + */ + contentData() { + if (this._contentData) + return this._contentData; + this._contentData = SDK.NetworkManager.requestContentData(this); + return this._contentData; + } + + /** * @override * @return {string} */ @@ -906,20 +917,13 @@ * @override * @return {!Promise<?string>} */ - requestContent() { - // We do not support content retrieval for WebSockets at the moment. - // Since WebSockets are potentially long-living, fail requests immediately - // to prevent caller blocking until resource is marked as finished. - if (this._resourceType === Common.resourceTypes.WebSocket) - return Promise.resolve(/** @type {?string} */ (null)); - if (typeof this._content !== 'undefined') - return Promise.resolve(/** @type {?string} */ (this.content || null)); - var callback; - var promise = new Promise(fulfill => callback = fulfill); - this._pendingContentCallbacks.push(callback); - if (this.finished) - this._innerRequestContent(); - return promise; + async requestContent() { + var contentData = await this.contentData(); + // TODO(allada) Migrate away from anyone using .content, .contentError and .contentEncoded. + this._content = contentData.content; + this._contentError = contentData.error; + this._contentEncoded = contentData.encoded; + return contentData.content; } /** @@ -1000,6 +1004,7 @@ this.requestContent().then(onResourceContent.bind(this)); } + // TODO(allada) Migrate this function to use .contentData() instead. /** * @return {?string} */ @@ -1013,22 +1018,6 @@ return Common.ContentProvider.contentAsDataURL(content, this.mimeType, true, charset); } - async _innerRequestContent() { - if (this._contentRequested) - return; - this._contentRequested = true; - - var response = - await this._networkManager.target().networkAgent().invoke_getResponseBody({requestId: this._requestId}); - - this._content = response[Protocol.Error] ? null : response.body; - this._contentError = response[Protocol.Error]; - this._contentEncoded = response.base64Encoded; - for (var callback of this._pendingContentCallbacks.splice(0)) - callback(this._content); - delete this._contentRequested; - } - /** * @return {?Protocol.Network.Initiator} */ @@ -1143,3 +1132,6 @@ /** @typedef {!{time: number, eventName: string, eventId: string, data: string}} */ SDK.NetworkRequest.EventSourceMessage; + +/** @typedef {!{error: ?string, content: ?string, encoded: boolean}} */ +SDK.NetworkRequest.ContentData;
diff --git a/third_party/WebKit/Source/modules/exported/OWNERS b/third_party/WebKit/Source/modules/exported/OWNERS new file mode 100644 index 0000000..e67a8c32 --- /dev/null +++ b/third_party/WebKit/Source/modules/exported/OWNERS
@@ -0,0 +1 @@ +kinuko@chromium.org
diff --git a/third_party/WebKit/Source/platform/BUILD.gn b/third_party/WebKit/Source/platform/BUILD.gn index aac5578..1f3e9914 100644 --- a/third_party/WebKit/Source/platform/BUILD.gn +++ b/third_party/WebKit/Source/platform/BUILD.gn
@@ -727,6 +727,8 @@ "fonts/opentype/OpenTypeTypes.h", "fonts/opentype/OpenTypeVerticalData.cpp", "fonts/opentype/OpenTypeVerticalData.h", + "fonts/opentype/VariableFontCheck.cpp", + "fonts/opentype/VariableFontCheck.h", "fonts/shaping/CachingWordShapeIterator.cpp", "fonts/shaping/CachingWordShapeIterator.h", "fonts/shaping/CachingWordShaper.cpp", @@ -1396,6 +1398,7 @@ "scroll/ScrollbarThemeOverlayMock.h", "scroll/SmoothScrollSequencer.cpp", "scroll/SmoothScrollSequencer.h", + "scroll/WebScrollbarTheme.mm", "speech/PlatformSpeechSynthesisUtterance.cpp", "speech/PlatformSpeechSynthesisUtterance.h", "speech/PlatformSpeechSynthesisVoice.cpp",
diff --git a/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.cpp b/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.cpp index 0a6c835..017019b 100644 --- a/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.cpp +++ b/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.cpp
@@ -35,19 +35,14 @@ void ReverbInputBuffer::Write(const float* source_p, size_t number_of_frames) { size_t buffer_length = buffer_.size(); - bool is_copy_safe = write_index_ + number_of_frames <= buffer_length; - DCHECK(is_copy_safe); - if (!is_copy_safe) - return; + size_t index = WriteIndex(); + size_t new_index = index + number_of_frames; - memcpy(buffer_.Data() + write_index_, source_p, - sizeof(float) * number_of_frames); + CHECK_LE(new_index, buffer_length); - write_index_ += number_of_frames; - DCHECK_LE(write_index_, buffer_length); + memcpy(buffer_.Data() + index, source_p, sizeof(float) * number_of_frames); - if (write_index_ >= buffer_length) - write_index_ = 0; + SetWriteIndex(new_index); } float* ReverbInputBuffer::DirectReadFrom(int* read_index, @@ -75,7 +70,7 @@ void ReverbInputBuffer::Reset() { buffer_.Zero(); - write_index_ = 0; + SetWriteIndex(0); } } // namespace blink
diff --git a/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.h b/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.h index e50602c..d6c5008 100644 --- a/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.h +++ b/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.h
@@ -32,6 +32,7 @@ #include "platform/PlatformExport.h" #include "platform/audio/AudioArray.h" #include "platform/wtf/Allocator.h" +#include "platform/wtf/Atomics.h" #include "platform/wtf/Noncopyable.h" namespace blink { @@ -52,7 +53,8 @@ void Write(const float* source_p, size_t number_of_frames); // Background threads can call this to check if there's anything to read... - size_t WriteIndex() const { return write_index_; } + size_t WriteIndex() const { return AcquireLoad(&write_index_); } + void SetWriteIndex(size_t value) { ReleaseStore(&write_index_, value); } // The individual background threads read here (and hope that they can keep up // with the buffer writing). @@ -66,6 +68,10 @@ private: AudioFloatArray buffer_; + + // write_index_ can be accessed from several threads. Only use the + // getter and the setter to access it atomically. Don't access + // write_index_ directly! size_t write_index_; };
diff --git a/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.cpp b/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.cpp index 2307530..af4daa3 100644 --- a/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.cpp +++ b/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.cpp
@@ -41,6 +41,7 @@ #include "platform/fonts/mac/CoreTextVariationsSupport.h" #endif #include "platform/fonts/opentype/FontSettings.h" +#include "platform/fonts/opentype/VariableFontCheck.h" #include "third_party/skia/include/core/SkStream.h" #include "third_party/skia/include/core/SkTypeface.h" #if OS(WIN) || OS(MACOSX) @@ -74,7 +75,7 @@ // now, going with a reasonable upper limit. Deduplication is // handled by Skia with priority given to the last occuring // assignment. - if (variation_settings && variation_settings->size() < UINT16_MAX) { + if (VariableFontCheck::IsVariableFont(base_typeface_.get())) { #if OS(WIN) sk_sp<SkFontMgr> fm(SkFontMgr_New_Custom_Empty()); #elif OS(MACOSX) @@ -87,12 +88,15 @@ sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault()); #endif Vector<SkFontMgr::FontParameters::Axis, 0> axes; - axes.ReserveCapacity(variation_settings->size()); - for (size_t i = 0; i < variation_settings->size(); ++i) { - SkFontMgr::FontParameters::Axis axis = { - AtomicStringToFourByteTag(variation_settings->at(i).Tag()), - SkFloatToScalar(variation_settings->at(i).Value())}; - axes.push_back(axis); + + if (variation_settings && variation_settings->size() < UINT16_MAX) { + axes.ReserveCapacity(variation_settings->size()); + for (size_t i = 0; i < variation_settings->size(); ++i) { + SkFontMgr::FontParameters::Axis axis = { + AtomicStringToFourByteTag(variation_settings->at(i).Tag()), + SkFloatToScalar(variation_settings->at(i).Value())}; + axes.push_back(axis); + } } sk_sp<SkTypeface> sk_variation_font(fm->createFromStream(
diff --git a/third_party/WebKit/Source/platform/fonts/opentype/VariableFontCheck.cpp b/third_party/WebKit/Source/platform/fonts/opentype/VariableFontCheck.cpp new file mode 100644 index 0000000..f948a6a --- /dev/null +++ b/third_party/WebKit/Source/platform/fonts/opentype/VariableFontCheck.cpp
@@ -0,0 +1,21 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "platform/fonts/opentype/VariableFontCheck.h" + +#include "SkTypeface.h" +#include "platform/wtf/Vector.h" + +namespace blink { + +bool VariableFontCheck::IsVariableFont(SkTypeface* typeface) { + const size_t table_count = typeface->countTables(); + Vector<SkFontTableTag> table_tags; + table_tags.resize(table_count); + int table_tags_result = typeface->getTableTags(table_tags.data()); + return table_tags_result && table_tags.Contains(SkFontTableTag( + SkSetFourByteTag('f', 'v', 'a', 'r'))); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/fonts/opentype/VariableFontCheck.h b/third_party/WebKit/Source/platform/fonts/opentype/VariableFontCheck.h new file mode 100644 index 0000000..e78fc54 --- /dev/null +++ b/third_party/WebKit/Source/platform/fonts/opentype/VariableFontCheck.h
@@ -0,0 +1,19 @@ +// 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 VariableFontCheck_h +#define VariableFontCheck_h + +class SkTypeface; + +namespace blink { + +class VariableFontCheck { + public: + static bool IsVariableFont(SkTypeface*); +}; + +} // namespace blink + +#endif
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp index 25f2f6c..b2343ea 100644 --- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp +++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
@@ -791,7 +791,7 @@ canvas = color_transform_canvas.get(); } - recorder_->finishRecordingAsPicture()->playback(canvas); + recorder_->finishRecordingAsPicture()->Playback(canvas); if (is_deferral_enabled_) StartRecording(); have_recorded_draw_commands_ = false;
diff --git a/third_party/WebKit/Source/platform/graphics/LoggingCanvas.cpp b/third_party/WebKit/Source/platform/graphics/LoggingCanvas.cpp index 818fda7..e8eb870f 100644 --- a/third_party/WebKit/Source/platform/graphics/LoggingCanvas.cpp +++ b/third_party/WebKit/Source/platform/graphics/LoggingCanvas.cpp
@@ -910,7 +910,7 @@ String RecordAsDebugString(const PaintRecord* record, const SkRect& bounds) { const SkIRect enclosing_bounds = bounds.roundOut(); LoggingCanvas canvas(enclosing_bounds.width(), enclosing_bounds.height()); - record->playback(&canvas); + record->Playback(&canvas); std::unique_ptr<JSONObject> record_as_json = JSONObject::Create(); record_as_json->SetObject("cullRect", ObjectForSkRect(bounds)); record_as_json->SetArray("operations", canvas.Log());
diff --git a/third_party/WebKit/Source/web/mac/WebScrollbarTheme.mm b/third_party/WebKit/Source/platform/scroll/WebScrollbarTheme.mm similarity index 97% rename from third_party/WebKit/Source/web/mac/WebScrollbarTheme.mm rename to third_party/WebKit/Source/platform/scroll/WebScrollbarTheme.mm index 5078b9a..3f54fdb 100644 --- a/third_party/WebKit/Source/web/mac/WebScrollbarTheme.mm +++ b/third_party/WebKit/Source/platform/scroll/WebScrollbarTheme.mm
@@ -28,7 +28,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "public/web/mac/WebScrollbarTheme.h" +#include "public/platform/mac/WebScrollbarTheme.h" #import <AppKit/AppKit.h>
diff --git a/third_party/WebKit/Source/web/BUILD.gn b/third_party/WebKit/Source/web/BUILD.gn index 8ecaafd..3b8b0a1 100644 --- a/third_party/WebKit/Source/web/BUILD.gn +++ b/third_party/WebKit/Source/web/BUILD.gn
@@ -80,18 +80,8 @@ "WebSurroundingText.cpp", "WebViewImpl.cpp", "WebViewImpl.h", - "linux/WebFontRendering.cpp", - "mac/WebScrollbarTheme.mm", - "mac/WebSubstringUtil.mm", - "win/WebFontRendering.cpp", ] - if (is_android) { - set_sources_assignment_filter([]) - sources += [ "linux/WebFontRendering.cpp" ] - set_sources_assignment_filter(sources_assignment_filter) - } - if (is_mac) { libs = [ "AppKit.framework",
diff --git a/third_party/WebKit/Source/web/PageOverlayTest.cpp b/third_party/WebKit/Source/web/PageOverlayTest.cpp index 078be62..05d43be 100644 --- a/third_party/WebKit/Source/web/PageOverlayTest.cpp +++ b/third_party/WebKit/Source/web/PageOverlayTest.cpp
@@ -146,7 +146,7 @@ GraphicsContext graphics_context(paint_controller); graphics_context.BeginRecording(int_rect); paint_controller.GetPaintArtifact().Replay(int_rect, graphics_context); - graphics_context.EndRecording()->playback(&canvas); + graphics_context.EndRecording()->Playback(&canvas); } TEST_F(PageOverlayTest, PageOverlay_VisualRect) {
diff --git a/third_party/WebKit/Source/web/resources/OWNERS b/third_party/WebKit/Source/web/resources/OWNERS deleted file mode 100644 index 53439ec87..0000000 --- a/third_party/WebKit/Source/web/resources/OWNERS +++ /dev/null
@@ -1,5 +0,0 @@ -keishi@chromium.org -tkent@chromium.org - -# TEAM: dom-dev@chromium.org -# COMPONENT: Blink>Forms
diff --git a/third_party/WebKit/Source/web/tests/WebViewTest.cpp b/third_party/WebKit/Source/web/tests/WebViewTest.cpp index b53d750b..accdbfd 100644 --- a/third_party/WebKit/Source/web/tests/WebViewTest.cpp +++ b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
@@ -502,7 +502,7 @@ PaintLayerPainter(*root_layer) .PaintLayerContents(builder.Context(), painting_info, kPaintLayerPaintingCompositingAllPhases); - builder.EndRecording()->playback(&canvas); + builder.EndRecording()->Playback(&canvas); // The result should be a blend of red and green. SkColor color = bitmap.getColor(kWidth / 2, kHeight / 2);
diff --git a/third_party/WebKit/public/BUILD.gn b/third_party/WebKit/public/BUILD.gn index a4ea98d..4fbfdced 100644 --- a/third_party/WebKit/public/BUILD.gn +++ b/third_party/WebKit/public/BUILD.gn
@@ -361,6 +361,7 @@ "platform/linux/WebFontRenderStyle.h", "platform/linux/WebSandboxSupport.h", "platform/mac/WebSandboxSupport.h", + "platform/mac/WebScrollbarTheme.h", "platform/modules/background_fetch/WebBackgroundFetchSettledFetch.h", "platform/modules/device_orientation/WebDeviceMotionListener.h", "platform/modules/device_orientation/WebDeviceOrientationListener.h", @@ -609,7 +610,6 @@ "web/WebWidgetClient.h", "web/WebWindowFeatures.h", "web/linux/WebFontRendering.h", - "web/mac/WebScrollbarTheme.h", "web/mac/WebSubstringUtil.h", "web/mac/WebSubstringUtil.h", "web/modules/password_manager/WebFormElementObserver.h",
diff --git a/third_party/WebKit/public/blink_resources.grd b/third_party/WebKit/public/blink_resources.grd index fd8e780..f975805 100644 --- a/third_party/WebKit/public/blink_resources.grd +++ b/third_party/WebKit/public/blink_resources.grd
@@ -34,17 +34,17 @@ <include name="IDR_DOCUMENTXMLTREEVIEWER_CSS" file="../Source/core/xml/DocumentXMLTreeViewer.css" type="BINDATA" compress="gzip"/> <include name="IDR_DOCUMENTXMLTREEVIEWER_JS" file="../Source/core/xml/DocumentXMLTreeViewer.js" type="BINDATA" compress="gzip"/> <if expr="not is_android"> - <include name="IDR_PICKER_COMMON_JS" file="../Source/web/resources/pickerCommon.js" type="BINDATA" compress="gzip"/> - <include name="IDR_PICKER_COMMON_CSS" file="../Source/web/resources/pickerCommon.css" type="BINDATA" compress="gzip"/> - <include name="IDR_CALENDAR_PICKER_CSS" file="../Source/web/resources/calendarPicker.css" type="BINDATA" compress="gzip"/> - <include name="IDR_CALENDAR_PICKER_JS" file="../Source/web/resources/calendarPicker.js" type="BINDATA" compress="gzip"/> - <include name="IDR_PICKER_BUTTON_CSS" file="../Source/web/resources/pickerButton.css" type="BINDATA" compress="gzip"/> - <include name="IDR_SUGGESTION_PICKER_CSS" file="../Source/web/resources/suggestionPicker.css" type="BINDATA" compress="gzip"/> - <include name="IDR_SUGGESTION_PICKER_JS" file="../Source/web/resources/suggestionPicker.js" type="BINDATA" compress="gzip"/> - <include name="IDR_COLOR_SUGGESTION_PICKER_CSS" file="../Source/web/resources/colorSuggestionPicker.css" type="BINDATA" compress="gzip"/> - <include name="IDR_COLOR_SUGGESTION_PICKER_JS" file="../Source/web/resources/colorSuggestionPicker.js" type="BINDATA" compress="gzip"/> - <include name="IDR_LIST_PICKER_CSS" file="../Source/web/resources/listPicker.css" type="BINDATA" compress="gzip"/> - <include name="IDR_LIST_PICKER_JS" file="../Source/web/resources/listPicker.js" type="BINDATA" compress="gzip"/> + <include name="IDR_PICKER_COMMON_JS" file="../Source/core/html/forms/resources/pickerCommon.js" type="BINDATA" compress="gzip"/> + <include name="IDR_PICKER_COMMON_CSS" file="../Source/core/html/forms/resources/pickerCommon.css" type="BINDATA" compress="gzip"/> + <include name="IDR_CALENDAR_PICKER_CSS" file="../Source/core/html/forms/resources/calendarPicker.css" type="BINDATA" compress="gzip"/> + <include name="IDR_CALENDAR_PICKER_JS" file="../Source/core/html/forms/resources/calendarPicker.js" type="BINDATA" compress="gzip"/> + <include name="IDR_PICKER_BUTTON_CSS" file="../Source/core/html/forms/resources/pickerButton.css" type="BINDATA" compress="gzip"/> + <include name="IDR_SUGGESTION_PICKER_CSS" file="../Source/core/html/forms/resources/suggestionPicker.css" type="BINDATA" compress="gzip"/> + <include name="IDR_SUGGESTION_PICKER_JS" file="../Source/core/html/forms/resources/suggestionPicker.js" type="BINDATA" compress="gzip"/> + <include name="IDR_COLOR_SUGGESTION_PICKER_CSS" file="../Source/core/html/forms/resources/colorSuggestionPicker.css" type="BINDATA" compress="gzip"/> + <include name="IDR_COLOR_SUGGESTION_PICKER_JS" file="../Source/core/html/forms/resources/colorSuggestionPicker.js" type="BINDATA" compress="gzip"/> + <include name="IDR_LIST_PICKER_CSS" file="../Source/core/html/forms/resources/listPicker.css" type="BINDATA" compress="gzip"/> + <include name="IDR_LIST_PICKER_JS" file="../Source/core/html/forms/resources/listPicker.js" type="BINDATA" compress="gzip"/> </if> <include name="IDR_AUDIO_SPATIALIZATION_COMPOSITE" file="../Source/platform/audio/resources/Composite.flac" type="BINDATA"/> </includes>
diff --git a/third_party/WebKit/public/web/mac/WebScrollbarTheme.h b/third_party/WebKit/public/platform/mac/WebScrollbarTheme.h similarity index 100% rename from third_party/WebKit/public/web/mac/WebScrollbarTheme.h rename to third_party/WebKit/public/platform/mac/WebScrollbarTheme.h
diff --git a/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha1-armv8.S b/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha1-armv8.S index 00a8f10..de9cdf86 100644 --- a/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha1-armv8.S +++ b/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha1-armv8.S
@@ -8,7 +8,11 @@ .align 6 _sha1_block_data_order: +#ifdef __ILP32__ + ldrsw x16,LOPENSSL_armcap_P +#else ldr x16,LOPENSSL_armcap_P +#endif adr x17,LOPENSSL_armcap_P add x16,x16,x17 ldr w16,[x16] @@ -1207,7 +1211,11 @@ .long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59 .long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79 LOPENSSL_armcap_P: +#ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +#else .quad _OPENSSL_armcap_P-. +#endif .byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2
diff --git a/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha256-armv8.S b/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha256-armv8.S index e70d6ba..43811dd 100644 --- a/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha256-armv8.S +++ b/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha256-armv8.S
@@ -1,4 +1,45 @@ -#include <openssl/arm_arch.h> +// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the OpenSSL license (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html + +// ==================================================================== +// Written by Andy Polyakov <appro@openssl.org> for the OpenSSL +// project. The module is, however, dual licensed under OpenSSL and +// CRYPTOGAMS licenses depending on where you obtain it. For further +// details see http://www.openssl.org/~appro/cryptogams/. +// +// Permission to use under GPLv2 terms is granted. +// ==================================================================== +// +// SHA256/512 for ARMv8. +// +// Performance in cycles per processed byte and improvement coefficient +// over code generated with "default" compiler: +// +// SHA256-hw SHA256(*) SHA512 +// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) +// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) +// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) +// Denver 2.01 10.5 (+26%) 6.70 (+8%) +// X-Gene 20.0 (+100%) 12.8 (+300%(***)) +// Mongoose 2.36 13.0 (+50%) 8.36 (+33%) +// +// (*) Software SHA256 results are of lesser relevance, presented +// mostly for informational purposes. +// (**) The result is a trade-off: it's possible to improve it by +// 10% (or by 1 cycle per round), but at the cost of 20% loss +// on Cortex-A53 (or by 4 cycles per round). +// (***) Super-impressive coefficients over gcc-generated code are +// indication of some compiler "pathology", most notably code +// generated with -mgeneral-regs-only is significanty faster +// and the gap is only 40-90%. + +#ifndef __KERNEL__ +# include <openssl/arm_arch.h> +#endif .text @@ -8,12 +49,18 @@ .align 6 _sha256_block_data_order: +#ifndef __KERNEL__ +# ifdef __ILP32__ + ldrsw x16,LOPENSSL_armcap_P +# else ldr x16,LOPENSSL_armcap_P +# endif adr x17,LOPENSSL_armcap_P add x16,x16,x17 ldr w16,[x16] tst w16,#ARMV8_SHA256 b.ne Lv8_entry +#endif stp x29,x30,[sp,#-128]! add x29,sp,#0 @@ -997,12 +1044,19 @@ .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 .long 0 //terminator +#ifndef __KERNEL__ .align 3 LOPENSSL_armcap_P: +# ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +# else .quad _OPENSSL_armcap_P-. +# endif +#endif .byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2 +#ifndef __KERNEL__ .align 6 sha256_block_armv8: @@ -1141,4 +1195,7 @@ ldr x29,[sp],#16 ret +#endif +#ifndef __KERNEL__ .comm _OPENSSL_armcap_P,4,4 +#endif
diff --git a/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha512-armv8.S b/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha512-armv8.S index cc668e2..41159c38 100644 --- a/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha512-armv8.S +++ b/third_party/boringssl/ios-aarch64/crypto/fipsmodule/sha512-armv8.S
@@ -1,4 +1,45 @@ -#include <openssl/arm_arch.h> +// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the OpenSSL license (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html + +// ==================================================================== +// Written by Andy Polyakov <appro@openssl.org> for the OpenSSL +// project. The module is, however, dual licensed under OpenSSL and +// CRYPTOGAMS licenses depending on where you obtain it. For further +// details see http://www.openssl.org/~appro/cryptogams/. +// +// Permission to use under GPLv2 terms is granted. +// ==================================================================== +// +// SHA256/512 for ARMv8. +// +// Performance in cycles per processed byte and improvement coefficient +// over code generated with "default" compiler: +// +// SHA256-hw SHA256(*) SHA512 +// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) +// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) +// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) +// Denver 2.01 10.5 (+26%) 6.70 (+8%) +// X-Gene 20.0 (+100%) 12.8 (+300%(***)) +// Mongoose 2.36 13.0 (+50%) 8.36 (+33%) +// +// (*) Software SHA256 results are of lesser relevance, presented +// mostly for informational purposes. +// (**) The result is a trade-off: it's possible to improve it by +// 10% (or by 1 cycle per round), but at the cost of 20% loss +// on Cortex-A53 (or by 4 cycles per round). +// (***) Super-impressive coefficients over gcc-generated code are +// indication of some compiler "pathology", most notably code +// generated with -mgeneral-regs-only is significanty faster +// and the gap is only 40-90%. + +#ifndef __KERNEL__ +# include <openssl/arm_arch.h> +#endif .text @@ -1015,10 +1056,18 @@ .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 .quad 0 // terminator +#ifndef __KERNEL__ .align 3 LOPENSSL_armcap_P: +# ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +# else .quad _OPENSSL_armcap_P-. +# endif +#endif .byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2 +#ifndef __KERNEL__ .comm _OPENSSL_armcap_P,4,4 +#endif
diff --git a/third_party/boringssl/ios-arm/crypto/chacha/chacha-armv4.S b/third_party/boringssl/ios-arm/crypto/chacha/chacha-armv4.S index 3eaecba..ec3555de 100644 --- a/third_party/boringssl/ios-arm/crypto/chacha/chacha-armv4.S +++ b/third_party/boringssl/ios-arm/crypto/chacha/chacha-armv4.S
@@ -26,7 +26,9 @@ .globl _ChaCha20_ctr32 .private_extern _ChaCha20_ctr32 - +#ifdef __thumb2__ +.thumb_func _ChaCha20_ctr32 +#endif .align 5 _ChaCha20_ctr32: LChaCha20_ctr32: @@ -791,7 +793,9 @@ - +#ifdef __thumb2__ +.thumb_func ChaCha20_neon +#endif .align 5 ChaCha20_neon: ldr r12,[sp,#0] @ pull pointer to counter and nonce
diff --git a/third_party/boringssl/ios-arm/crypto/fipsmodule/aes-armv4.S b/third_party/boringssl/ios-arm/crypto/fipsmodule/aes-armv4.S index c9a23f27..2e6c7efa 100644 --- a/third_party/boringssl/ios-arm/crypto/fipsmodule/aes-armv4.S +++ b/third_party/boringssl/ios-arm/crypto/fipsmodule/aes-armv4.S
@@ -1,3 +1,10 @@ +@ Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. +@ +@ Licensed under the OpenSSL license (the "License"). You may not use +@ this file except in compliance with the License. You can obtain a copy +@ in the file LICENSE in the source distribution or at +@ https://www.openssl.org/source/license.html + @ ==================================================================== @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL @@ -38,15 +45,12 @@ #endif .text -#if __ARM_ARCH__<7 -.code 32 -#else +#if defined(__thumb2__) && !defined(__APPLE__) .syntax unified -# if defined(__thumb2__) && !defined(__APPLE__) .thumb -# else +#else .code 32 -# endif +#undef __thumb2__ #endif @@ -159,10 +163,12 @@ @ const AES_KEY *key) { .globl _asm_AES_encrypt .private_extern _asm_AES_encrypt - +#ifdef __thumb2__ +.thumb_func _asm_AES_encrypt +#endif .align 5 _asm_AES_encrypt: -#if __ARM_ARCH__<7 +#ifndef __thumb2__ sub r3,pc,#8 @ _asm_AES_encrypt #else adr r3,_asm_AES_encrypt @@ -270,7 +276,9 @@ #endif - +#ifdef __thumb2__ +.thumb_func _armv4_AES_encrypt +#endif .align 2 _armv4_AES_encrypt: str lr,[sp,#-4]! @ push lr @@ -409,23 +417,25 @@ .globl _asm_AES_set_encrypt_key .private_extern _asm_AES_set_encrypt_key - +#ifdef __thumb2__ +.thumb_func _asm_AES_set_encrypt_key +#endif .align 5 _asm_AES_set_encrypt_key: _armv4_AES_set_encrypt_key: -#if __ARM_ARCH__<7 +#ifndef __thumb2__ sub r3,pc,#8 @ _asm_AES_set_encrypt_key #else adr r3,_asm_AES_set_encrypt_key #endif teq r0,#0 -#if __ARM_ARCH__>=7 +#ifdef __thumb2__ itt eq @ Thumb2 thing, sanity check in ARM #endif moveq r0,#-1 beq Labrt teq r2,#0 -#if __ARM_ARCH__>=7 +#ifdef __thumb2__ itt eq @ Thumb2 thing, sanity check in ARM #endif moveq r0,#-1 @@ -436,7 +446,7 @@ teq r1,#192 beq Lok teq r1,#256 -#if __ARM_ARCH__>=7 +#ifdef __thumb2__ itt ne @ Thumb2 thing, sanity check in ARM #endif movne r0,#-1 @@ -597,7 +607,7 @@ str r2,[r11,#-16] subs r12,r12,#1 str r3,[r11,#-12] -#if __ARM_ARCH__>=7 +#ifdef __thumb2__ itt eq @ Thumb2 thing, sanity check in ARM #endif subeq r2,r11,#216 @@ -669,7 +679,7 @@ str r2,[r11,#-24] subs r12,r12,#1 str r3,[r11,#-20] -#if __ARM_ARCH__>=7 +#ifdef __thumb2__ itt eq @ Thumb2 thing, sanity check in ARM #endif subeq r2,r11,#256 @@ -716,7 +726,9 @@ .globl _asm_AES_set_decrypt_key .private_extern _asm_AES_set_decrypt_key - +#ifdef __thumb2__ +.thumb_func _asm_AES_set_decrypt_key +#endif .align 5 _asm_AES_set_decrypt_key: str lr,[sp,#-4]! @ push lr @@ -733,7 +745,9 @@ @ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out) .globl _AES_set_enc2dec_key .private_extern _AES_set_enc2dec_key - +#ifdef __thumb2__ +.thumb_func _AES_set_enc2dec_key +#endif .align 5 _AES_set_enc2dec_key: _armv4_AES_set_enc2dec_key: @@ -742,7 +756,7 @@ ldr r12,[r0,#240] mov r7,r0 @ input add r8,r0,r12,lsl#4 - mov r11,r1 @ ouput + mov r11,r1 @ output add r10,r1,r12,lsl#4 str r12,[r1,#240] @@ -934,10 +948,12 @@ @ const AES_KEY *key) { .globl _asm_AES_decrypt .private_extern _asm_AES_decrypt - +#ifdef __thumb2__ +.thumb_func _asm_AES_decrypt +#endif .align 5 _asm_AES_decrypt: -#if __ARM_ARCH__<7 +#ifndef __thumb2__ sub r3,pc,#8 @ _asm_AES_decrypt #else adr r3,_asm_AES_decrypt @@ -1045,7 +1061,9 @@ #endif - +#ifdef __thumb2__ +.thumb_func _armv4_AES_decrypt +#endif .align 2 _armv4_AES_decrypt: str lr,[sp,#-4]! @ push lr
diff --git a/third_party/boringssl/ios-arm/crypto/fipsmodule/aesv8-armx32.S b/third_party/boringssl/ios-arm/crypto/fipsmodule/aesv8-armx32.S index 9f7aacd..d44c88c 100644 --- a/third_party/boringssl/ios-arm/crypto/fipsmodule/aesv8-armx32.S +++ b/third_party/boringssl/ios-arm/crypto/fipsmodule/aesv8-armx32.S
@@ -5,6 +5,7 @@ .code 32 +#undef __thumb2__ .align 5 Lrcon: .long 0x01,0x01,0x01,0x01 @@ -13,7 +14,9 @@ .globl _aes_hw_set_encrypt_key .private_extern _aes_hw_set_encrypt_key - +#ifdef __thumb2__ +.thumb_func _aes_hw_set_encrypt_key +#endif .align 5 _aes_hw_set_encrypt_key: Lenc_key: @@ -184,7 +187,9 @@ .globl _aes_hw_set_decrypt_key .private_extern _aes_hw_set_decrypt_key - +#ifdef __thumb2__ +.thumb_func _aes_hw_set_decrypt_key +#endif .align 5 _aes_hw_set_decrypt_key: stmdb sp!,{r4,lr} @@ -222,7 +227,9 @@ .globl _aes_hw_encrypt .private_extern _aes_hw_encrypt - +#ifdef __thumb2__ +.thumb_func _aes_hw_encrypt +#endif .align 5 _aes_hw_encrypt: ldr r3,[r2,#240] @@ -252,7 +259,9 @@ .globl _aes_hw_decrypt .private_extern _aes_hw_decrypt - +#ifdef __thumb2__ +.thumb_func _aes_hw_decrypt +#endif .align 5 _aes_hw_decrypt: ldr r3,[r2,#240] @@ -282,7 +291,9 @@ .globl _aes_hw_cbc_encrypt .private_extern _aes_hw_cbc_encrypt - +#ifdef __thumb2__ +.thumb_func _aes_hw_cbc_encrypt +#endif .align 5 _aes_hw_cbc_encrypt: mov ip,sp @@ -575,7 +586,9 @@ .globl _aes_hw_ctr32_encrypt_blocks .private_extern _aes_hw_ctr32_encrypt_blocks - +#ifdef __thumb2__ +.thumb_func _aes_hw_ctr32_encrypt_blocks +#endif .align 5 _aes_hw_ctr32_encrypt_blocks: mov ip,sp
diff --git a/third_party/boringssl/ios-arm/crypto/fipsmodule/armv4-mont.S b/third_party/boringssl/ios-arm/crypto/fipsmodule/armv4-mont.S index ba6c2a56..1d516ef 100644 --- a/third_party/boringssl/ios-arm/crypto/fipsmodule/armv4-mont.S +++ b/third_party/boringssl/ios-arm/crypto/fipsmodule/armv4-mont.S
@@ -1,7 +1,12 @@ #include <openssl/arm_arch.h> .text +#if defined(__thumb2__) +.syntax unified +.thumb +#else .code 32 +#endif #if __ARM_MAX_ARCH__>=7 .align 5 @@ -11,7 +16,9 @@ .globl _bn_mul_mont .private_extern _bn_mul_mont - +#ifdef __thumb2__ +.thumb_func _bn_mul_mont +#endif .align 5 _bn_mul_mont: @@ -21,7 +28,7 @@ #if __ARM_MAX_ARCH__>=7 tst ip,#7 bne Lialu - adr r0,_bn_mul_mont + adr r0,Lbn_mul_mont ldr r2,LOPENSSL_armcap ldr r0,[r0,r2] #ifdef __APPLE__ @@ -37,6 +44,9 @@ #endif cmp ip,#2 mov r0,ip @ load num +#ifdef __thumb2__ + ittt lt +#endif movlt r0,#0 addlt sp,sp,#2*4 blt Labrt @@ -84,10 +94,11 @@ ldr r8,[r0,#14*4] @ restore n0 adc r14,r14,#0 str r12,[r0] @ tp[num-1]= + mov r7,sp str r14,[r0,#4] @ tp[num]= Louter: - sub r7,r0,sp @ "original" r0-1 value + sub r7,r0,r7 @ "original" r0-1 value sub r1,r1,r7 @ "rewind" ap to &ap[1] ldr r2,[r4,#4]! @ *(++bp) sub r3,r3,r7 @ "rewind" np to &np[1] @@ -132,11 +143,16 @@ str r14,[r0,#4] @ tp[num]= cmp r4,r7 +#ifdef __thumb2__ + itt ne +#endif + movne r7,sp bne Louter ldr r2,[r0,#12*4] @ pull rp + mov r5,sp add r0,r0,#4 @ r0 to point at &tp[num] - sub r5,r0,sp @ "original" num value + sub r5,r0,r5 @ "original" num value mov r4,sp @ "rewind" r4 mov r1,r4 @ "borrow" r1 sub r3,r3,r5 @ "rewind" r3 to &np[0] @@ -162,13 +178,14 @@ cmp r4,r0 bne Lcopy - add sp,r0,#4 @ skip over tp[num+1] + mov sp,r0 + add sp,sp,#4 @ skip over tp[num+1] ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} @ restore registers add sp,sp,#2*4 @ skip over {r0,r2} mov r0,#1 Labrt: #if __ARM_ARCH__>=5 - bx lr @ .word 0xe12fff1e + bx lr @ bx lr #else tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet @@ -179,34 +196,40 @@ - +#ifdef __thumb2__ +.thumb_func bn_mul8x_mont_neon +#endif .align 5 bn_mul8x_mont_neon: mov ip,sp stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11} vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ ABI specification says so ldmia ip,{r4,r5} @ load rest of parameter block + mov ip,sp - sub r7,sp,#16 + cmp r5,#8 + bhi LNEON_8n + + @ special case for r5==8, everything is in register bank... + vld1.32 {d28[0]}, [r2,:32]! - sub r7,r7,r5,lsl#4 + veor d8,d8,d8 + sub r7,sp,r5,lsl#4 vld1.32 {d0,d1,d2,d3}, [r1]! @ can't specify :32 :-( and r7,r7,#-64 vld1.32 {d30[0]}, [r4,:32] mov sp,r7 @ alloca - veor d8,d8,d8 - subs r8,r5,#8 vzip.16 d28,d8 vmull.u32 q6,d28,d0[0] vmull.u32 q7,d28,d0[1] vmull.u32 q8,d28,d1[0] - vshl.i64 d10,d13,#16 + vshl.i64 d29,d13,#16 vmull.u32 q9,d28,d1[1] - vadd.u64 d10,d10,d12 + vadd.u64 d29,d29,d12 veor d8,d8,d8 - vmul.u32 d29,d10,d30 + vmul.u32 d29,d29,d30 vmull.u32 q10,d28,d2[0] vld1.32 {d4,d5,d6,d7}, [r3]! @@ -215,10 +238,6 @@ vzip.16 d29,d8 vmull.u32 q13,d28,d3[1] - bne LNEON_1st - - @ special case for num=8, everything is in register bank... - vmlal.u32 q6,d29,d4[0] sub r9,r5,#1 vmlal.u32 q7,d29,d4[1] @@ -254,13 +273,13 @@ vmlal.u32 q6,d28,d0[0] vmlal.u32 q7,d28,d0[1] vmlal.u32 q8,d28,d1[0] - vshl.i64 d10,d13,#16 + vshl.i64 d29,d13,#16 vmlal.u32 q9,d28,d1[1] - vadd.u64 d10,d10,d12 + vadd.u64 d29,d29,d12 veor d8,d8,d8 subs r9,r9,#1 - vmul.u32 d29,d10,d30 + vmul.u32 d29,d29,d30 vmlal.u32 q10,d28,d2[0] vmlal.u32 q11,d28,d2[1] @@ -297,231 +316,576 @@ vshr.u64 d10,d12,#16 mov r8,r5 vadd.u64 d13,d13,d10 - add r6,sp,#16 + add r6,sp,#96 vshr.u64 d10,d13,#16 vzip.16 d12,d13 - b LNEON_tail2 + b LNEON_tail_entry .align 4 -LNEON_1st: - vmlal.u32 q6,d29,d4[0] - vld1.32 {d0,d1,d2,d3}, [r1]! - vmlal.u32 q7,d29,d4[1] - subs r8,r8,#8 - vmlal.u32 q8,d29,d5[0] - vmlal.u32 q9,d29,d5[1] - - vmlal.u32 q10,d29,d6[0] - vld1.32 {d4,d5}, [r3]! - vmlal.u32 q11,d29,d6[1] - vst1.64 {q6,q7}, [r7,:256]! - vmlal.u32 q12,d29,d7[0] - vmlal.u32 q13,d29,d7[1] - vst1.64 {q8,q9}, [r7,:256]! - - vmull.u32 q6,d28,d0[0] - vld1.32 {d6,d7}, [r3]! - vmull.u32 q7,d28,d0[1] - vst1.64 {q10,q11}, [r7,:256]! - vmull.u32 q8,d28,d1[0] - vmull.u32 q9,d28,d1[1] - vst1.64 {q12,q13}, [r7,:256]! - - vmull.u32 q10,d28,d2[0] - vmull.u32 q11,d28,d2[1] - vmull.u32 q12,d28,d3[0] - vmull.u32 q13,d28,d3[1] - - bne LNEON_1st - - vmlal.u32 q6,d29,d4[0] - add r6,sp,#16 - vmlal.u32 q7,d29,d4[1] - sub r1,r1,r5,lsl#2 @ rewind r1 - vmlal.u32 q8,d29,d5[0] - vld1.64 {q5}, [sp,:128] - vmlal.u32 q9,d29,d5[1] - sub r9,r5,#1 - - vmlal.u32 q10,d29,d6[0] - vst1.64 {q6,q7}, [r7,:256]! - vmlal.u32 q11,d29,d6[1] - vshr.u64 d10,d10,#16 - vld1.64 {q6}, [r6, :128]! - vmlal.u32 q12,d29,d7[0] - vst1.64 {q8,q9}, [r7,:256]! - vmlal.u32 q13,d29,d7[1] - - vst1.64 {q10,q11}, [r7,:256]! - vadd.u64 d10,d10,d11 - veor q4,q4,q4 - vst1.64 {q12,q13}, [r7,:256]! - vld1.64 {q7,q8}, [r6, :256]! - vst1.64 {q4}, [r7,:128] - vshr.u64 d10,d10,#16 - - b LNEON_outer - -.align 4 -LNEON_outer: - vld1.32 {d28[0]}, [r2,:32]! - sub r3,r3,r5,lsl#2 @ rewind r3 - vld1.32 {d0,d1,d2,d3}, [r1]! - veor d8,d8,d8 - mov r7,sp - vzip.16 d28,d8 +LNEON_8n: + veor q6,q6,q6 + sub r7,sp,#128 + veor q7,q7,q7 + sub r7,r7,r5,lsl#4 + veor q8,q8,q8 + and r7,r7,#-64 + veor q9,q9,q9 + mov sp,r7 @ alloca + veor q10,q10,q10 + add r7,r7,#256 + veor q11,q11,q11 sub r8,r5,#8 - vadd.u64 d12,d12,d10 + veor q12,q12,q12 + veor q13,q13,q13 + +LNEON_8n_init: + vst1.64 {q6,q7},[r7,:256]! + subs r8,r8,#8 + vst1.64 {q8,q9},[r7,:256]! + vst1.64 {q10,q11},[r7,:256]! + vst1.64 {q12,q13},[r7,:256]! + bne LNEON_8n_init + + add r6,sp,#256 + vld1.32 {d0,d1,d2,d3},[r1]! + add r10,sp,#8 + vld1.32 {d30[0]},[r4,:32] + mov r9,r5 + b LNEON_8n_outer + +.align 4 +LNEON_8n_outer: + vld1.32 {d28[0]},[r2,:32]! @ *b++ + veor d8,d8,d8 + vzip.16 d28,d8 + add r7,sp,#128 + vld1.32 {d4,d5,d6,d7},[r3]! vmlal.u32 q6,d28,d0[0] - vld1.64 {q9,q10},[r6,:256]! vmlal.u32 q7,d28,d0[1] - vmlal.u32 q8,d28,d1[0] - vld1.64 {q11,q12},[r6,:256]! - vmlal.u32 q9,d28,d1[1] - - vshl.i64 d10,d13,#16 veor d8,d8,d8 - vadd.u64 d10,d10,d12 - vld1.64 {q13},[r6,:128]! - vmul.u32 d29,d10,d30 - + vmlal.u32 q8,d28,d1[0] + vshl.i64 d29,d13,#16 + vmlal.u32 q9,d28,d1[1] + vadd.u64 d29,d29,d12 vmlal.u32 q10,d28,d2[0] - vld1.32 {d4,d5,d6,d7}, [r3]! + vmul.u32 d29,d29,d30 vmlal.u32 q11,d28,d2[1] + vst1.32 {d28},[sp,:64] @ put aside smashed b[8*i+0] vmlal.u32 q12,d28,d3[0] vzip.16 d29,d8 vmlal.u32 q13,d28,d3[1] - -LNEON_inner: + vld1.32 {d28[0]},[r2,:32]! @ *b++ vmlal.u32 q6,d29,d4[0] - vld1.32 {d0,d1,d2,d3}, [r1]! + veor d10,d10,d10 vmlal.u32 q7,d29,d4[1] - subs r8,r8,#8 + vzip.16 d28,d10 vmlal.u32 q8,d29,d5[0] + vshr.u64 d12,d12,#16 vmlal.u32 q9,d29,d5[1] - vst1.64 {q6,q7}, [r7,:256]! - vmlal.u32 q10,d29,d6[0] - vld1.64 {q6}, [r6, :128]! + vadd.u64 d12,d12,d13 vmlal.u32 q11,d29,d6[1] - vst1.64 {q8,q9}, [r7,:256]! + vshr.u64 d12,d12,#16 vmlal.u32 q12,d29,d7[0] - vld1.64 {q7,q8}, [r6, :256]! vmlal.u32 q13,d29,d7[1] - vst1.64 {q10,q11}, [r7,:256]! + vadd.u64 d14,d14,d12 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+0] + vmlal.u32 q7,d28,d0[0] + vld1.64 {q6},[r6,:128]! + vmlal.u32 q8,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q9,d28,d1[0] + vshl.i64 d29,d15,#16 + vmlal.u32 q10,d28,d1[1] + vadd.u64 d29,d29,d14 + vmlal.u32 q11,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q12,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+1] + vmlal.u32 q13,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q6,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q7,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q8,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q9,d29,d5[0] + vshr.u64 d14,d14,#16 + vmlal.u32 q10,d29,d5[1] + vmlal.u32 q11,d29,d6[0] + vadd.u64 d14,d14,d15 + vmlal.u32 q12,d29,d6[1] + vshr.u64 d14,d14,#16 + vmlal.u32 q13,d29,d7[0] + vmlal.u32 q6,d29,d7[1] + vadd.u64 d16,d16,d14 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+1] + vmlal.u32 q8,d28,d0[0] + vld1.64 {q7},[r6,:128]! + vmlal.u32 q9,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q10,d28,d1[0] + vshl.i64 d29,d17,#16 + vmlal.u32 q11,d28,d1[1] + vadd.u64 d29,d29,d16 + vmlal.u32 q12,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q13,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+2] + vmlal.u32 q6,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q7,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q8,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q9,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q10,d29,d5[0] + vshr.u64 d16,d16,#16 + vmlal.u32 q11,d29,d5[1] + vmlal.u32 q12,d29,d6[0] + vadd.u64 d16,d16,d17 + vmlal.u32 q13,d29,d6[1] + vshr.u64 d16,d16,#16 + vmlal.u32 q6,d29,d7[0] + vmlal.u32 q7,d29,d7[1] + vadd.u64 d18,d18,d16 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+2] + vmlal.u32 q9,d28,d0[0] + vld1.64 {q8},[r6,:128]! + vmlal.u32 q10,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q11,d28,d1[0] + vshl.i64 d29,d19,#16 + vmlal.u32 q12,d28,d1[1] + vadd.u64 d29,d29,d18 + vmlal.u32 q13,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q6,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+3] + vmlal.u32 q7,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q8,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q9,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q10,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q11,d29,d5[0] + vshr.u64 d18,d18,#16 + vmlal.u32 q12,d29,d5[1] + vmlal.u32 q13,d29,d6[0] + vadd.u64 d18,d18,d19 + vmlal.u32 q6,d29,d6[1] + vshr.u64 d18,d18,#16 + vmlal.u32 q7,d29,d7[0] + vmlal.u32 q8,d29,d7[1] + vadd.u64 d20,d20,d18 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+3] + vmlal.u32 q10,d28,d0[0] + vld1.64 {q9},[r6,:128]! + vmlal.u32 q11,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q12,d28,d1[0] + vshl.i64 d29,d21,#16 + vmlal.u32 q13,d28,d1[1] + vadd.u64 d29,d29,d20 + vmlal.u32 q6,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q7,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+4] + vmlal.u32 q8,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q9,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q10,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q11,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q12,d29,d5[0] + vshr.u64 d20,d20,#16 + vmlal.u32 q13,d29,d5[1] + vmlal.u32 q6,d29,d6[0] + vadd.u64 d20,d20,d21 + vmlal.u32 q7,d29,d6[1] + vshr.u64 d20,d20,#16 + vmlal.u32 q8,d29,d7[0] + vmlal.u32 q9,d29,d7[1] + vadd.u64 d22,d22,d20 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+4] + vmlal.u32 q11,d28,d0[0] + vld1.64 {q10},[r6,:128]! + vmlal.u32 q12,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q13,d28,d1[0] + vshl.i64 d29,d23,#16 + vmlal.u32 q6,d28,d1[1] + vadd.u64 d29,d29,d22 + vmlal.u32 q7,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q8,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+5] + vmlal.u32 q9,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q10,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q11,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q12,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q13,d29,d5[0] + vshr.u64 d22,d22,#16 + vmlal.u32 q6,d29,d5[1] + vmlal.u32 q7,d29,d6[0] + vadd.u64 d22,d22,d23 + vmlal.u32 q8,d29,d6[1] + vshr.u64 d22,d22,#16 + vmlal.u32 q9,d29,d7[0] + vmlal.u32 q10,d29,d7[1] + vadd.u64 d24,d24,d22 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+5] + vmlal.u32 q12,d28,d0[0] + vld1.64 {q11},[r6,:128]! + vmlal.u32 q13,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q6,d28,d1[0] + vshl.i64 d29,d25,#16 + vmlal.u32 q7,d28,d1[1] + vadd.u64 d29,d29,d24 + vmlal.u32 q8,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q9,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+6] + vmlal.u32 q10,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q11,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q12,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q13,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q6,d29,d5[0] + vshr.u64 d24,d24,#16 + vmlal.u32 q7,d29,d5[1] + vmlal.u32 q8,d29,d6[0] + vadd.u64 d24,d24,d25 + vmlal.u32 q9,d29,d6[1] + vshr.u64 d24,d24,#16 + vmlal.u32 q10,d29,d7[0] + vmlal.u32 q11,d29,d7[1] + vadd.u64 d26,d26,d24 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+6] + vmlal.u32 q13,d28,d0[0] + vld1.64 {q12},[r6,:128]! + vmlal.u32 q6,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q7,d28,d1[0] + vshl.i64 d29,d27,#16 + vmlal.u32 q8,d28,d1[1] + vadd.u64 d29,d29,d26 + vmlal.u32 q9,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q10,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+7] + vmlal.u32 q11,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q12,d28,d3[1] + vld1.32 {d28},[sp,:64] @ pull smashed b[8*i+0] + vmlal.u32 q13,d29,d4[0] + vld1.32 {d0,d1,d2,d3},[r1]! + vmlal.u32 q6,d29,d4[1] + vmlal.u32 q7,d29,d5[0] + vshr.u64 d26,d26,#16 + vmlal.u32 q8,d29,d5[1] + vmlal.u32 q9,d29,d6[0] + vadd.u64 d26,d26,d27 + vmlal.u32 q10,d29,d6[1] + vshr.u64 d26,d26,#16 + vmlal.u32 q11,d29,d7[0] + vmlal.u32 q12,d29,d7[1] + vadd.u64 d12,d12,d26 + vst1.32 {d29},[r10,:64] @ put aside smashed m[8*i+7] + add r10,sp,#8 @ rewind + sub r8,r5,#8 + b LNEON_8n_inner +.align 4 +LNEON_8n_inner: + subs r8,r8,#8 vmlal.u32 q6,d28,d0[0] - vld1.64 {q9,q10}, [r6, :256]! + vld1.64 {q13},[r6,:128] vmlal.u32 q7,d28,d0[1] - vst1.64 {q12,q13}, [r7,:256]! + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+0] vmlal.u32 q8,d28,d1[0] - vld1.64 {q11,q12}, [r6, :256]! + vld1.32 {d4,d5,d6,d7},[r3]! vmlal.u32 q9,d28,d1[1] - vld1.32 {d4,d5,d6,d7}, [r3]! - + it ne + addne r6,r6,#16 @ don't advance in last iteration vmlal.u32 q10,d28,d2[0] - vld1.64 {q13}, [r6, :128]! vmlal.u32 q11,d28,d2[1] vmlal.u32 q12,d28,d3[0] vmlal.u32 q13,d28,d3[1] - - bne LNEON_inner - + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+1] vmlal.u32 q6,d29,d4[0] - add r6,sp,#16 vmlal.u32 q7,d29,d4[1] - sub r1,r1,r5,lsl#2 @ rewind r1 vmlal.u32 q8,d29,d5[0] - vld1.64 {q5}, [sp,:128] vmlal.u32 q9,d29,d5[1] - subs r9,r9,#1 - vmlal.u32 q10,d29,d6[0] - vst1.64 {q6,q7}, [r7,:256]! vmlal.u32 q11,d29,d6[1] - vld1.64 {q6}, [r6, :128]! - vshr.u64 d10,d10,#16 - vst1.64 {q8,q9}, [r7,:256]! vmlal.u32 q12,d29,d7[0] - vld1.64 {q7,q8}, [r6, :256]! vmlal.u32 q13,d29,d7[1] + vst1.64 {q6},[r7,:128]! + vmlal.u32 q7,d28,d0[0] + vld1.64 {q6},[r6,:128] + vmlal.u32 q8,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+1] + vmlal.u32 q9,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q10,d28,d1[1] + vmlal.u32 q11,d28,d2[0] + vmlal.u32 q12,d28,d2[1] + vmlal.u32 q13,d28,d3[0] + vmlal.u32 q6,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+2] + vmlal.u32 q7,d29,d4[0] + vmlal.u32 q8,d29,d4[1] + vmlal.u32 q9,d29,d5[0] + vmlal.u32 q10,d29,d5[1] + vmlal.u32 q11,d29,d6[0] + vmlal.u32 q12,d29,d6[1] + vmlal.u32 q13,d29,d7[0] + vmlal.u32 q6,d29,d7[1] + vst1.64 {q7},[r7,:128]! + vmlal.u32 q8,d28,d0[0] + vld1.64 {q7},[r6,:128] + vmlal.u32 q9,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+2] + vmlal.u32 q10,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q11,d28,d1[1] + vmlal.u32 q12,d28,d2[0] + vmlal.u32 q13,d28,d2[1] + vmlal.u32 q6,d28,d3[0] + vmlal.u32 q7,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+3] + vmlal.u32 q8,d29,d4[0] + vmlal.u32 q9,d29,d4[1] + vmlal.u32 q10,d29,d5[0] + vmlal.u32 q11,d29,d5[1] + vmlal.u32 q12,d29,d6[0] + vmlal.u32 q13,d29,d6[1] + vmlal.u32 q6,d29,d7[0] + vmlal.u32 q7,d29,d7[1] + vst1.64 {q8},[r7,:128]! + vmlal.u32 q9,d28,d0[0] + vld1.64 {q8},[r6,:128] + vmlal.u32 q10,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+3] + vmlal.u32 q11,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q12,d28,d1[1] + vmlal.u32 q13,d28,d2[0] + vmlal.u32 q6,d28,d2[1] + vmlal.u32 q7,d28,d3[0] + vmlal.u32 q8,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+4] + vmlal.u32 q9,d29,d4[0] + vmlal.u32 q10,d29,d4[1] + vmlal.u32 q11,d29,d5[0] + vmlal.u32 q12,d29,d5[1] + vmlal.u32 q13,d29,d6[0] + vmlal.u32 q6,d29,d6[1] + vmlal.u32 q7,d29,d7[0] + vmlal.u32 q8,d29,d7[1] + vst1.64 {q9},[r7,:128]! + vmlal.u32 q10,d28,d0[0] + vld1.64 {q9},[r6,:128] + vmlal.u32 q11,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+4] + vmlal.u32 q12,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q13,d28,d1[1] + vmlal.u32 q6,d28,d2[0] + vmlal.u32 q7,d28,d2[1] + vmlal.u32 q8,d28,d3[0] + vmlal.u32 q9,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+5] + vmlal.u32 q10,d29,d4[0] + vmlal.u32 q11,d29,d4[1] + vmlal.u32 q12,d29,d5[0] + vmlal.u32 q13,d29,d5[1] + vmlal.u32 q6,d29,d6[0] + vmlal.u32 q7,d29,d6[1] + vmlal.u32 q8,d29,d7[0] + vmlal.u32 q9,d29,d7[1] + vst1.64 {q10},[r7,:128]! + vmlal.u32 q11,d28,d0[0] + vld1.64 {q10},[r6,:128] + vmlal.u32 q12,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+5] + vmlal.u32 q13,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q6,d28,d1[1] + vmlal.u32 q7,d28,d2[0] + vmlal.u32 q8,d28,d2[1] + vmlal.u32 q9,d28,d3[0] + vmlal.u32 q10,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+6] + vmlal.u32 q11,d29,d4[0] + vmlal.u32 q12,d29,d4[1] + vmlal.u32 q13,d29,d5[0] + vmlal.u32 q6,d29,d5[1] + vmlal.u32 q7,d29,d6[0] + vmlal.u32 q8,d29,d6[1] + vmlal.u32 q9,d29,d7[0] + vmlal.u32 q10,d29,d7[1] + vst1.64 {q11},[r7,:128]! + vmlal.u32 q12,d28,d0[0] + vld1.64 {q11},[r6,:128] + vmlal.u32 q13,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+6] + vmlal.u32 q6,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q7,d28,d1[1] + vmlal.u32 q8,d28,d2[0] + vmlal.u32 q9,d28,d2[1] + vmlal.u32 q10,d28,d3[0] + vmlal.u32 q11,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+7] + vmlal.u32 q12,d29,d4[0] + vmlal.u32 q13,d29,d4[1] + vmlal.u32 q6,d29,d5[0] + vmlal.u32 q7,d29,d5[1] + vmlal.u32 q8,d29,d6[0] + vmlal.u32 q9,d29,d6[1] + vmlal.u32 q10,d29,d7[0] + vmlal.u32 q11,d29,d7[1] + vst1.64 {q12},[r7,:128]! + vmlal.u32 q13,d28,d0[0] + vld1.64 {q12},[r6,:128] + vmlal.u32 q6,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+7] + vmlal.u32 q7,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q8,d28,d1[1] + vmlal.u32 q9,d28,d2[0] + vmlal.u32 q10,d28,d2[1] + vmlal.u32 q11,d28,d3[0] + vmlal.u32 q12,d28,d3[1] + it eq + subeq r1,r1,r5,lsl#2 @ rewind + vmlal.u32 q13,d29,d4[0] + vld1.32 {d28},[sp,:64] @ pull smashed b[8*i+0] + vmlal.u32 q6,d29,d4[1] + vld1.32 {d0,d1,d2,d3},[r1]! + vmlal.u32 q7,d29,d5[0] + add r10,sp,#8 @ rewind + vmlal.u32 q8,d29,d5[1] + vmlal.u32 q9,d29,d6[0] + vmlal.u32 q10,d29,d6[1] + vmlal.u32 q11,d29,d7[0] + vst1.64 {q13},[r7,:128]! + vmlal.u32 q12,d29,d7[1] - vst1.64 {q10,q11}, [r7,:256]! - vadd.u64 d10,d10,d11 - vst1.64 {q12,q13}, [r7,:256]! - vshr.u64 d10,d10,#16 + bne LNEON_8n_inner + add r6,sp,#128 + vst1.64 {q6,q7},[r7,:256]! + veor q2,q2,q2 @ d4-d5 + vst1.64 {q8,q9},[r7,:256]! + veor q3,q3,q3 @ d6-d7 + vst1.64 {q10,q11},[r7,:256]! + vst1.64 {q12},[r7,:128] - bne LNEON_outer + subs r9,r9,#8 + vld1.64 {q6,q7},[r6,:256]! + vld1.64 {q8,q9},[r6,:256]! + vld1.64 {q10,q11},[r6,:256]! + vld1.64 {q12,q13},[r6,:256]! - mov r7,sp - mov r8,r5 + itt ne + subne r3,r3,r5,lsl#2 @ rewind + bne LNEON_8n_outer -LNEON_tail: - vadd.u64 d12,d12,d10 - vld1.64 {q9,q10}, [r6, :256]! + add r7,sp,#128 + vst1.64 {q2,q3}, [sp,:256]! @ start wiping stack frame vshr.u64 d10,d12,#16 + vst1.64 {q2,q3},[sp,:256]! vadd.u64 d13,d13,d10 - vld1.64 {q11,q12}, [r6, :256]! + vst1.64 {q2,q3}, [sp,:256]! vshr.u64 d10,d13,#16 - vld1.64 {q13}, [r6, :128]! + vst1.64 {q2,q3}, [sp,:256]! vzip.16 d12,d13 -LNEON_tail2: + mov r8,r5 + b LNEON_tail_entry + +.align 4 +LNEON_tail: + vadd.u64 d12,d12,d10 + vshr.u64 d10,d12,#16 + vld1.64 {q8,q9}, [r6, :256]! + vadd.u64 d13,d13,d10 + vld1.64 {q10,q11}, [r6, :256]! + vshr.u64 d10,d13,#16 + vld1.64 {q12,q13}, [r6, :256]! + vzip.16 d12,d13 + +LNEON_tail_entry: vadd.u64 d14,d14,d10 vst1.32 {d12[0]}, [r7, :32]! vshr.u64 d10,d14,#16 vadd.u64 d15,d15,d10 vshr.u64 d10,d15,#16 vzip.16 d14,d15 - vadd.u64 d16,d16,d10 vst1.32 {d14[0]}, [r7, :32]! vshr.u64 d10,d16,#16 vadd.u64 d17,d17,d10 vshr.u64 d10,d17,#16 vzip.16 d16,d17 - vadd.u64 d18,d18,d10 vst1.32 {d16[0]}, [r7, :32]! vshr.u64 d10,d18,#16 vadd.u64 d19,d19,d10 vshr.u64 d10,d19,#16 vzip.16 d18,d19 - vadd.u64 d20,d20,d10 vst1.32 {d18[0]}, [r7, :32]! vshr.u64 d10,d20,#16 vadd.u64 d21,d21,d10 vshr.u64 d10,d21,#16 vzip.16 d20,d21 - vadd.u64 d22,d22,d10 vst1.32 {d20[0]}, [r7, :32]! vshr.u64 d10,d22,#16 vadd.u64 d23,d23,d10 vshr.u64 d10,d23,#16 vzip.16 d22,d23 - vadd.u64 d24,d24,d10 vst1.32 {d22[0]}, [r7, :32]! vshr.u64 d10,d24,#16 vadd.u64 d25,d25,d10 - vld1.64 {q6}, [r6, :128]! vshr.u64 d10,d25,#16 vzip.16 d24,d25 - vadd.u64 d26,d26,d10 vst1.32 {d24[0]}, [r7, :32]! vshr.u64 d10,d26,#16 vadd.u64 d27,d27,d10 - vld1.64 {q7,q8}, [r6, :256]! vshr.u64 d10,d27,#16 vzip.16 d26,d27 + vld1.64 {q6,q7}, [r6, :256]! subs r8,r8,#8 - vst1.32 {d26[0]}, [r7, :32]! - + vst1.32 {d26[0]}, [r7, :32]! bne LNEON_tail vst1.32 {d10[0]}, [r7, :32] @ top-most bit @@ -541,8 +905,9 @@ bne LNEON_sub ldr r10, [r1] @ load top-most bit + mov r11,sp veor q0,q0,q0 - sub r11,r2,sp @ this is num*4 + sub r11,r2,r11 @ this is num*4 veor q1,q1,q1 mov r1,sp sub r0,r0,r11 @ rewind r0 @@ -552,30 +917,36 @@ LNEON_copy_n_zap: ldmia r1!, {r4,r5,r6,r7} ldmia r0, {r8,r9,r10,r11} + it cc movcc r8, r4 vst1.64 {q0,q1}, [r3,:256]! @ wipe + itt cc movcc r9, r5 movcc r10,r6 vst1.64 {q0,q1}, [r3,:256]! @ wipe + it cc movcc r11,r7 ldmia r1, {r4,r5,r6,r7} stmia r0!, {r8,r9,r10,r11} sub r1,r1,#16 ldmia r0, {r8,r9,r10,r11} + it cc movcc r8, r4 vst1.64 {q0,q1}, [r1,:256]! @ wipe + itt cc movcc r9, r5 movcc r10,r6 vst1.64 {q0,q1}, [r3,:256]! @ wipe + it cc movcc r11,r7 teq r1,r2 @ preserves carry stmia r0!, {r8,r9,r10,r11} bne LNEON_copy_n_zap - sub sp,ip,#96 + mov sp,ip vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15} ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11} - bx lr @ .word 0xe12fff1e + bx lr @ bx lr #endif .byte 77,111,110,116,103,111,109,101,114,121,32,109,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
diff --git a/third_party/boringssl/ios-arm/crypto/fipsmodule/bsaes-armv7.S b/third_party/boringssl/ios-arm/crypto/fipsmodule/bsaes-armv7.S index 77cb269..1cf914c 100644 --- a/third_party/boringssl/ios-arm/crypto/fipsmodule/bsaes-armv7.S +++ b/third_party/boringssl/ios-arm/crypto/fipsmodule/bsaes-armv7.S
@@ -86,7 +86,9 @@ # undef __thumb2__ #endif - +#ifdef __thumb2__ +.thumb_func _bsaes_decrypt8 +#endif .align 4 _bsaes_decrypt8: adr r6,_bsaes_decrypt8 @@ -577,7 +579,9 @@ .align 6 - +#ifdef __thumb2__ +.thumb_func _bsaes_encrypt8 +#endif .align 4 _bsaes_encrypt8: adr r6,_bsaes_encrypt8 @@ -1012,7 +1016,9 @@ veor q1, q1, q8 bx lr - +#ifdef __thumb2__ +.thumb_func _bsaes_key_convert +#endif .align 4 _bsaes_key_convert: adr r6,_bsaes_key_convert @@ -1076,7 +1082,9 @@ .globl _bsaes_cbc_encrypt .private_extern _bsaes_cbc_encrypt - +#ifdef __thumb2__ +.thumb_func _bsaes_cbc_encrypt +#endif .align 5 _bsaes_cbc_encrypt: #ifndef __KERNEL__ @@ -1344,7 +1352,9 @@ .globl _bsaes_ctr32_encrypt_blocks .private_extern _bsaes_ctr32_encrypt_blocks - +#ifdef __thumb2__ +.thumb_func _bsaes_ctr32_encrypt_blocks +#endif .align 5 _bsaes_ctr32_encrypt_blocks: cmp r2, #8 @ use plain AES for @@ -1572,7 +1582,9 @@ .globl _bsaes_xts_encrypt .private_extern _bsaes_xts_encrypt - +#ifdef __thumb2__ +.thumb_func _bsaes_xts_encrypt +#endif .align 4 _bsaes_xts_encrypt: mov ip, sp @@ -2053,7 +2065,9 @@ .globl _bsaes_xts_decrypt .private_extern _bsaes_xts_decrypt - +#ifdef __thumb2__ +.thumb_func _bsaes_xts_decrypt +#endif .align 4 _bsaes_xts_decrypt: mov ip, sp
diff --git a/third_party/boringssl/ios-arm/crypto/fipsmodule/ghash-armv4.S b/third_party/boringssl/ios-arm/crypto/fipsmodule/ghash-armv4.S index 39abb3f..0a053c5 100644 --- a/third_party/boringssl/ios-arm/crypto/fipsmodule/ghash-armv4.S +++ b/third_party/boringssl/ios-arm/crypto/fipsmodule/ghash-armv4.S
@@ -1,9 +1,14 @@ #include <openssl/arm_arch.h> -.syntax unified - .text +#if defined(__thumb2__) || defined(__clang__) +.syntax unified +#endif +#if defined(__thumb2__) +.thumb +#else .code 32 +#endif #ifdef __clang__ #define ldrplb ldrbpl @@ -19,22 +24,34 @@ .short 0x9180,0x8DA0,0xA9C0,0xB5E0 - +#ifdef __thumb2__ +.thumb_func rem_4bit_get +#endif rem_4bit_get: - sub r2,pc,#8 - sub r2,r2,#32 @ &rem_4bit +#if defined(__thumb2__) + adr r2,rem_4bit +#else + sub r2,pc,#8+32 @ &rem_4bit +#endif b Lrem_4bit_got nop + nop .globl _gcm_ghash_4bit .private_extern _gcm_ghash_4bit - +#ifdef __thumb2__ +.thumb_func _gcm_ghash_4bit +#endif +.align 4 _gcm_ghash_4bit: - sub r12,pc,#8 +#if defined(__thumb2__) + adr r12,rem_4bit +#else + sub r12,pc,#8+48 @ &rem_4bit +#endif add r3,r2,r3 @ r3 to point at the end stmdb sp!,{r3,r4,r5,r6,r7,r8,r9,r10,r11,lr} @ save r3/end too - sub r12,r12,#48 @ &rem_4bit ldmia r12,{r4,r5,r6,r7,r8,r9,r10,r11} @ copy rem_4bit ... stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11} @ ... to stack @@ -81,7 +98,10 @@ eor r5,r5,r6,lsl#28 ldrh r8,[sp,r12] @ rem_4bit[rem] eor r6,r10,r6,lsr#4 - ldrbpl r12,[r2,r3] +#ifdef __thumb2__ + it pl +#endif + ldrplb r12,[r2,r3] eor r6,r6,r7,lsl#28 eor r7,r11,r7,lsr#4 @@ -91,15 +111,24 @@ add r14,r14,r14 ldmia r11,{r8,r9,r10,r11} @ load Htbl[nhi] eor r4,r8,r4,lsr#4 - ldrbpl r8,[r0,r3] +#ifdef __thumb2__ + it pl +#endif + ldrplb r8,[r0,r3] eor r4,r4,r5,lsl#28 eor r5,r9,r5,lsr#4 ldrh r9,[sp,r14] eor r5,r5,r6,lsl#28 eor r6,r10,r6,lsr#4 eor r6,r6,r7,lsl#28 +#ifdef __thumb2__ + it pl +#endif eorpl r12,r12,r8 eor r7,r11,r7,lsr#4 +#ifdef __thumb2__ + itt pl +#endif andpl r14,r12,#0xf0 andpl r12,r12,#0x0f eor r7,r7,r9,lsl#16 @ ^= rem_4bit[rem] @@ -137,7 +166,11 @@ strb r10,[r0,#8+1] strb r11,[r0,#8] #endif - ldrbne r12,[r2,#15] + +#ifdef __thumb2__ + it ne +#endif + ldrneb r12,[r2,#15] #if __ARM_ARCH__>=7 && defined(__ARMEL__) rev r6,r6 str r6,[r0,#4] @@ -183,7 +216,9 @@ .globl _gcm_gmult_4bit .private_extern _gcm_gmult_4bit - +#ifdef __thumb2__ +.thumb_func _gcm_gmult_4bit +#endif _gcm_gmult_4bit: stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr} ldrb r12,[r0,#15] @@ -225,7 +260,10 @@ eor r5,r5,r6,lsl#28 ldrh r8,[r2,r12] @ rem_4bit[rem] eor r6,r10,r6,lsr#4 - ldrbpl r12,[r0,r3] +#ifdef __thumb2__ + it pl +#endif + ldrplb r12,[r0,r3] eor r6,r6,r7,lsl#28 eor r7,r11,r7,lsr#4 @@ -242,6 +280,9 @@ eor r6,r10,r6,lsr#4 eor r6,r6,r7,lsl#28 eor r7,r11,r7,lsr#4 +#ifdef __thumb2__ + itt pl +#endif andpl r14,r12,#0xf0 andpl r12,r12,#0x0f eor r7,r7,r8,lsl#16 @ ^= rem_4bit[rem] @@ -321,7 +362,9 @@ .globl _gcm_init_neon .private_extern _gcm_init_neon - +#ifdef __thumb2__ +.thumb_func _gcm_init_neon +#endif .align 4 _gcm_init_neon: vld1.64 d7,[r1]! @ load H @@ -343,7 +386,9 @@ .globl _gcm_gmult_neon .private_extern _gcm_gmult_neon - +#ifdef __thumb2__ +.thumb_func _gcm_gmult_neon +#endif .align 4 _gcm_gmult_neon: vld1.64 d7,[r0]! @ load Xi @@ -362,7 +407,9 @@ .globl _gcm_ghash_neon .private_extern _gcm_ghash_neon - +#ifdef __thumb2__ +.thumb_func _gcm_ghash_neon +#endif .align 4 _gcm_ghash_neon: vld1.64 d1,[r0]! @ load Xi
diff --git a/third_party/boringssl/ios-arm/crypto/fipsmodule/ghashv8-armx32.S b/third_party/boringssl/ios-arm/crypto/fipsmodule/ghashv8-armx32.S index 10a0ab0..af268926 100644 --- a/third_party/boringssl/ios-arm/crypto/fipsmodule/ghashv8-armx32.S +++ b/third_party/boringssl/ios-arm/crypto/fipsmodule/ghashv8-armx32.S
@@ -3,9 +3,12 @@ .text .code 32 +#undef __thumb2__ .globl _gcm_init_v8 .private_extern _gcm_init_v8 - +#ifdef __thumb2__ +.thumb_func _gcm_init_v8 +#endif .align 4 _gcm_init_v8: vld1.64 {q9},[r1] @ load input H @@ -56,7 +59,9 @@ .globl _gcm_gmult_v8 .private_extern _gcm_gmult_v8 - +#ifdef __thumb2__ +.thumb_func _gcm_gmult_v8 +#endif .align 4 _gcm_gmult_v8: vld1.64 {q9},[r0] @ load Xi @@ -98,7 +103,9 @@ .globl _gcm_ghash_v8 .private_extern _gcm_ghash_v8 - +#ifdef __thumb2__ +.thumb_func _gcm_ghash_v8 +#endif .align 4 _gcm_ghash_v8: vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ 32-bit ABI says so
diff --git a/third_party/boringssl/ios-arm/crypto/fipsmodule/sha1-armv4-large.S b/third_party/boringssl/ios-arm/crypto/fipsmodule/sha1-armv4-large.S index 652ccbc9..f97072c0 100644 --- a/third_party/boringssl/ios-arm/crypto/fipsmodule/sha1-armv4-large.S +++ b/third_party/boringssl/ios-arm/crypto/fipsmodule/sha1-armv4-large.S
@@ -1,16 +1,24 @@ #include <openssl/arm_arch.h> .text +#if defined(__thumb2__) +.syntax unified +.thumb +#else .code 32 +#endif .globl _sha1_block_data_order .private_extern _sha1_block_data_order - +#ifdef __thumb2__ +.thumb_func _sha1_block_data_order +#endif .align 5 _sha1_block_data_order: #if __ARM_MAX_ARCH__>=7 - sub r3,pc,#8 @ _sha1_block_data_order +Lsha1_block: + adr r3,Lsha1_block ldr r12,LOPENSSL_armcap ldr r12,[r3,r12] @ OPENSSL_armcap_P #ifdef __APPLE__ @@ -157,7 +165,12 @@ eor r10,r10,r7,ror#2 @ F_00_19(B,C,D) str r9,[r14,#-4]! add r3,r3,r10 @ E+=F_00_19(B,C,D) +#if defined(__thumb2__) + mov r12,sp + teq r14,r12 +#else teq r14,sp +#endif bne L_00_15 @ [((11+4)*5+2)*3] sub sp,sp,#25*4 #if __ARM_ARCH__<7 @@ -337,7 +350,12 @@ @ F_xx_xx add r3,r3,r9 @ E+=X[i] add r3,r3,r10 @ E+=F_20_39(B,C,D) +#if defined(__thumb2__) + mov r12,sp + teq r14,r12 +#else teq r14,sp @ preserve carry +#endif bne L_20_39_or_60_79 @ [+((12+3)*5+2)*4] bcs L_done @ [+((12+3)*5+2)*4], spare 300 bytes @@ -429,7 +447,12 @@ add r3,r3,r9 @ E+=X[i] add r3,r3,r10 @ E+=F_40_59(B,C,D) add r3,r3,r11,ror#2 +#if defined(__thumb2__) + mov r12,sp + teq r14,r12 +#else teq r14,sp +#endif bne L_40_59 @ [+((12+5)*5+2)*4] ldr r8,LK_60_79 @@ -465,7 +488,7 @@ LK_60_79:.word 0xca62c1d6 #if __ARM_MAX_ARCH__>=7 LOPENSSL_armcap: -.word OPENSSL_armcap_P-_sha1_block_data_order +.word OPENSSL_armcap_P-Lsha1_block #endif .byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,47,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 @@ -474,7 +497,9 @@ - +#ifdef __thumb2__ +.thumb_func sha1_block_data_order_neon +#endif .align 4 sha1_block_data_order_neon: LNEON: @@ -483,12 +508,12 @@ @ dmb @ errata #451034 on early Cortex A8 @ vstmdb sp!,{d8-d15} @ ABI specification says so mov r14,sp - sub sp,sp,#64 @ alloca + sub r12,sp,#64 adr r8,LK_00_19 - bic sp,sp,#15 @ align for 128-bit stores + bic r12,r12,#15 @ align for 128-bit stores ldmia r0,{r3,r4,r5,r6,r7} @ load context - mov r12,sp + mov sp,r12 @ alloca vld1.8 {q0,q1},[r1]! @ handles unaligned veor q15,q15,q15 @@ -1181,6 +1206,7 @@ sub r12,r12,#64 teq r1,r2 sub r8,r8,#16 + it eq subeq r1,r1,#64 vld1.8 {q0,q1},[r1]! ldr r9,[sp,#4] @@ -1310,10 +1336,13 @@ add r4,r4,r10 add r5,r5,r11 add r6,r6,r12 + it eq moveq sp,r14 add r7,r7,r9 + it ne ldrne r9,[sp] stmia r0,{r3,r4,r5,r6,r7} + itt ne addne r12,sp,#3*16 bne Loop_neon @@ -1323,6 +1352,15 @@ #endif #if __ARM_MAX_ARCH__>=7 +# if defined(__thumb2__) +# define INST(a,b,c,d) .byte c,d|0xf,a,b +# else +# define INST(a,b,c,d) .byte a,b,c,d|0x10 +# endif + +#ifdef __thumb2__ +.thumb_func sha1_block_data_order_armv8 +#endif .align 5 sha1_block_data_order_armv8: LARMv8: @@ -1351,98 +1389,98 @@ vadd.i32 q13,q8,q5 vrev32.8 q7,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 0 -.byte 0x68,0x0c,0x02,0xf2 @ sha1c q0,q1,q12 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 0 + INST(0x68,0x0c,0x02,0xe2) @ sha1c q0,q1,q12 vadd.i32 q12,q8,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 1 -.byte 0x6a,0x0c,0x06,0xf2 @ sha1c q0,q3,q13 + INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 1 + INST(0x6a,0x0c,0x06,0xe2) @ sha1c q0,q3,q13 vadd.i32 q13,q8,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 2 -.byte 0x68,0x0c,0x04,0xf2 @ sha1c q0,q2,q12 + INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7 + INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 2 + INST(0x68,0x0c,0x04,0xe2) @ sha1c q0,q2,q12 vadd.i32 q12,q8,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 3 -.byte 0x6a,0x0c,0x06,0xf2 @ sha1c q0,q3,q13 + INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4 + INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 3 + INST(0x6a,0x0c,0x06,0xe2) @ sha1c q0,q3,q13 vadd.i32 q13,q9,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 4 -.byte 0x68,0x0c,0x04,0xf2 @ sha1c q0,q2,q12 + INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5 + INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 4 + INST(0x68,0x0c,0x04,0xe2) @ sha1c q0,q2,q12 vadd.i32 q12,q9,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 5 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6 + INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 5 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q13,q9,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 6 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7 + INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 6 + INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12 vadd.i32 q12,q9,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 7 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4 + INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 7 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q13,q9,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 8 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5 + INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 8 + INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12 vadd.i32 q12,q10,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 9 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6 + INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 9 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q13,q10,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 10 -.byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 + INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7 + INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 10 + INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12 vadd.i32 q12,q10,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 11 -.byte 0x6a,0x0c,0x26,0xf2 @ sha1m q0,q3,q13 + INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4 + INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 11 + INST(0x6a,0x0c,0x26,0xe2) @ sha1m q0,q3,q13 vadd.i32 q13,q10,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 12 -.byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 + INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5 + INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 12 + INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12 vadd.i32 q12,q10,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 13 -.byte 0x6a,0x0c,0x26,0xf2 @ sha1m q0,q3,q13 + INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6 + INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 13 + INST(0x6a,0x0c,0x26,0xe2) @ sha1m q0,q3,q13 vadd.i32 q13,q11,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 14 -.byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 + INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7 + INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 14 + INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12 vadd.i32 q12,q11,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 15 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4 + INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 15 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q13,q11,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 16 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5 + INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 16 + INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12 vadd.i32 q12,q11,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 17 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 17 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q13,q11,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 18 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 18 + INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 19 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 19 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q1,q1,q2 vadd.i32 q0,q0,q14
diff --git a/third_party/boringssl/ios-arm/crypto/fipsmodule/sha256-armv4.S b/third_party/boringssl/ios-arm/crypto/fipsmodule/sha256-armv4.S index e55248a1..2ea6517 100644 --- a/third_party/boringssl/ios-arm/crypto/fipsmodule/sha256-armv4.S +++ b/third_party/boringssl/ios-arm/crypto/fipsmodule/sha256-armv4.S
@@ -87,7 +87,9 @@ .globl _sha256_block_data_order .private_extern _sha256_block_data_order - +#ifdef __thumb2__ +.thumb_func _sha256_block_data_order +#endif _sha256_block_data_order: Lsha256_block_data_order: #if __ARM_ARCH__<7 && !defined(__thumb2__) @@ -1878,7 +1880,9 @@ .globl _sha256_block_data_order_neon .private_extern _sha256_block_data_order_neon - +#ifdef __thumb2__ +.thumb_func _sha256_block_data_order_neon +#endif .align 5 .skip 16 _sha256_block_data_order_neon: @@ -2668,7 +2672,9 @@ # define INST(a,b,c,d) .byte a,b,c,d # endif - +#ifdef __thumb2__ +.thumb_func sha256_block_data_order_armv8 +#endif .align 5 sha256_block_data_order_armv8: LARMv8:
diff --git a/third_party/boringssl/ios-arm/crypto/fipsmodule/sha512-armv4.S b/third_party/boringssl/ios-arm/crypto/fipsmodule/sha512-armv4.S index 7bd3d67..b225c99 100644 --- a/third_party/boringssl/ios-arm/crypto/fipsmodule/sha512-armv4.S +++ b/third_party/boringssl/ios-arm/crypto/fipsmodule/sha512-armv4.S
@@ -1,3 +1,10 @@ +@ Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. +@ +@ Licensed under the OpenSSL license (the "License"). You may not use +@ this file except in compliance with the License. You can obtain a copy +@ in the file LICENSE in the source distribution or at +@ https://www.openssl.org/source/license.html + @ ==================================================================== @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL @@ -67,16 +74,12 @@ #endif .text -#if __ARM_ARCH__<7 || defined(__APPLE__) -.code 32 -#else +#if defined(__thumb2__) .syntax unified -# ifdef __thumb2__ -# define adrl adr .thumb -# else +# define adrl adr +#else .code 32 -# endif #endif @@ -133,13 +136,15 @@ .globl _sha512_block_data_order .private_extern _sha512_block_data_order - +#ifdef __thumb2__ +.thumb_func _sha512_block_data_order +#endif _sha512_block_data_order: Lsha512_block_data_order: -#if __ARM_ARCH__<7 +#if __ARM_ARCH__<7 && !defined(__thumb2__) sub r3,pc,#8 @ _sha512_block_data_order #else - adr r3,_sha512_block_data_order + adr r3,Lsha512_block_data_order #endif #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) ldr r12,LOPENSSL_armcap @@ -534,7 +539,9 @@ .globl _sha512_block_data_order_neon .private_extern _sha512_block_data_order_neon - +#ifdef __thumb2__ +.thumb_func _sha512_block_data_order_neon +#endif .align 4 _sha512_block_data_order_neon: LNEON:
diff --git a/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha1-armv8.S b/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha1-armv8.S index cfb4aa0..ff361f45 100644 --- a/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha1-armv8.S +++ b/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha1-armv8.S
@@ -9,7 +9,11 @@ .type sha1_block_data_order,%function .align 6 sha1_block_data_order: +#ifdef __ILP32__ + ldrsw x16,.LOPENSSL_armcap_P +#else ldr x16,.LOPENSSL_armcap_P +#endif adr x17,.LOPENSSL_armcap_P add x16,x16,x17 ldr w16,[x16] @@ -1208,7 +1212,11 @@ .long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59 .long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79 .LOPENSSL_armcap_P: +#ifdef __ILP32__ +.long OPENSSL_armcap_P-. +#else .quad OPENSSL_armcap_P-. +#endif .byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2
diff --git a/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha256-armv8.S b/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha256-armv8.S index bfc552cb..19db339 100644 --- a/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha256-armv8.S +++ b/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha256-armv8.S
@@ -1,5 +1,46 @@ #if defined(__aarch64__) -#include <openssl/arm_arch.h> +// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the OpenSSL license (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html + +// ==================================================================== +// Written by Andy Polyakov <appro@openssl.org> for the OpenSSL +// project. The module is, however, dual licensed under OpenSSL and +// CRYPTOGAMS licenses depending on where you obtain it. For further +// details see http://www.openssl.org/~appro/cryptogams/. +// +// Permission to use under GPLv2 terms is granted. +// ==================================================================== +// +// SHA256/512 for ARMv8. +// +// Performance in cycles per processed byte and improvement coefficient +// over code generated with "default" compiler: +// +// SHA256-hw SHA256(*) SHA512 +// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) +// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) +// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) +// Denver 2.01 10.5 (+26%) 6.70 (+8%) +// X-Gene 20.0 (+100%) 12.8 (+300%(***)) +// Mongoose 2.36 13.0 (+50%) 8.36 (+33%) +// +// (*) Software SHA256 results are of lesser relevance, presented +// mostly for informational purposes. +// (**) The result is a trade-off: it's possible to improve it by +// 10% (or by 1 cycle per round), but at the cost of 20% loss +// on Cortex-A53 (or by 4 cycles per round). +// (***) Super-impressive coefficients over gcc-generated code are +// indication of some compiler "pathology", most notably code +// generated with -mgeneral-regs-only is significanty faster +// and the gap is only 40-90%. + +#ifndef __KERNEL__ +# include <openssl/arm_arch.h> +#endif .text @@ -9,12 +50,18 @@ .type sha256_block_data_order,%function .align 6 sha256_block_data_order: +#ifndef __KERNEL__ +# ifdef __ILP32__ + ldrsw x16,.LOPENSSL_armcap_P +# else ldr x16,.LOPENSSL_armcap_P +# endif adr x17,.LOPENSSL_armcap_P add x16,x16,x17 ldr w16,[x16] tst w16,#ARMV8_SHA256 b.ne .Lv8_entry +#endif stp x29,x30,[sp,#-128]! add x29,sp,#0 @@ -998,12 +1045,19 @@ .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 .long 0 //terminator .size .LK256,.-.LK256 +#ifndef __KERNEL__ .align 3 .LOPENSSL_armcap_P: +# ifdef __ILP32__ +.long OPENSSL_armcap_P-. +# else .quad OPENSSL_armcap_P-. +# endif +#endif .byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2 +#ifndef __KERNEL__ .type sha256_block_armv8,%function .align 6 sha256_block_armv8: @@ -1142,5 +1196,8 @@ ldr x29,[sp],#16 ret .size sha256_block_armv8,.-sha256_block_armv8 +#endif +#ifndef __KERNEL__ .comm OPENSSL_armcap_P,4,4 #endif +#endif
diff --git a/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha512-armv8.S b/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha512-armv8.S index 4645722..bb052b7 100644 --- a/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha512-armv8.S +++ b/third_party/boringssl/linux-aarch64/crypto/fipsmodule/sha512-armv8.S
@@ -1,5 +1,46 @@ #if defined(__aarch64__) -#include <openssl/arm_arch.h> +// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the OpenSSL license (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html + +// ==================================================================== +// Written by Andy Polyakov <appro@openssl.org> for the OpenSSL +// project. The module is, however, dual licensed under OpenSSL and +// CRYPTOGAMS licenses depending on where you obtain it. For further +// details see http://www.openssl.org/~appro/cryptogams/. +// +// Permission to use under GPLv2 terms is granted. +// ==================================================================== +// +// SHA256/512 for ARMv8. +// +// Performance in cycles per processed byte and improvement coefficient +// over code generated with "default" compiler: +// +// SHA256-hw SHA256(*) SHA512 +// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) +// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) +// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) +// Denver 2.01 10.5 (+26%) 6.70 (+8%) +// X-Gene 20.0 (+100%) 12.8 (+300%(***)) +// Mongoose 2.36 13.0 (+50%) 8.36 (+33%) +// +// (*) Software SHA256 results are of lesser relevance, presented +// mostly for informational purposes. +// (**) The result is a trade-off: it's possible to improve it by +// 10% (or by 1 cycle per round), but at the cost of 20% loss +// on Cortex-A53 (or by 4 cycles per round). +// (***) Super-impressive coefficients over gcc-generated code are +// indication of some compiler "pathology", most notably code +// generated with -mgeneral-regs-only is significanty faster +// and the gap is only 40-90%. + +#ifndef __KERNEL__ +# include <openssl/arm_arch.h> +#endif .text @@ -1016,11 +1057,19 @@ .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 .quad 0 // terminator .size .LK512,.-.LK512 +#ifndef __KERNEL__ .align 3 .LOPENSSL_armcap_P: +# ifdef __ILP32__ +.long OPENSSL_armcap_P-. +# else .quad OPENSSL_armcap_P-. +# endif +#endif .byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2 +#ifndef __KERNEL__ .comm OPENSSL_armcap_P,4,4 #endif +#endif
diff --git a/third_party/boringssl/linux-arm/crypto/fipsmodule/aes-armv4.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/aes-armv4.S index 40a1253e..f11bc7e 100644 --- a/third_party/boringssl/linux-arm/crypto/fipsmodule/aes-armv4.S +++ b/third_party/boringssl/linux-arm/crypto/fipsmodule/aes-armv4.S
@@ -1,4 +1,11 @@ #if defined(__arm__) +@ Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. +@ +@ Licensed under the OpenSSL license (the "License"). You may not use +@ this file except in compliance with the License. You can obtain a copy +@ in the file LICENSE in the source distribution or at +@ https://www.openssl.org/source/license.html + @ ==================================================================== @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL @@ -39,15 +46,12 @@ #endif .text -#if __ARM_ARCH__<7 -.code 32 -#else +#if defined(__thumb2__) && !defined(__APPLE__) .syntax unified -# if defined(__thumb2__) && !defined(__APPLE__) .thumb -# else +#else .code 32 -# endif +#undef __thumb2__ #endif .type AES_Te,%object @@ -163,7 +167,7 @@ .type asm_AES_encrypt,%function .align 5 asm_AES_encrypt: -#if __ARM_ARCH__<7 +#ifndef __thumb2__ sub r3,pc,#8 @ asm_AES_encrypt #else adr r3,asm_AES_encrypt @@ -414,19 +418,19 @@ .align 5 asm_AES_set_encrypt_key: _armv4_AES_set_encrypt_key: -#if __ARM_ARCH__<7 +#ifndef __thumb2__ sub r3,pc,#8 @ asm_AES_set_encrypt_key #else adr r3,asm_AES_set_encrypt_key #endif teq r0,#0 -#if __ARM_ARCH__>=7 +#ifdef __thumb2__ itt eq @ Thumb2 thing, sanity check in ARM #endif moveq r0,#-1 beq .Labrt teq r2,#0 -#if __ARM_ARCH__>=7 +#ifdef __thumb2__ itt eq @ Thumb2 thing, sanity check in ARM #endif moveq r0,#-1 @@ -437,7 +441,7 @@ teq r1,#192 beq .Lok teq r1,#256 -#if __ARM_ARCH__>=7 +#ifdef __thumb2__ itt ne @ Thumb2 thing, sanity check in ARM #endif movne r0,#-1 @@ -598,7 +602,7 @@ str r2,[r11,#-16] subs r12,r12,#1 str r3,[r11,#-12] -#if __ARM_ARCH__>=7 +#ifdef __thumb2__ itt eq @ Thumb2 thing, sanity check in ARM #endif subeq r2,r11,#216 @@ -670,7 +674,7 @@ str r2,[r11,#-24] subs r12,r12,#1 str r3,[r11,#-20] -#if __ARM_ARCH__>=7 +#ifdef __thumb2__ itt eq @ Thumb2 thing, sanity check in ARM #endif subeq r2,r11,#256 @@ -743,7 +747,7 @@ ldr r12,[r0,#240] mov r7,r0 @ input add r8,r0,r12,lsl#4 - mov r11,r1 @ ouput + mov r11,r1 @ output add r10,r1,r12,lsl#4 str r12,[r1,#240] @@ -938,7 +942,7 @@ .type asm_AES_decrypt,%function .align 5 asm_AES_decrypt: -#if __ARM_ARCH__<7 +#ifndef __thumb2__ sub r3,pc,#8 @ asm_AES_decrypt #else adr r3,asm_AES_decrypt
diff --git a/third_party/boringssl/linux-arm/crypto/fipsmodule/aesv8-armx32.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/aesv8-armx32.S index c2f6b68e..7c7ef19c 100644 --- a/third_party/boringssl/linux-arm/crypto/fipsmodule/aesv8-armx32.S +++ b/third_party/boringssl/linux-arm/crypto/fipsmodule/aesv8-armx32.S
@@ -3,9 +3,10 @@ #if __ARM_MAX_ARCH__>=7 .text -.arch armv7-a +.arch armv7-a @ don't confuse not-so-latest binutils with argv8 :-) .fpu neon .code 32 +#undef __thumb2__ .align 5 .Lrcon: .long 0x01,0x01,0x01,0x01
diff --git a/third_party/boringssl/linux-arm/crypto/fipsmodule/armv4-mont.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/armv4-mont.S index e59599f..e77a9ea 100644 --- a/third_party/boringssl/linux-arm/crypto/fipsmodule/armv4-mont.S +++ b/third_party/boringssl/linux-arm/crypto/fipsmodule/armv4-mont.S
@@ -2,7 +2,12 @@ #include <openssl/arm_arch.h> .text +#if defined(__thumb2__) +.syntax unified +.thumb +#else .code 32 +#endif #if __ARM_MAX_ARCH__>=7 .align 5 @@ -22,7 +27,7 @@ #if __ARM_MAX_ARCH__>=7 tst ip,#7 bne .Lialu - adr r0,bn_mul_mont + adr r0,.Lbn_mul_mont ldr r2,.LOPENSSL_armcap ldr r0,[r0,r2] #ifdef __APPLE__ @@ -38,6 +43,9 @@ #endif cmp ip,#2 mov r0,ip @ load num +#ifdef __thumb2__ + ittt lt +#endif movlt r0,#0 addlt sp,sp,#2*4 blt .Labrt @@ -85,10 +93,11 @@ ldr r8,[r0,#14*4] @ restore n0 adc r14,r14,#0 str r12,[r0] @ tp[num-1]= + mov r7,sp str r14,[r0,#4] @ tp[num]= .Louter: - sub r7,r0,sp @ "original" r0-1 value + sub r7,r0,r7 @ "original" r0-1 value sub r1,r1,r7 @ "rewind" ap to &ap[1] ldr r2,[r4,#4]! @ *(++bp) sub r3,r3,r7 @ "rewind" np to &np[1] @@ -133,11 +142,16 @@ str r14,[r0,#4] @ tp[num]= cmp r4,r7 +#ifdef __thumb2__ + itt ne +#endif + movne r7,sp bne .Louter ldr r2,[r0,#12*4] @ pull rp + mov r5,sp add r0,r0,#4 @ r0 to point at &tp[num] - sub r5,r0,sp @ "original" num value + sub r5,r0,r5 @ "original" num value mov r4,sp @ "rewind" r4 mov r1,r4 @ "borrow" r1 sub r3,r3,r5 @ "rewind" r3 to &np[0] @@ -163,13 +177,14 @@ cmp r4,r0 bne .Lcopy - add sp,r0,#4 @ skip over tp[num+1] + mov sp,r0 + add sp,sp,#4 @ skip over tp[num+1] ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} @ restore registers add sp,sp,#2*4 @ skip over {r0,r2} mov r0,#1 .Labrt: #if __ARM_ARCH__>=5 - bx lr @ .word 0xe12fff1e + bx lr @ bx lr #else tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet @@ -187,27 +202,31 @@ stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11} vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ ABI specification says so ldmia ip,{r4,r5} @ load rest of parameter block + mov ip,sp - sub r7,sp,#16 + cmp r5,#8 + bhi .LNEON_8n + + @ special case for r5==8, everything is in register bank... + vld1.32 {d28[0]}, [r2,:32]! - sub r7,r7,r5,lsl#4 + veor d8,d8,d8 + sub r7,sp,r5,lsl#4 vld1.32 {d0,d1,d2,d3}, [r1]! @ can't specify :32 :-( and r7,r7,#-64 vld1.32 {d30[0]}, [r4,:32] mov sp,r7 @ alloca - veor d8,d8,d8 - subs r8,r5,#8 vzip.16 d28,d8 vmull.u32 q6,d28,d0[0] vmull.u32 q7,d28,d0[1] vmull.u32 q8,d28,d1[0] - vshl.i64 d10,d13,#16 + vshl.i64 d29,d13,#16 vmull.u32 q9,d28,d1[1] - vadd.u64 d10,d10,d12 + vadd.u64 d29,d29,d12 veor d8,d8,d8 - vmul.u32 d29,d10,d30 + vmul.u32 d29,d29,d30 vmull.u32 q10,d28,d2[0] vld1.32 {d4,d5,d6,d7}, [r3]! @@ -216,10 +235,6 @@ vzip.16 d29,d8 vmull.u32 q13,d28,d3[1] - bne .LNEON_1st - - @ special case for num=8, everything is in register bank... - vmlal.u32 q6,d29,d4[0] sub r9,r5,#1 vmlal.u32 q7,d29,d4[1] @@ -255,13 +270,13 @@ vmlal.u32 q6,d28,d0[0] vmlal.u32 q7,d28,d0[1] vmlal.u32 q8,d28,d1[0] - vshl.i64 d10,d13,#16 + vshl.i64 d29,d13,#16 vmlal.u32 q9,d28,d1[1] - vadd.u64 d10,d10,d12 + vadd.u64 d29,d29,d12 veor d8,d8,d8 subs r9,r9,#1 - vmul.u32 d29,d10,d30 + vmul.u32 d29,d29,d30 vmlal.u32 q10,d28,d2[0] vmlal.u32 q11,d28,d2[1] @@ -298,231 +313,576 @@ vshr.u64 d10,d12,#16 mov r8,r5 vadd.u64 d13,d13,d10 - add r6,sp,#16 + add r6,sp,#96 vshr.u64 d10,d13,#16 vzip.16 d12,d13 - b .LNEON_tail2 + b .LNEON_tail_entry .align 4 -.LNEON_1st: - vmlal.u32 q6,d29,d4[0] - vld1.32 {d0,d1,d2,d3}, [r1]! - vmlal.u32 q7,d29,d4[1] - subs r8,r8,#8 - vmlal.u32 q8,d29,d5[0] - vmlal.u32 q9,d29,d5[1] - - vmlal.u32 q10,d29,d6[0] - vld1.32 {d4,d5}, [r3]! - vmlal.u32 q11,d29,d6[1] - vst1.64 {q6,q7}, [r7,:256]! - vmlal.u32 q12,d29,d7[0] - vmlal.u32 q13,d29,d7[1] - vst1.64 {q8,q9}, [r7,:256]! - - vmull.u32 q6,d28,d0[0] - vld1.32 {d6,d7}, [r3]! - vmull.u32 q7,d28,d0[1] - vst1.64 {q10,q11}, [r7,:256]! - vmull.u32 q8,d28,d1[0] - vmull.u32 q9,d28,d1[1] - vst1.64 {q12,q13}, [r7,:256]! - - vmull.u32 q10,d28,d2[0] - vmull.u32 q11,d28,d2[1] - vmull.u32 q12,d28,d3[0] - vmull.u32 q13,d28,d3[1] - - bne .LNEON_1st - - vmlal.u32 q6,d29,d4[0] - add r6,sp,#16 - vmlal.u32 q7,d29,d4[1] - sub r1,r1,r5,lsl#2 @ rewind r1 - vmlal.u32 q8,d29,d5[0] - vld1.64 {q5}, [sp,:128] - vmlal.u32 q9,d29,d5[1] - sub r9,r5,#1 - - vmlal.u32 q10,d29,d6[0] - vst1.64 {q6,q7}, [r7,:256]! - vmlal.u32 q11,d29,d6[1] - vshr.u64 d10,d10,#16 - vld1.64 {q6}, [r6, :128]! - vmlal.u32 q12,d29,d7[0] - vst1.64 {q8,q9}, [r7,:256]! - vmlal.u32 q13,d29,d7[1] - - vst1.64 {q10,q11}, [r7,:256]! - vadd.u64 d10,d10,d11 - veor q4,q4,q4 - vst1.64 {q12,q13}, [r7,:256]! - vld1.64 {q7,q8}, [r6, :256]! - vst1.64 {q4}, [r7,:128] - vshr.u64 d10,d10,#16 - - b .LNEON_outer - -.align 4 -.LNEON_outer: - vld1.32 {d28[0]}, [r2,:32]! - sub r3,r3,r5,lsl#2 @ rewind r3 - vld1.32 {d0,d1,d2,d3}, [r1]! - veor d8,d8,d8 - mov r7,sp - vzip.16 d28,d8 +.LNEON_8n: + veor q6,q6,q6 + sub r7,sp,#128 + veor q7,q7,q7 + sub r7,r7,r5,lsl#4 + veor q8,q8,q8 + and r7,r7,#-64 + veor q9,q9,q9 + mov sp,r7 @ alloca + veor q10,q10,q10 + add r7,r7,#256 + veor q11,q11,q11 sub r8,r5,#8 - vadd.u64 d12,d12,d10 + veor q12,q12,q12 + veor q13,q13,q13 + +.LNEON_8n_init: + vst1.64 {q6,q7},[r7,:256]! + subs r8,r8,#8 + vst1.64 {q8,q9},[r7,:256]! + vst1.64 {q10,q11},[r7,:256]! + vst1.64 {q12,q13},[r7,:256]! + bne .LNEON_8n_init + + add r6,sp,#256 + vld1.32 {d0,d1,d2,d3},[r1]! + add r10,sp,#8 + vld1.32 {d30[0]},[r4,:32] + mov r9,r5 + b .LNEON_8n_outer + +.align 4 +.LNEON_8n_outer: + vld1.32 {d28[0]},[r2,:32]! @ *b++ + veor d8,d8,d8 + vzip.16 d28,d8 + add r7,sp,#128 + vld1.32 {d4,d5,d6,d7},[r3]! vmlal.u32 q6,d28,d0[0] - vld1.64 {q9,q10},[r6,:256]! vmlal.u32 q7,d28,d0[1] - vmlal.u32 q8,d28,d1[0] - vld1.64 {q11,q12},[r6,:256]! - vmlal.u32 q9,d28,d1[1] - - vshl.i64 d10,d13,#16 veor d8,d8,d8 - vadd.u64 d10,d10,d12 - vld1.64 {q13},[r6,:128]! - vmul.u32 d29,d10,d30 - + vmlal.u32 q8,d28,d1[0] + vshl.i64 d29,d13,#16 + vmlal.u32 q9,d28,d1[1] + vadd.u64 d29,d29,d12 vmlal.u32 q10,d28,d2[0] - vld1.32 {d4,d5,d6,d7}, [r3]! + vmul.u32 d29,d29,d30 vmlal.u32 q11,d28,d2[1] + vst1.32 {d28},[sp,:64] @ put aside smashed b[8*i+0] vmlal.u32 q12,d28,d3[0] vzip.16 d29,d8 vmlal.u32 q13,d28,d3[1] - -.LNEON_inner: + vld1.32 {d28[0]},[r2,:32]! @ *b++ vmlal.u32 q6,d29,d4[0] - vld1.32 {d0,d1,d2,d3}, [r1]! + veor d10,d10,d10 vmlal.u32 q7,d29,d4[1] - subs r8,r8,#8 + vzip.16 d28,d10 vmlal.u32 q8,d29,d5[0] + vshr.u64 d12,d12,#16 vmlal.u32 q9,d29,d5[1] - vst1.64 {q6,q7}, [r7,:256]! - vmlal.u32 q10,d29,d6[0] - vld1.64 {q6}, [r6, :128]! + vadd.u64 d12,d12,d13 vmlal.u32 q11,d29,d6[1] - vst1.64 {q8,q9}, [r7,:256]! + vshr.u64 d12,d12,#16 vmlal.u32 q12,d29,d7[0] - vld1.64 {q7,q8}, [r6, :256]! vmlal.u32 q13,d29,d7[1] - vst1.64 {q10,q11}, [r7,:256]! + vadd.u64 d14,d14,d12 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+0] + vmlal.u32 q7,d28,d0[0] + vld1.64 {q6},[r6,:128]! + vmlal.u32 q8,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q9,d28,d1[0] + vshl.i64 d29,d15,#16 + vmlal.u32 q10,d28,d1[1] + vadd.u64 d29,d29,d14 + vmlal.u32 q11,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q12,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+1] + vmlal.u32 q13,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q6,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q7,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q8,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q9,d29,d5[0] + vshr.u64 d14,d14,#16 + vmlal.u32 q10,d29,d5[1] + vmlal.u32 q11,d29,d6[0] + vadd.u64 d14,d14,d15 + vmlal.u32 q12,d29,d6[1] + vshr.u64 d14,d14,#16 + vmlal.u32 q13,d29,d7[0] + vmlal.u32 q6,d29,d7[1] + vadd.u64 d16,d16,d14 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+1] + vmlal.u32 q8,d28,d0[0] + vld1.64 {q7},[r6,:128]! + vmlal.u32 q9,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q10,d28,d1[0] + vshl.i64 d29,d17,#16 + vmlal.u32 q11,d28,d1[1] + vadd.u64 d29,d29,d16 + vmlal.u32 q12,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q13,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+2] + vmlal.u32 q6,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q7,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q8,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q9,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q10,d29,d5[0] + vshr.u64 d16,d16,#16 + vmlal.u32 q11,d29,d5[1] + vmlal.u32 q12,d29,d6[0] + vadd.u64 d16,d16,d17 + vmlal.u32 q13,d29,d6[1] + vshr.u64 d16,d16,#16 + vmlal.u32 q6,d29,d7[0] + vmlal.u32 q7,d29,d7[1] + vadd.u64 d18,d18,d16 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+2] + vmlal.u32 q9,d28,d0[0] + vld1.64 {q8},[r6,:128]! + vmlal.u32 q10,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q11,d28,d1[0] + vshl.i64 d29,d19,#16 + vmlal.u32 q12,d28,d1[1] + vadd.u64 d29,d29,d18 + vmlal.u32 q13,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q6,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+3] + vmlal.u32 q7,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q8,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q9,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q10,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q11,d29,d5[0] + vshr.u64 d18,d18,#16 + vmlal.u32 q12,d29,d5[1] + vmlal.u32 q13,d29,d6[0] + vadd.u64 d18,d18,d19 + vmlal.u32 q6,d29,d6[1] + vshr.u64 d18,d18,#16 + vmlal.u32 q7,d29,d7[0] + vmlal.u32 q8,d29,d7[1] + vadd.u64 d20,d20,d18 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+3] + vmlal.u32 q10,d28,d0[0] + vld1.64 {q9},[r6,:128]! + vmlal.u32 q11,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q12,d28,d1[0] + vshl.i64 d29,d21,#16 + vmlal.u32 q13,d28,d1[1] + vadd.u64 d29,d29,d20 + vmlal.u32 q6,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q7,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+4] + vmlal.u32 q8,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q9,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q10,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q11,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q12,d29,d5[0] + vshr.u64 d20,d20,#16 + vmlal.u32 q13,d29,d5[1] + vmlal.u32 q6,d29,d6[0] + vadd.u64 d20,d20,d21 + vmlal.u32 q7,d29,d6[1] + vshr.u64 d20,d20,#16 + vmlal.u32 q8,d29,d7[0] + vmlal.u32 q9,d29,d7[1] + vadd.u64 d22,d22,d20 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+4] + vmlal.u32 q11,d28,d0[0] + vld1.64 {q10},[r6,:128]! + vmlal.u32 q12,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q13,d28,d1[0] + vshl.i64 d29,d23,#16 + vmlal.u32 q6,d28,d1[1] + vadd.u64 d29,d29,d22 + vmlal.u32 q7,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q8,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+5] + vmlal.u32 q9,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q10,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q11,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q12,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q13,d29,d5[0] + vshr.u64 d22,d22,#16 + vmlal.u32 q6,d29,d5[1] + vmlal.u32 q7,d29,d6[0] + vadd.u64 d22,d22,d23 + vmlal.u32 q8,d29,d6[1] + vshr.u64 d22,d22,#16 + vmlal.u32 q9,d29,d7[0] + vmlal.u32 q10,d29,d7[1] + vadd.u64 d24,d24,d22 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+5] + vmlal.u32 q12,d28,d0[0] + vld1.64 {q11},[r6,:128]! + vmlal.u32 q13,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q6,d28,d1[0] + vshl.i64 d29,d25,#16 + vmlal.u32 q7,d28,d1[1] + vadd.u64 d29,d29,d24 + vmlal.u32 q8,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q9,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+6] + vmlal.u32 q10,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q11,d28,d3[1] + vld1.32 {d28[0]},[r2,:32]! @ *b++ + vmlal.u32 q12,d29,d4[0] + veor d10,d10,d10 + vmlal.u32 q13,d29,d4[1] + vzip.16 d28,d10 + vmlal.u32 q6,d29,d5[0] + vshr.u64 d24,d24,#16 + vmlal.u32 q7,d29,d5[1] + vmlal.u32 q8,d29,d6[0] + vadd.u64 d24,d24,d25 + vmlal.u32 q9,d29,d6[1] + vshr.u64 d24,d24,#16 + vmlal.u32 q10,d29,d7[0] + vmlal.u32 q11,d29,d7[1] + vadd.u64 d26,d26,d24 + vst1.32 {d29},[r10,:64]! @ put aside smashed m[8*i+6] + vmlal.u32 q13,d28,d0[0] + vld1.64 {q12},[r6,:128]! + vmlal.u32 q6,d28,d0[1] + veor d8,d8,d8 + vmlal.u32 q7,d28,d1[0] + vshl.i64 d29,d27,#16 + vmlal.u32 q8,d28,d1[1] + vadd.u64 d29,d29,d26 + vmlal.u32 q9,d28,d2[0] + vmul.u32 d29,d29,d30 + vmlal.u32 q10,d28,d2[1] + vst1.32 {d28},[r10,:64]! @ put aside smashed b[8*i+7] + vmlal.u32 q11,d28,d3[0] + vzip.16 d29,d8 + vmlal.u32 q12,d28,d3[1] + vld1.32 {d28},[sp,:64] @ pull smashed b[8*i+0] + vmlal.u32 q13,d29,d4[0] + vld1.32 {d0,d1,d2,d3},[r1]! + vmlal.u32 q6,d29,d4[1] + vmlal.u32 q7,d29,d5[0] + vshr.u64 d26,d26,#16 + vmlal.u32 q8,d29,d5[1] + vmlal.u32 q9,d29,d6[0] + vadd.u64 d26,d26,d27 + vmlal.u32 q10,d29,d6[1] + vshr.u64 d26,d26,#16 + vmlal.u32 q11,d29,d7[0] + vmlal.u32 q12,d29,d7[1] + vadd.u64 d12,d12,d26 + vst1.32 {d29},[r10,:64] @ put aside smashed m[8*i+7] + add r10,sp,#8 @ rewind + sub r8,r5,#8 + b .LNEON_8n_inner +.align 4 +.LNEON_8n_inner: + subs r8,r8,#8 vmlal.u32 q6,d28,d0[0] - vld1.64 {q9,q10}, [r6, :256]! + vld1.64 {q13},[r6,:128] vmlal.u32 q7,d28,d0[1] - vst1.64 {q12,q13}, [r7,:256]! + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+0] vmlal.u32 q8,d28,d1[0] - vld1.64 {q11,q12}, [r6, :256]! + vld1.32 {d4,d5,d6,d7},[r3]! vmlal.u32 q9,d28,d1[1] - vld1.32 {d4,d5,d6,d7}, [r3]! - + it ne + addne r6,r6,#16 @ don't advance in last iteration vmlal.u32 q10,d28,d2[0] - vld1.64 {q13}, [r6, :128]! vmlal.u32 q11,d28,d2[1] vmlal.u32 q12,d28,d3[0] vmlal.u32 q13,d28,d3[1] - - bne .LNEON_inner - + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+1] vmlal.u32 q6,d29,d4[0] - add r6,sp,#16 vmlal.u32 q7,d29,d4[1] - sub r1,r1,r5,lsl#2 @ rewind r1 vmlal.u32 q8,d29,d5[0] - vld1.64 {q5}, [sp,:128] vmlal.u32 q9,d29,d5[1] - subs r9,r9,#1 - vmlal.u32 q10,d29,d6[0] - vst1.64 {q6,q7}, [r7,:256]! vmlal.u32 q11,d29,d6[1] - vld1.64 {q6}, [r6, :128]! - vshr.u64 d10,d10,#16 - vst1.64 {q8,q9}, [r7,:256]! vmlal.u32 q12,d29,d7[0] - vld1.64 {q7,q8}, [r6, :256]! vmlal.u32 q13,d29,d7[1] + vst1.64 {q6},[r7,:128]! + vmlal.u32 q7,d28,d0[0] + vld1.64 {q6},[r6,:128] + vmlal.u32 q8,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+1] + vmlal.u32 q9,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q10,d28,d1[1] + vmlal.u32 q11,d28,d2[0] + vmlal.u32 q12,d28,d2[1] + vmlal.u32 q13,d28,d3[0] + vmlal.u32 q6,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+2] + vmlal.u32 q7,d29,d4[0] + vmlal.u32 q8,d29,d4[1] + vmlal.u32 q9,d29,d5[0] + vmlal.u32 q10,d29,d5[1] + vmlal.u32 q11,d29,d6[0] + vmlal.u32 q12,d29,d6[1] + vmlal.u32 q13,d29,d7[0] + vmlal.u32 q6,d29,d7[1] + vst1.64 {q7},[r7,:128]! + vmlal.u32 q8,d28,d0[0] + vld1.64 {q7},[r6,:128] + vmlal.u32 q9,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+2] + vmlal.u32 q10,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q11,d28,d1[1] + vmlal.u32 q12,d28,d2[0] + vmlal.u32 q13,d28,d2[1] + vmlal.u32 q6,d28,d3[0] + vmlal.u32 q7,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+3] + vmlal.u32 q8,d29,d4[0] + vmlal.u32 q9,d29,d4[1] + vmlal.u32 q10,d29,d5[0] + vmlal.u32 q11,d29,d5[1] + vmlal.u32 q12,d29,d6[0] + vmlal.u32 q13,d29,d6[1] + vmlal.u32 q6,d29,d7[0] + vmlal.u32 q7,d29,d7[1] + vst1.64 {q8},[r7,:128]! + vmlal.u32 q9,d28,d0[0] + vld1.64 {q8},[r6,:128] + vmlal.u32 q10,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+3] + vmlal.u32 q11,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q12,d28,d1[1] + vmlal.u32 q13,d28,d2[0] + vmlal.u32 q6,d28,d2[1] + vmlal.u32 q7,d28,d3[0] + vmlal.u32 q8,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+4] + vmlal.u32 q9,d29,d4[0] + vmlal.u32 q10,d29,d4[1] + vmlal.u32 q11,d29,d5[0] + vmlal.u32 q12,d29,d5[1] + vmlal.u32 q13,d29,d6[0] + vmlal.u32 q6,d29,d6[1] + vmlal.u32 q7,d29,d7[0] + vmlal.u32 q8,d29,d7[1] + vst1.64 {q9},[r7,:128]! + vmlal.u32 q10,d28,d0[0] + vld1.64 {q9},[r6,:128] + vmlal.u32 q11,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+4] + vmlal.u32 q12,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q13,d28,d1[1] + vmlal.u32 q6,d28,d2[0] + vmlal.u32 q7,d28,d2[1] + vmlal.u32 q8,d28,d3[0] + vmlal.u32 q9,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+5] + vmlal.u32 q10,d29,d4[0] + vmlal.u32 q11,d29,d4[1] + vmlal.u32 q12,d29,d5[0] + vmlal.u32 q13,d29,d5[1] + vmlal.u32 q6,d29,d6[0] + vmlal.u32 q7,d29,d6[1] + vmlal.u32 q8,d29,d7[0] + vmlal.u32 q9,d29,d7[1] + vst1.64 {q10},[r7,:128]! + vmlal.u32 q11,d28,d0[0] + vld1.64 {q10},[r6,:128] + vmlal.u32 q12,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+5] + vmlal.u32 q13,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q6,d28,d1[1] + vmlal.u32 q7,d28,d2[0] + vmlal.u32 q8,d28,d2[1] + vmlal.u32 q9,d28,d3[0] + vmlal.u32 q10,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+6] + vmlal.u32 q11,d29,d4[0] + vmlal.u32 q12,d29,d4[1] + vmlal.u32 q13,d29,d5[0] + vmlal.u32 q6,d29,d5[1] + vmlal.u32 q7,d29,d6[0] + vmlal.u32 q8,d29,d6[1] + vmlal.u32 q9,d29,d7[0] + vmlal.u32 q10,d29,d7[1] + vst1.64 {q11},[r7,:128]! + vmlal.u32 q12,d28,d0[0] + vld1.64 {q11},[r6,:128] + vmlal.u32 q13,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+6] + vmlal.u32 q6,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q7,d28,d1[1] + vmlal.u32 q8,d28,d2[0] + vmlal.u32 q9,d28,d2[1] + vmlal.u32 q10,d28,d3[0] + vmlal.u32 q11,d28,d3[1] + vld1.32 {d28},[r10,:64]! @ pull smashed b[8*i+7] + vmlal.u32 q12,d29,d4[0] + vmlal.u32 q13,d29,d4[1] + vmlal.u32 q6,d29,d5[0] + vmlal.u32 q7,d29,d5[1] + vmlal.u32 q8,d29,d6[0] + vmlal.u32 q9,d29,d6[1] + vmlal.u32 q10,d29,d7[0] + vmlal.u32 q11,d29,d7[1] + vst1.64 {q12},[r7,:128]! + vmlal.u32 q13,d28,d0[0] + vld1.64 {q12},[r6,:128] + vmlal.u32 q6,d28,d0[1] + vld1.32 {d29},[r10,:64]! @ pull smashed m[8*i+7] + vmlal.u32 q7,d28,d1[0] + it ne + addne r6,r6,#16 @ don't advance in last iteration + vmlal.u32 q8,d28,d1[1] + vmlal.u32 q9,d28,d2[0] + vmlal.u32 q10,d28,d2[1] + vmlal.u32 q11,d28,d3[0] + vmlal.u32 q12,d28,d3[1] + it eq + subeq r1,r1,r5,lsl#2 @ rewind + vmlal.u32 q13,d29,d4[0] + vld1.32 {d28},[sp,:64] @ pull smashed b[8*i+0] + vmlal.u32 q6,d29,d4[1] + vld1.32 {d0,d1,d2,d3},[r1]! + vmlal.u32 q7,d29,d5[0] + add r10,sp,#8 @ rewind + vmlal.u32 q8,d29,d5[1] + vmlal.u32 q9,d29,d6[0] + vmlal.u32 q10,d29,d6[1] + vmlal.u32 q11,d29,d7[0] + vst1.64 {q13},[r7,:128]! + vmlal.u32 q12,d29,d7[1] - vst1.64 {q10,q11}, [r7,:256]! - vadd.u64 d10,d10,d11 - vst1.64 {q12,q13}, [r7,:256]! - vshr.u64 d10,d10,#16 + bne .LNEON_8n_inner + add r6,sp,#128 + vst1.64 {q6,q7},[r7,:256]! + veor q2,q2,q2 @ d4-d5 + vst1.64 {q8,q9},[r7,:256]! + veor q3,q3,q3 @ d6-d7 + vst1.64 {q10,q11},[r7,:256]! + vst1.64 {q12},[r7,:128] - bne .LNEON_outer + subs r9,r9,#8 + vld1.64 {q6,q7},[r6,:256]! + vld1.64 {q8,q9},[r6,:256]! + vld1.64 {q10,q11},[r6,:256]! + vld1.64 {q12,q13},[r6,:256]! - mov r7,sp - mov r8,r5 + itt ne + subne r3,r3,r5,lsl#2 @ rewind + bne .LNEON_8n_outer -.LNEON_tail: - vadd.u64 d12,d12,d10 - vld1.64 {q9,q10}, [r6, :256]! + add r7,sp,#128 + vst1.64 {q2,q3}, [sp,:256]! @ start wiping stack frame vshr.u64 d10,d12,#16 + vst1.64 {q2,q3},[sp,:256]! vadd.u64 d13,d13,d10 - vld1.64 {q11,q12}, [r6, :256]! + vst1.64 {q2,q3}, [sp,:256]! vshr.u64 d10,d13,#16 - vld1.64 {q13}, [r6, :128]! + vst1.64 {q2,q3}, [sp,:256]! vzip.16 d12,d13 -.LNEON_tail2: + mov r8,r5 + b .LNEON_tail_entry + +.align 4 +.LNEON_tail: + vadd.u64 d12,d12,d10 + vshr.u64 d10,d12,#16 + vld1.64 {q8,q9}, [r6, :256]! + vadd.u64 d13,d13,d10 + vld1.64 {q10,q11}, [r6, :256]! + vshr.u64 d10,d13,#16 + vld1.64 {q12,q13}, [r6, :256]! + vzip.16 d12,d13 + +.LNEON_tail_entry: vadd.u64 d14,d14,d10 vst1.32 {d12[0]}, [r7, :32]! vshr.u64 d10,d14,#16 vadd.u64 d15,d15,d10 vshr.u64 d10,d15,#16 vzip.16 d14,d15 - vadd.u64 d16,d16,d10 vst1.32 {d14[0]}, [r7, :32]! vshr.u64 d10,d16,#16 vadd.u64 d17,d17,d10 vshr.u64 d10,d17,#16 vzip.16 d16,d17 - vadd.u64 d18,d18,d10 vst1.32 {d16[0]}, [r7, :32]! vshr.u64 d10,d18,#16 vadd.u64 d19,d19,d10 vshr.u64 d10,d19,#16 vzip.16 d18,d19 - vadd.u64 d20,d20,d10 vst1.32 {d18[0]}, [r7, :32]! vshr.u64 d10,d20,#16 vadd.u64 d21,d21,d10 vshr.u64 d10,d21,#16 vzip.16 d20,d21 - vadd.u64 d22,d22,d10 vst1.32 {d20[0]}, [r7, :32]! vshr.u64 d10,d22,#16 vadd.u64 d23,d23,d10 vshr.u64 d10,d23,#16 vzip.16 d22,d23 - vadd.u64 d24,d24,d10 vst1.32 {d22[0]}, [r7, :32]! vshr.u64 d10,d24,#16 vadd.u64 d25,d25,d10 - vld1.64 {q6}, [r6, :128]! vshr.u64 d10,d25,#16 vzip.16 d24,d25 - vadd.u64 d26,d26,d10 vst1.32 {d24[0]}, [r7, :32]! vshr.u64 d10,d26,#16 vadd.u64 d27,d27,d10 - vld1.64 {q7,q8}, [r6, :256]! vshr.u64 d10,d27,#16 vzip.16 d26,d27 + vld1.64 {q6,q7}, [r6, :256]! subs r8,r8,#8 - vst1.32 {d26[0]}, [r7, :32]! - + vst1.32 {d26[0]}, [r7, :32]! bne .LNEON_tail vst1.32 {d10[0]}, [r7, :32] @ top-most bit @@ -542,8 +902,9 @@ bne .LNEON_sub ldr r10, [r1] @ load top-most bit + mov r11,sp veor q0,q0,q0 - sub r11,r2,sp @ this is num*4 + sub r11,r2,r11 @ this is num*4 veor q1,q1,q1 mov r1,sp sub r0,r0,r11 @ rewind r0 @@ -553,30 +914,36 @@ .LNEON_copy_n_zap: ldmia r1!, {r4,r5,r6,r7} ldmia r0, {r8,r9,r10,r11} + it cc movcc r8, r4 vst1.64 {q0,q1}, [r3,:256]! @ wipe + itt cc movcc r9, r5 movcc r10,r6 vst1.64 {q0,q1}, [r3,:256]! @ wipe + it cc movcc r11,r7 ldmia r1, {r4,r5,r6,r7} stmia r0!, {r8,r9,r10,r11} sub r1,r1,#16 ldmia r0, {r8,r9,r10,r11} + it cc movcc r8, r4 vst1.64 {q0,q1}, [r1,:256]! @ wipe + itt cc movcc r9, r5 movcc r10,r6 vst1.64 {q0,q1}, [r3,:256]! @ wipe + it cc movcc r11,r7 teq r1,r2 @ preserves carry stmia r0!, {r8,r9,r10,r11} bne .LNEON_copy_n_zap - sub sp,ip,#96 + mov sp,ip vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15} ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11} - bx lr @ .word 0xe12fff1e + bx lr @ bx lr .size bn_mul8x_mont_neon,.-bn_mul8x_mont_neon #endif .byte 77,111,110,116,103,111,109,101,114,121,32,109,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
diff --git a/third_party/boringssl/linux-arm/crypto/fipsmodule/ghash-armv4.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/ghash-armv4.S index 791b2890..5f8b50d 100644 --- a/third_party/boringssl/linux-arm/crypto/fipsmodule/ghash-armv4.S +++ b/third_party/boringssl/linux-arm/crypto/fipsmodule/ghash-armv4.S
@@ -1,10 +1,15 @@ #if defined(__arm__) #include <openssl/arm_arch.h> -.syntax unified - .text +#if defined(__thumb2__) || defined(__clang__) +.syntax unified +#endif +#if defined(__thumb2__) +.thumb +#else .code 32 +#endif #ifdef __clang__ #define ldrplb ldrbpl @@ -22,20 +27,28 @@ .type rem_4bit_get,%function rem_4bit_get: - sub r2,pc,#8 - sub r2,r2,#32 @ &rem_4bit +#if defined(__thumb2__) + adr r2,rem_4bit +#else + sub r2,pc,#8+32 @ &rem_4bit +#endif b .Lrem_4bit_got nop + nop .size rem_4bit_get,.-rem_4bit_get .globl gcm_ghash_4bit .hidden gcm_ghash_4bit .type gcm_ghash_4bit,%function +.align 4 gcm_ghash_4bit: - sub r12,pc,#8 +#if defined(__thumb2__) + adr r12,rem_4bit +#else + sub r12,pc,#8+48 @ &rem_4bit +#endif add r3,r2,r3 @ r3 to point at the end stmdb sp!,{r3,r4,r5,r6,r7,r8,r9,r10,r11,lr} @ save r3/end too - sub r12,r12,#48 @ &rem_4bit ldmia r12,{r4,r5,r6,r7,r8,r9,r10,r11} @ copy rem_4bit ... stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11} @ ... to stack @@ -82,7 +95,10 @@ eor r5,r5,r6,lsl#28 ldrh r8,[sp,r12] @ rem_4bit[rem] eor r6,r10,r6,lsr#4 - ldrbpl r12,[r2,r3] +#ifdef __thumb2__ + it pl +#endif + ldrplb r12,[r2,r3] eor r6,r6,r7,lsl#28 eor r7,r11,r7,lsr#4 @@ -92,15 +108,24 @@ add r14,r14,r14 ldmia r11,{r8,r9,r10,r11} @ load Htbl[nhi] eor r4,r8,r4,lsr#4 - ldrbpl r8,[r0,r3] +#ifdef __thumb2__ + it pl +#endif + ldrplb r8,[r0,r3] eor r4,r4,r5,lsl#28 eor r5,r9,r5,lsr#4 ldrh r9,[sp,r14] eor r5,r5,r6,lsl#28 eor r6,r10,r6,lsr#4 eor r6,r6,r7,lsl#28 +#ifdef __thumb2__ + it pl +#endif eorpl r12,r12,r8 eor r7,r11,r7,lsr#4 +#ifdef __thumb2__ + itt pl +#endif andpl r14,r12,#0xf0 andpl r12,r12,#0x0f eor r7,r7,r9,lsl#16 @ ^= rem_4bit[rem] @@ -138,7 +163,11 @@ strb r10,[r0,#8+1] strb r11,[r0,#8] #endif - ldrbne r12,[r2,#15] + +#ifdef __thumb2__ + it ne +#endif + ldrneb r12,[r2,#15] #if __ARM_ARCH__>=7 && defined(__ARMEL__) rev r6,r6 str r6,[r0,#4] @@ -226,7 +255,10 @@ eor r5,r5,r6,lsl#28 ldrh r8,[r2,r12] @ rem_4bit[rem] eor r6,r10,r6,lsr#4 - ldrbpl r12,[r0,r3] +#ifdef __thumb2__ + it pl +#endif + ldrplb r12,[r0,r3] eor r6,r6,r7,lsl#28 eor r7,r11,r7,lsr#4 @@ -243,6 +275,9 @@ eor r6,r10,r6,lsr#4 eor r6,r6,r7,lsl#28 eor r7,r11,r7,lsr#4 +#ifdef __thumb2__ + itt pl +#endif andpl r14,r12,#0xf0 andpl r12,r12,#0x0f eor r7,r7,r8,lsl#16 @ ^= rem_4bit[rem]
diff --git a/third_party/boringssl/linux-arm/crypto/fipsmodule/ghashv8-armx32.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/ghashv8-armx32.S index 0e1e631..e83a9c7 100644 --- a/third_party/boringssl/linux-arm/crypto/fipsmodule/ghashv8-armx32.S +++ b/third_party/boringssl/linux-arm/crypto/fipsmodule/ghashv8-armx32.S
@@ -4,6 +4,7 @@ .text .fpu neon .code 32 +#undef __thumb2__ .globl gcm_init_v8 .hidden gcm_init_v8 .type gcm_init_v8,%function
diff --git a/third_party/boringssl/linux-arm/crypto/fipsmodule/sha1-armv4-large.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/sha1-armv4-large.S index 36955fa..a5d88f7 100644 --- a/third_party/boringssl/linux-arm/crypto/fipsmodule/sha1-armv4-large.S +++ b/third_party/boringssl/linux-arm/crypto/fipsmodule/sha1-armv4-large.S
@@ -2,7 +2,12 @@ #include <openssl/arm_arch.h> .text +#if defined(__thumb2__) +.syntax unified +.thumb +#else .code 32 +#endif .globl sha1_block_data_order .hidden sha1_block_data_order @@ -11,7 +16,8 @@ .align 5 sha1_block_data_order: #if __ARM_MAX_ARCH__>=7 - sub r3,pc,#8 @ sha1_block_data_order +.Lsha1_block: + adr r3,.Lsha1_block ldr r12,.LOPENSSL_armcap ldr r12,[r3,r12] @ OPENSSL_armcap_P #ifdef __APPLE__ @@ -158,7 +164,12 @@ eor r10,r10,r7,ror#2 @ F_00_19(B,C,D) str r9,[r14,#-4]! add r3,r3,r10 @ E+=F_00_19(B,C,D) +#if defined(__thumb2__) + mov r12,sp + teq r14,r12 +#else teq r14,sp +#endif bne .L_00_15 @ [((11+4)*5+2)*3] sub sp,sp,#25*4 #if __ARM_ARCH__<7 @@ -338,7 +349,12 @@ @ F_xx_xx add r3,r3,r9 @ E+=X[i] add r3,r3,r10 @ E+=F_20_39(B,C,D) +#if defined(__thumb2__) + mov r12,sp + teq r14,r12 +#else teq r14,sp @ preserve carry +#endif bne .L_20_39_or_60_79 @ [+((12+3)*5+2)*4] bcs .L_done @ [+((12+3)*5+2)*4], spare 300 bytes @@ -430,7 +446,12 @@ add r3,r3,r9 @ E+=X[i] add r3,r3,r10 @ E+=F_40_59(B,C,D) add r3,r3,r11,ror#2 +#if defined(__thumb2__) + mov r12,sp + teq r14,r12 +#else teq r14,sp +#endif bne .L_40_59 @ [+((12+5)*5+2)*4] ldr r8,.LK_60_79 @@ -466,7 +487,7 @@ .LK_60_79:.word 0xca62c1d6 #if __ARM_MAX_ARCH__>=7 .LOPENSSL_armcap: -.word OPENSSL_armcap_P-sha1_block_data_order +.word OPENSSL_armcap_P-.Lsha1_block #endif .byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,47,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 @@ -484,12 +505,12 @@ @ dmb @ errata #451034 on early Cortex A8 @ vstmdb sp!,{d8-d15} @ ABI specification says so mov r14,sp - sub sp,sp,#64 @ alloca + sub r12,sp,#64 adr r8,.LK_00_19 - bic sp,sp,#15 @ align for 128-bit stores + bic r12,r12,#15 @ align for 128-bit stores ldmia r0,{r3,r4,r5,r6,r7} @ load context - mov r12,sp + mov sp,r12 @ alloca vld1.8 {q0,q1},[r1]! @ handles unaligned veor q15,q15,q15 @@ -1182,6 +1203,7 @@ sub r12,r12,#64 teq r1,r2 sub r8,r8,#16 + it eq subeq r1,r1,#64 vld1.8 {q0,q1},[r1]! ldr r9,[sp,#4] @@ -1311,10 +1333,13 @@ add r4,r4,r10 add r5,r5,r11 add r6,r6,r12 + it eq moveq sp,r14 add r7,r7,r9 + it ne ldrne r9,[sp] stmia r0,{r3,r4,r5,r6,r7} + itt ne addne r12,sp,#3*16 bne .Loop_neon @@ -1323,6 +1348,13 @@ .size sha1_block_data_order_neon,.-sha1_block_data_order_neon #endif #if __ARM_MAX_ARCH__>=7 + +# if defined(__thumb2__) +# define INST(a,b,c,d) .byte c,d|0xf,a,b +# else +# define INST(a,b,c,d) .byte a,b,c,d|0x10 +# endif + .type sha1_block_data_order_armv8,%function .align 5 sha1_block_data_order_armv8: @@ -1352,98 +1384,98 @@ vadd.i32 q13,q8,q5 vrev32.8 q7,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 0 -.byte 0x68,0x0c,0x02,0xf2 @ sha1c q0,q1,q12 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 0 + INST(0x68,0x0c,0x02,0xe2) @ sha1c q0,q1,q12 vadd.i32 q12,q8,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 1 -.byte 0x6a,0x0c,0x06,0xf2 @ sha1c q0,q3,q13 + INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 1 + INST(0x6a,0x0c,0x06,0xe2) @ sha1c q0,q3,q13 vadd.i32 q13,q8,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 2 -.byte 0x68,0x0c,0x04,0xf2 @ sha1c q0,q2,q12 + INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7 + INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 2 + INST(0x68,0x0c,0x04,0xe2) @ sha1c q0,q2,q12 vadd.i32 q12,q8,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 3 -.byte 0x6a,0x0c,0x06,0xf2 @ sha1c q0,q3,q13 + INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4 + INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 3 + INST(0x6a,0x0c,0x06,0xe2) @ sha1c q0,q3,q13 vadd.i32 q13,q9,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 4 -.byte 0x68,0x0c,0x04,0xf2 @ sha1c q0,q2,q12 + INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5 + INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 4 + INST(0x68,0x0c,0x04,0xe2) @ sha1c q0,q2,q12 vadd.i32 q12,q9,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 5 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6 + INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 5 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q13,q9,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 6 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7 + INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 6 + INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12 vadd.i32 q12,q9,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 7 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4 + INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 7 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q13,q9,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 8 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5 + INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 8 + INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12 vadd.i32 q12,q10,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 9 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6 + INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 9 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q13,q10,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 10 -.byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 + INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7 + INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 10 + INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12 vadd.i32 q12,q10,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 11 -.byte 0x6a,0x0c,0x26,0xf2 @ sha1m q0,q3,q13 + INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4 + INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 11 + INST(0x6a,0x0c,0x26,0xe2) @ sha1m q0,q3,q13 vadd.i32 q13,q10,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 12 -.byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 + INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5 + INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 12 + INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12 vadd.i32 q12,q10,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 13 -.byte 0x6a,0x0c,0x26,0xf2 @ sha1m q0,q3,q13 + INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6 + INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 13 + INST(0x6a,0x0c,0x26,0xe2) @ sha1m q0,q3,q13 vadd.i32 q13,q11,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 14 -.byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 + INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7 + INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 14 + INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12 vadd.i32 q12,q11,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 15 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4 + INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 15 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q13,q11,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 16 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5 + INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 16 + INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12 vadd.i32 q12,q11,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 17 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 17 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q13,q11,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 18 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 18 + INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 19 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 19 + INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13 vadd.i32 q1,q1,q2 vadd.i32 q0,q0,q14
diff --git a/third_party/boringssl/linux-arm/crypto/fipsmodule/sha512-armv4.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/sha512-armv4.S index 93a7bf85..bbeddf9 100644 --- a/third_party/boringssl/linux-arm/crypto/fipsmodule/sha512-armv4.S +++ b/third_party/boringssl/linux-arm/crypto/fipsmodule/sha512-armv4.S
@@ -1,4 +1,11 @@ #if defined(__arm__) +@ Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. +@ +@ Licensed under the OpenSSL license (the "License"). You may not use +@ this file except in compliance with the License. You can obtain a copy +@ in the file LICENSE in the source distribution or at +@ https://www.openssl.org/source/license.html + @ ==================================================================== @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL @@ -68,16 +75,12 @@ #endif .text -#if __ARM_ARCH__<7 || defined(__APPLE__) -.code 32 -#else +#if defined(__thumb2__) .syntax unified -# ifdef __thumb2__ -# define adrl adr .thumb -# else +# define adrl adr +#else .code 32 -# endif #endif .type K512,%object @@ -137,10 +140,10 @@ .type sha512_block_data_order,%function sha512_block_data_order: .Lsha512_block_data_order: -#if __ARM_ARCH__<7 +#if __ARM_ARCH__<7 && !defined(__thumb2__) sub r3,pc,#8 @ sha512_block_data_order #else - adr r3,sha512_block_data_order + adr r3,.Lsha512_block_data_order #endif #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) ldr r12,.LOPENSSL_armcap
diff --git a/third_party/leveldatabase/env_chromium.cc b/third_party/leveldatabase/env_chromium.cc index f4c2a291..1246892 100644 --- a/third_party/leveldatabase/env_chromium.cc +++ b/third_party/leveldatabase/env_chromium.cc
@@ -294,11 +294,13 @@ FilePath path = FilePath::FromUTF8Unsafe(parent_dir_); base::File f(path, base::File::FLAG_OPEN | base::File::FLAG_READ); if (!f.IsValid()) { + uma_logger_->RecordOSError(kSyncParent, f.error_details()); return MakeIOError(parent_dir_, "Unable to open directory", kSyncParent, f.error_details()); } if (!f.Flush()) { base::File::Error error = LastFileError(); + uma_logger_->RecordOSError(kSyncParent, error); return MakeIOError(parent_dir_, base::File::ErrorToString(error), kSyncParent, error); }
diff --git a/third_party/libpng/README.chromium b/third_party/libpng/README.chromium index 1dcede0..2a38134 100644 --- a/third_party/libpng/README.chromium +++ b/third_party/libpng/README.chromium
@@ -27,3 +27,5 @@ https://github.com/glennrp/libpng/commit/f7d5419816d85d0b996c403e788bb707b552524f - Avoid leaking params on bad pCAL chunk from upstream (crbug.com/636214): https://github.com/glennrp/libpng/commit/7dc03292502cf91a116766d2ab2c4f8fc23e4ab4 +- Fix for large allocation for invalid ICC (crbug.com/729673) + https://github.com/glennrp/libpng/commit/92a7c79db2c962d04006b35e2603ba9d5ce75541
diff --git a/third_party/libpng/png.c b/third_party/libpng/png.c index 65299a0..6e4cbed 100644 --- a/third_party/libpng/png.c +++ b/third_party/libpng/png.c
@@ -1931,8 +1931,8 @@ static const png_byte D50_nCIEXYZ[12] = { 0x00, 0x00, 0xf6, 0xd6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d }; -int /* PRIVATE */ -png_icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace, +static int /* bool */ +icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace, png_const_charp name, png_uint_32 profile_length) { if (profile_length < 132) @@ -1942,6 +1942,40 @@ return 1; } +#ifdef PNG_READ_iCCP_SUPPORTED +int /* PRIVATE */ +png_icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace, + png_const_charp name, png_uint_32 profile_length) +{ + if (!icc_check_length(png_ptr, colorspace, name, profile_length)) + return 0; + + /* This needs to be here because the 'normal' check is in + * png_decompress_chunk, yet this happens after the attempt to + * png_malloc_base the required data. We only need this on read; on write + * the caller supplies the profile buffer so libpng doesn't allocate it. See + * the call to icc_check_length below (the write case). + */ +# ifdef PNG_SET_USER_LIMITS_SUPPORTED + else if (png_ptr->user_chunk_malloc_max > 0 && + png_ptr->user_chunk_malloc_max < profile_length) + return png_icc_profile_error(png_ptr, colorspace, name, profile_length, + "exceeds application limits"); +# elif PNG_USER_CHUNK_MALLOC_MAX > 0 + else if (PNG_USER_CHUNK_MALLOC_MAX < profile_length) + return png_icc_profile_error(png_ptr, colorspace, name, profile_length, + "exceeds libpng limits"); +# else /* !SET_USER_LIMITS */ + /* This will get compiled out on all 32-bit and better systems. */ + else if (PNG_SIZE_MAX < profile_length) + return png_icc_profile_error(png_ptr, colorspace, name, profile_length, + "exceeds system limits"); +# endif /* !SET_USER_LIMITS */ + + return 1; +} +#endif /* READ_iCCP */ + int /* PRIVATE */ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace, png_const_charp name, png_uint_32 profile_length, @@ -2379,7 +2413,7 @@ if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0) return 0; - if (png_icc_check_length(png_ptr, colorspace, name, profile_length) != 0 && + if (icc_check_length(png_ptr, colorspace, name, profile_length) != 0 && png_icc_check_header(png_ptr, colorspace, name, profile_length, profile, color_type) != 0 && png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
diff --git a/third_party/libpng/pngpriv.h b/third_party/libpng/pngpriv.h index 9ea023f..63367135 100644 --- a/third_party/libpng/pngpriv.h +++ b/third_party/libpng/pngpriv.h
@@ -1541,9 +1541,11 @@ /* The 'name' is used for information only */ /* Routines for checking parts of an ICC profile. */ +#ifdef PNG_READ_iCCP_SUPPORTED PNG_INTERNAL_FUNCTION(int,png_icc_check_length,(png_const_structrp png_ptr, png_colorspacerp colorspace, png_const_charp name, png_uint_32 profile_length), PNG_EMPTY); +#endif /* READ_iCCP */ PNG_INTERNAL_FUNCTION(int,png_icc_check_header,(png_const_structrp png_ptr, png_colorspacerp colorspace, png_const_charp name, png_uint_32 profile_length,
diff --git a/third_party/libpng/pngtest.c b/third_party/libpng/pngtest.c index eb431f9..3515265 100644 --- a/third_party/libpng/pngtest.c +++ b/third_party/libpng/pngtest.c
@@ -514,10 +514,10 @@ typedef memory_information *memory_infop; static memory_infop pinformation = NULL; -static int current_allocation = 0; -static int maximum_allocation = 0; -static int total_allocation = 0; -static int num_allocations = 0; +static png_alloc_size_t current_allocation = 0; +static png_alloc_size_t maximum_allocation = 0; +static png_alloc_size_t total_allocation = 0; +static png_alloc_size_t num_allocations = 0; png_voidp PNGCBAPI png_debug_malloc PNGARG((png_structp png_ptr, png_alloc_size_t size)); @@ -604,9 +604,10 @@ if (pinfo->pointer == ptr) { *ppinfo = pinfo->next; - current_allocation -= pinfo->size; - if (current_allocation < 0) + if (current_allocation < pinfo->size) fprintf(STDERR, "Duplicate free of memory\n"); + else + current_allocation -= pinfo->size; /* We must free the list element too, but first kill the memory that is to be freed. */ memset(ptr, 0x55, pinfo->size); @@ -938,6 +939,12 @@ read_user_chunk_callback); #endif +#ifdef PNG_SET_USER_LIMITS_SUPPORTED +# ifdef CHUNK_LIMIT /* from the build, for testing */ + png_set_chunk_malloc_max(read_ptr, CHUNK_LIMIT); +# endif /* CHUNK_LIMIT */ +#endif + #ifdef PNG_SETJMP_SUPPORTED pngtest_debug("Setting jmpbuf for read struct"); if (setjmp(png_jmpbuf(read_ptr))) @@ -1874,7 +1881,7 @@ { int i; #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG - int allocation_now = current_allocation; + png_alloc_size_t allocation_now = current_allocation; #endif for (i=2; i<argc; ++i) { @@ -1907,15 +1914,15 @@ } #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG if (allocation_now != current_allocation) - fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n", - current_allocation - allocation_now); + fprintf(STDERR, "MEMORY ERROR: %lu bytes lost\n", + (unsigned long)(current_allocation - allocation_now)); if (current_allocation != 0) { memory_infop pinfo = pinformation; - fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n", - current_allocation); + fprintf(STDERR, "MEMORY ERROR: %lu bytes still allocated\n", + (unsigned long)current_allocation); while (pinfo != NULL) { @@ -1928,14 +1935,14 @@ #endif } #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG - fprintf(STDERR, " Current memory allocation: %10d bytes\n", - current_allocation); - fprintf(STDERR, " Maximum memory allocation: %10d bytes\n", - maximum_allocation); - fprintf(STDERR, " Total memory allocation: %10d bytes\n", - total_allocation); - fprintf(STDERR, " Number of allocations: %10d\n", - num_allocations); + fprintf(STDERR, " Current memory allocation: %20lu bytes\n", + (unsigned long)current_allocation); + fprintf(STDERR, " Maximum memory allocation: %20lu bytes\n", + (unsigned long) maximum_allocation); + fprintf(STDERR, " Total memory allocation: %20lu bytes\n", + (unsigned long)total_allocation); + fprintf(STDERR, " Number of allocations: %20lu\n", + (unsigned long)num_allocations); #endif } @@ -1946,7 +1953,7 @@ { int kerror; #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG - int allocation_now = current_allocation; + png_alloc_size_t allocation_now = current_allocation; #endif if (i == 1) status_dots_requested = 1; @@ -1996,15 +2003,15 @@ } #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG if (allocation_now != current_allocation) - fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n", - current_allocation - allocation_now); + fprintf(STDERR, "MEMORY ERROR: %lu bytes lost\n", + (unsigned long)(current_allocation - allocation_now)); if (current_allocation != 0) { memory_infop pinfo = pinformation; - fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n", - current_allocation); + fprintf(STDERR, "MEMORY ERROR: %lu bytes still allocated\n", + (unsigned long)current_allocation); while (pinfo != NULL) { @@ -2016,14 +2023,14 @@ #endif } #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG - fprintf(STDERR, " Current memory allocation: %10d bytes\n", - current_allocation); - fprintf(STDERR, " Maximum memory allocation: %10d bytes\n", - maximum_allocation); - fprintf(STDERR, " Total memory allocation: %10d bytes\n", - total_allocation); - fprintf(STDERR, " Number of allocations: %10d\n", - num_allocations); + fprintf(STDERR, " Current memory allocation: %20lu bytes\n", + (unsigned long)current_allocation); + fprintf(STDERR, " Maximum memory allocation: %20lu bytes\n", + (unsigned long)maximum_allocation); + fprintf(STDERR, " Total memory allocation: %20lu bytes\n", + (unsigned long)total_allocation); + fprintf(STDERR, " Number of allocations: %20lu\n", + (unsigned long)num_allocations); #endif }
diff --git a/third_party/libvpx/README.chromium b/third_party/libvpx/README.chromium index 0bdb085..6a4d656 100644 --- a/third_party/libvpx/README.chromium +++ b/third_party/libvpx/README.chromium
@@ -5,9 +5,9 @@ License File: source/libvpx/LICENSE Security Critical: yes -Date: Monday June 12 2017 +Date: Thursday June 15 2017 Branch: master -Commit: 4f9d852759ceca15c16f9ffed96c08d4b427f40b +Commit: 8d391a111a4830f946f6fe8b0cf51be8661224d9 Description: Contains the sources used to compile libvpx binaries used by Google Chrome and
diff --git a/third_party/libvpx/source/config/vpx_version.h b/third_party/libvpx/source/config/vpx_version.h index dfc229b2..d8bb3a1 100644 --- a/third_party/libvpx/source/config/vpx_version.h +++ b/third_party/libvpx/source/config/vpx_version.h
@@ -1,7 +1,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 6 #define VERSION_PATCH 1 -#define VERSION_EXTRA "743-g4f9d85275" +#define VERSION_EXTRA "750-g8d391a111" #define VERSION_PACKED ((VERSION_MAJOR<<16)|(VERSION_MINOR<<8)|(VERSION_PATCH)) -#define VERSION_STRING_NOSP "v1.6.1-743-g4f9d85275" -#define VERSION_STRING " v1.6.1-743-g4f9d85275" +#define VERSION_STRING_NOSP "v1.6.1-750-g8d391a111" +#define VERSION_STRING " v1.6.1-750-g8d391a111"
diff --git a/tools/grit/grit/format/data_pack.py b/tools/grit/grit/format/data_pack.py index 9f92b7c..f9bfc84 100755 --- a/tools/grit/grit/format/data_pack.py +++ b/tools/grit/grit/format/data_pack.py
@@ -199,20 +199,12 @@ def main(): - if len(sys.argv) > 1: - # When an argument is given, read and explode the file to text - # format, for easier diffing. - data = ReadDataPack(sys.argv[1]) - print data.encoding - for (resource_id, text) in data.resources.iteritems(): - print '%s: %s' % (resource_id, text) - else: - # Just write a simple file. - data = {1: '', 4: 'this is id 4', 6: 'this is id 6', 10: ''} - WriteDataPack(data, 'datapack1.pak', UTF8) - data2 = {1000: 'test', 5: 'five'} - WriteDataPack(data2, 'datapack2.pak', UTF8) - print 'wrote datapack1 and datapack2 to current directory.' + # Write a simple file. + data = {1: '', 4: 'this is id 4', 6: 'this is id 6', 10: ''} + WriteDataPack(data, 'datapack1.pak', UTF8) + data2 = {1000: 'test', 5: 'five'} + WriteDataPack(data2, 'datapack2.pak', UTF8) + print 'wrote datapack1 and datapack2 to current directory.' if __name__ == '__main__':
diff --git a/tools/grit/grit/format/repack.py b/tools/grit/grit/format/repack.py deleted file mode 100755 index fa0088c..0000000 --- a/tools/grit/grit/format/repack.py +++ /dev/null
@@ -1,42 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -""" -A simple utility function to merge data pack files into a single data pack. See -http://dev.chromium.org/developers/design-documents/linuxresourcesandlocalizedstrings -for details about the file format. -""" - -import optparse -import os -import sys - -if __name__ == '__main__': - # Prepend the grit module from the source tree so it takes precedence over - # other grit versions that might present in the search path. - sys.path.insert(1, os.path.join(os.path.dirname(__file__), '../..')) - -import grit.format.data_pack - - -def main(argv): - parser = optparse.OptionParser('usage: %prog [options] <output_filename>' - '<input_file1> [input_file2] ...') - parser.add_option('--whitelist', action='store', dest='whitelist', - default=None, help='Full path to the whitelist used to' - 'filter output pak file resource IDs') - parser.add_option('--suppress-removed-key-output', action='store_true') - options, file_paths = parser.parse_args(argv) - - if len(file_paths) < 2: - parser.error('Please specify output and at least one input filenames') - - grit.format.data_pack.RePack( - file_paths[0], file_paths[1:], - whitelist_file=options.whitelist, - suppress_removed_key_output=options.suppress_removed_key_output) - -if '__main__' == __name__: - main(sys.argv[1:])
diff --git a/tools/grit/pak_util.py b/tools/grit/pak_util.py new file mode 100755 index 0000000..ec43f33 --- /dev/null +++ b/tools/grit/pak_util.py
@@ -0,0 +1,104 @@ +#!/usr/bin/env python +# 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. + +"""A tool for interacting with .pak files. + +For details on the pak file format, see: +https://dev.chromium.org/developers/design-documents/linuxresourcesandlocalizedstrings +""" + +import argparse +import hashlib +import os +import sys + +from grit.format import data_pack + + +def _RepackMain(args): + data_pack.RePack(args.output_pak_file, args.input_pak_files, args.whitelist, + args.suppress_removed_key_output) + + +def _ExtractMain(args): + pak = data_pack.ReadDataPack(args.pak_file) + + for resource_id, payload in pak.resources.iteritems(): + path = os.path.join(args.output_dir, str(resource_id)) + with open(path, 'w') as f: + f.write(payload) + + +def _PrintMain(args): + pak = data_pack.ReadDataPack(args.pak_file) + encoding = 'binary' + if pak.encoding == 1: + encoding = 'utf-8' + elif pak.encoding == 2: + encoding = 'utf-16' + else: + encoding = '?' + str(pak.encoding) + print 'Encoding:', encoding + + try_decode = encoding.startswith('utf') + # Print IDs in ascending order, since that's the order in which they appear in + # the file (order is lost by Python dict). + for resource_id in sorted(pak.resources): + data = pak.resources[resource_id] + desc = '<binary>' + if try_decode: + try: + desc = unicode(data, encoding) + if len(desc) > 60: + desc = desc[:60] + u'...' + desc = desc.replace('\n', '\\n') + except UnicodeDecodeError: + pass + sha1 = hashlib.sha1(data).hexdigest()[:10] + line = u'Entry(id={}, len={}, sha1={}): {}'.format( + resource_id, len(data), sha1, desc) + print line.encode('utf-8') + + +def main(): + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.RawTextHelpFormatter) + sub_parsers = parser.add_subparsers() + + sub_parser = sub_parsers.add_parser('repack', + help='Combines several .pak files into one.') + sub_parser.add_argument('output_pak_file', help='File to create.') + sub_parser.add_argument('input_pak_files', nargs='+', + help='Input .pak files.') + sub_parser.add_argument('--whitelist', + help='Path to a whitelist used to filter output pak file resource IDs.') + sub_parser.add_argument('--suppress-removed-key-output', action='store_true', + help='Do not log which keys were removed by the whitelist.') + sub_parser.set_defaults(func=_RepackMain) + + sub_parser = sub_parsers.add_parser('extract', help='Extracts pak file') + sub_parser.add_argument('pak_file') + sub_parser.add_argument('-o', '--output-dir', default='.', + help='Directory to extract to.') + sub_parser.set_defaults(func=_ExtractMain) + + sub_parser = sub_parsers.add_parser('print', + help='Prints all pak IDs and contents. Useful for diffing.') + sub_parser.add_argument('pak_file') + sub_parser.set_defaults(func=_PrintMain) + + if len(sys.argv) == 1: + parser.print_help() + sys.exit(1) + elif len(sys.argv) == 2 and sys.argv[1] in actions: + parser.parse_args(sys.argv[1:] + ['-h']) + sys.exit(1) + + args = parser.parse_args() + args.func(args) + + +if __name__ == '__main__': + main()
diff --git a/tools/grit/repack.gni b/tools/grit/repack.gni index 8abc397..b489c774 100644 --- a/tools/grit/repack.gni +++ b/tools/grit/repack.gni
@@ -46,14 +46,14 @@ assert(defined(invoker.sources), "Need sources for $target_name") assert(defined(invoker.output), "Need output for $target_name") - script = "//tools/grit/grit/format/repack.py" + script = "//tools/grit/pak_util.py" inputs = invoker.sources outputs = [ invoker.output, ] - args = [] + args = [ "repack" ] if (defined(invoker.repack_whitelist)) { inputs += [ invoker.repack_whitelist ] _rebased_whitelist = rebase_path(invoker.repack_whitelist)
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index a602462..00b77cd 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -22163,6 +22163,7 @@ <int value="-1460462432" label="disable-media-source"/> <int value="-1456004000" label="VrShell:disabled"/> <int value="-1450576851" label="OmniboxUIExperimentVerticalLayout:enabled"/> + <int value="-1444051091" label="ash-disable-night-light"/> <int value="-1443796945" label="OfflinePagesSharing:disabled"/> <int value="-1440440375" label="WebVrAutopresent:enabled"/> <int value="-1440152291" label="disable-gesture-typing"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 74d804ad..c053a7a 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -89679,8 +89679,7 @@ <suffix name="WritableFileClose" label="ChromiumWritableFile::Close"/> <suffix name="WritableFileFlush" label="ChromiumWritableFile::Flush"/> <suffix name="WritableFileSync" label="ChromiumWritableFile::Sync"/> - <suffix name="WritableFileSyncParent" - label="ChromiumWritableFile::SyncParent"/> + <suffix name="SyncParent" label="ChromiumWritableFile::SyncParent"/> <affected-histogram name="LevelDBEnv.IDB.IOError.BFE"/> <affected-histogram name="LevelDBEnv.IOError.BFE"/> <affected-histogram name="LevelDBEnv.ServiceWorker.IOError.BFE"/>
diff --git a/tools/perf/benchmarks/media.py b/tools/perf/benchmarks/media.py index f2d02c4..4200606 100644 --- a/tools/perf/benchmarks/media.py +++ b/tools/perf/benchmarks/media.py
@@ -61,6 +61,9 @@ def Name(cls): return 'media.tough_video_cases' + def GetExpectations(self): + return page_sets.ToughVideoCasesDesktopStoryExpectations() + @benchmark.Enabled('android') @benchmark.Disabled('l', 'android-webview') # WebView: crbug.com/419689. @@ -81,6 +84,9 @@ def Name(cls): return 'media.android.tough_video_cases' + def GetExpectations(self): + return page_sets.ToughVideoCasesAndroidStoryExpectations() + class _MediaTBMv2Benchmark(perf_benchmark.PerfBenchmark): def CreateStorySet(self, options): @@ -130,6 +136,10 @@ # is able to cope with the data load generated by TBMv2 metrics. return not _IGNORED_STATS_RE.search(value.name) + def GetExpectations(self): + return page_sets.ToughVideoCasesDesktopStoryExpectations() + + @benchmark.Owner(emails=['johnchen@chromium.org', 'crouleau@chromium.org'], component='Internals>Media') @@ -150,6 +160,9 @@ def Name(cls): return 'media.android.tough_video_cases_tbmv2' + def GetExpectations(self): + return page_sets.ToughVideoCasesAndroidStoryExpectations() + def SetExtraBrowserOptions(self, options): # By default, Chrome on Android does not allow autoplay # of media: it requires a user gesture event to start a video. @@ -182,6 +195,9 @@ def Name(cls): return 'media.media_cns_cases' + def GetExpectations(self): + return page_sets.MediaCnsCasesPageSetStoryExpectations() + @benchmark.Disabled('android-webview') # crbug.com/419689 @benchmark.Owner(emails=['crouleau@chromium.org', 'videostack-eng@google.com'], @@ -200,3 +216,6 @@ options.AppendExtraBrowserArgs( ['--enable-experimental-web-platform-features', '--ignore-autoplay-restrictions']) + + def GetExpectations(self): + return page_sets.MseCasesStoryExpectations()
diff --git a/tools/perf/page_sets/media_cns_cases.py b/tools/perf/page_sets/media_cns_cases.py index b09c1e4..2aee097c 100644 --- a/tools/perf/page_sets/media_cns_cases.py +++ b/tools/perf/page_sets/media_cns_cases.py
@@ -119,3 +119,10 @@ else: name = url.split('/')[-1] self.AddStory(SeekBeforeAndAfterPlayheadPage(url, self, name=name)) + + +class MediaCnsCasesPageSetStoryExpectations( + story.expectations.StoryExpectations): + + def SetExpectations(self): + pass
diff --git a/tools/perf/page_sets/mse_cases.py b/tools/perf/page_sets/mse_cases.py index 75477b1..1fe631c7 100644 --- a/tools/perf/page_sets/mse_cases.py +++ b/tools/perf/page_sets/mse_cases.py
@@ -46,3 +46,9 @@ for url in urls_list: self.AddStory(MseCasesPage(url, self, url.split('/')[-1])) + +class MseCasesStoryExpectations( + story.expectations.StoryExpectations): + + def SetExpectations(self): + pass
diff --git a/tools/perf/page_sets/tough_video_cases.py b/tools/perf/page_sets/tough_video_cases.py index 80be1cf1..a66af42 100644 --- a/tools/perf/page_sets/tough_video_cases.py +++ b/tools/perf/page_sets/tough_video_cases.py
@@ -425,3 +425,18 @@ self.AddStory(Page31(self)) self.AddStory(Page33(self)) self.AddStory(Page36(self)) + + +class ToughVideoCasesDesktopStoryExpectations( + story.expectations.StoryExpectations): + + def SetExpectations(self): + self.PermanentlyDisableBenchmark( + [story.expectations.ALL_MOBILE],'Desktop Benchmark') + +class ToughVideoCasesAndroidStoryExpectations( + story.expectations.StoryExpectations): + + def SetExpectations(self): + self.PermanentlyDisableBenchmark( + [story.expectations.ALL_DESKTOP],'Android Benchmark')
diff --git a/tools/valgrind/chrome_tests.bat b/tools/valgrind/chrome_tests.bat deleted file mode 100755 index e917e86..0000000 --- a/tools/valgrind/chrome_tests.bat +++ /dev/null
@@ -1,53 +0,0 @@ -@echo off -:: Copyright (c) 2011 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. - -setlocal - -set THISDIR=%~dp0 -set TOOL_NAME="unknown" - -:: Get the tool name and put it into TOOL_NAME {{{1 -:: NB: SHIFT command doesn't modify %* -:PARSE_ARGS_LOOP - if %1 == () GOTO:TOOLNAME_NOT_FOUND - if %1 == --tool GOTO:TOOLNAME_FOUND - SHIFT - goto :PARSE_ARGS_LOOP - -:TOOLNAME_NOT_FOUND -echo "Please specify a tool (e.g. drmemory) by using --tool flag" -exit /B 1 - -:TOOLNAME_FOUND -SHIFT -set TOOL_NAME=%1 -:: }}} -if "%TOOL_NAME%" == "drmemory" GOTO :SETUP_DRMEMORY -if "%TOOL_NAME%" == "drmemory_light" GOTO :SETUP_DRMEMORY -if "%TOOL_NAME%" == "drmemory_full" GOTO :SETUP_DRMEMORY -if "%TOOL_NAME%" == "drmemory_pattern" GOTO :SETUP_DRMEMORY -echo "Unknown tool: `%TOOL_NAME%`! Only drmemory is supported right now" -exit /B 1 - -:SETUP_DRMEMORY -:: Set up DRMEMORY_COMMAND to invoke Dr. Memory {{{1 -set DRMEMORY_PATH=%THISDIR%..\..\third_party\drmemory -set DRMEMORY_SFX=%DRMEMORY_PATH%\drmemory-windows-sfx.exe -if EXIST %DRMEMORY_SFX% GOTO DRMEMORY_BINARY_OK -echo "Can't find Dr. Memory executables." -echo "See http://www.chromium.org/developers/how-tos/using-valgrind/dr-memory" -echo "for the instructions on how to get them." -exit /B 1 - -:DRMEMORY_BINARY_OK -%DRMEMORY_SFX% -o%DRMEMORY_PATH%\unpacked -y -set DRMEMORY_COMMAND=%DRMEMORY_PATH%\unpacked\bin\drmemory.exe -:: }}} -goto :RUN_TESTS - -:RUN_TESTS -set PYTHONPATH=%THISDIR%../python/google -set RUNNING_ON_VALGRIND=yes -python %THISDIR%/chrome_tests.py %*
diff --git a/tools/valgrind/chrome_tests.py b/tools/valgrind/chrome_tests.py deleted file mode 100755 index 9c7143a..0000000 --- a/tools/valgrind/chrome_tests.py +++ /dev/null
@@ -1,863 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -''' Runs various chrome tests through valgrind_test.py.''' - -import glob -import logging -import multiprocessing -import optparse -import os -import stat -import subprocess -import sys - -import logging_utils -import path_utils - -import common -import valgrind_test - -class TestNotFound(Exception): pass - -class MultipleGTestFiltersSpecified(Exception): pass - -class BuildDirNotFound(Exception): pass - -class BuildDirAmbiguous(Exception): pass - -class ExecutableNotFound(Exception): pass - -class BadBinary(Exception): pass - -class ChromeTests: - SLOW_TOOLS = ["memcheck", "drmemory"] - LAYOUT_TESTS_DEFAULT_CHUNK_SIZE = 300 - - def __init__(self, options, args, test): - if ':' in test: - (self._test, self._gtest_filter) = test.split(':', 1) - else: - self._test = test - self._gtest_filter = options.gtest_filter - - if self._test not in self._test_list: - raise TestNotFound("Unknown test: %s" % test) - - if options.gtest_filter and options.gtest_filter != self._gtest_filter: - raise MultipleGTestFiltersSpecified("Can not specify both --gtest_filter " - "and --test %s" % test) - - self._options = options - self._args = args - - script_dir = path_utils.ScriptDir() - # Compute the top of the tree (the "source dir") from the script dir (where - # this script lives). We assume that the script dir is in tools/valgrind/ - # relative to the top of the tree. - self._source_dir = os.path.dirname(os.path.dirname(script_dir)) - # since this path is used for string matching, make sure it's always - # an absolute Unix-style path - self._source_dir = os.path.abspath(self._source_dir).replace('\\', '/') - valgrind_test_script = os.path.join(script_dir, "valgrind_test.py") - self._command_preamble = ["--source-dir=%s" % (self._source_dir)] - - if not self._options.build_dir: - dirs = [ - os.path.join(self._source_dir, "xcodebuild", "Debug"), - os.path.join(self._source_dir, "out", "Debug"), - os.path.join(self._source_dir, "build", "Debug"), - ] - build_dir = [d for d in dirs if os.path.isdir(d)] - if len(build_dir) > 1: - raise BuildDirAmbiguous("Found more than one suitable build dir:\n" - "%s\nPlease specify just one " - "using --build-dir" % ", ".join(build_dir)) - elif build_dir: - self._options.build_dir = build_dir[0] - else: - self._options.build_dir = None - - if self._options.build_dir: - build_dir = os.path.abspath(self._options.build_dir) - self._command_preamble += ["--build-dir=%s" % (self._options.build_dir)] - - def _EnsureBuildDirFound(self): - if not self._options.build_dir: - raise BuildDirNotFound("Oops, couldn't find a build dir, please " - "specify it manually using --build-dir") - - def _DefaultCommand(self, tool, exe=None, valgrind_test_args=None): - '''Generates the default command array that most tests will use.''' - if exe and common.IsWindows(): - exe += '.exe' - - cmd = list(self._command_preamble) - - # Find all suppressions matching the following pattern: - # tools/valgrind/TOOL/suppressions[_PLATFORM].txt - # and list them with --suppressions= prefix. - script_dir = path_utils.ScriptDir() - tool_name = tool.ToolName(); - suppression_file = os.path.join(script_dir, tool_name, "suppressions.txt") - if os.path.exists(suppression_file): - cmd.append("--suppressions=%s" % suppression_file) - # Platform-specific suppression - for platform in common.PlatformNames(): - platform_suppression_file = \ - os.path.join(script_dir, tool_name, 'suppressions_%s.txt' % platform) - if os.path.exists(platform_suppression_file): - cmd.append("--suppressions=%s" % platform_suppression_file) - - if tool_name == "drmemory": - if self._options.drmemory_ops: - # prepending " " to avoid Dr. Memory's option confusing optparse - cmd += ["--drmemory_ops", " " + self._options.drmemory_ops] - - if self._options.valgrind_tool_flags: - cmd += self._options.valgrind_tool_flags.split(" ") - if self._options.keep_logs: - cmd += ["--keep_logs"] - if valgrind_test_args != None: - for arg in valgrind_test_args: - cmd.append(arg) - if exe: - self._EnsureBuildDirFound() - exe_path = os.path.join(self._options.build_dir, exe) - if not os.path.exists(exe_path): - raise ExecutableNotFound("Couldn't find '%s'" % exe_path) - - # Make sure we don't try to test ASan-built binaries - # with other dynamic instrumentation-based tools. - # TODO(timurrrr): also check TSan and MSan? - # `nm` might not be available, so use try-except. - try: - # Do not perform this check on OS X, as 'nm' on 10.6 can't handle - # binaries built with Clang 3.5+. - if not common.IsMac(): - nm_output = subprocess.check_output(["nm", exe_path]) - if nm_output.find("__asan_init") != -1: - raise BadBinary("You're trying to run an executable instrumented " - "with AddressSanitizer under %s. Please provide " - "an uninstrumented executable." % tool_name) - except OSError: - pass - - cmd.append(exe_path) - # Valgrind runs tests slowly, so slow tests hurt more; show elapased time - # so we can find the slowpokes. - cmd.append("--gtest_print_time") - # Built-in test launcher for gtest-based executables runs tests using - # multiple process by default. Force the single-process mode back. - cmd.append("--single-process-tests") - if self._options.gtest_repeat: - cmd.append("--gtest_repeat=%s" % self._options.gtest_repeat) - if self._options.gtest_shuffle: - cmd.append("--gtest_shuffle") - if self._options.gtest_break_on_failure: - cmd.append("--gtest_break_on_failure") - if self._options.test_launcher_bot_mode: - cmd.append("--test-launcher-bot-mode") - if self._options.test_launcher_total_shards is not None: - cmd.append("--test-launcher-total-shards=%d" % self._options.test_launcher_total_shards) - if self._options.test_launcher_shard_index is not None: - cmd.append("--test-launcher-shard-index=%d" % self._options.test_launcher_shard_index) - return cmd - - def Run(self): - ''' Runs the test specified by command-line argument --test ''' - logging.info("running test %s" % (self._test)) - return self._test_list[self._test](self) - - def _AppendGtestFilter(self, tool, name, cmd): - '''Append an appropriate --gtest_filter flag to the googletest binary - invocation. - If the user passed their own filter mentioning only one test, just use - it. Otherwise, filter out tests listed in the appropriate gtest_exclude - files. - ''' - if (self._gtest_filter and - ":" not in self._gtest_filter and - "?" not in self._gtest_filter and - "*" not in self._gtest_filter): - cmd.append("--gtest_filter=%s" % self._gtest_filter) - return - - filters = [] - gtest_files_dir = os.path.join(path_utils.ScriptDir(), "gtest_exclude") - - gtest_filter_files = [ - os.path.join(gtest_files_dir, name + ".gtest-%s.txt" % tool.ToolName())] - # Use ".gtest.txt" files only for slow tools, as they now contain - # Valgrind- and Dr.Memory-specific filters. - # TODO(glider): rename the files to ".gtest_slow.txt" - if tool.ToolName() in ChromeTests.SLOW_TOOLS: - gtest_filter_files += [os.path.join(gtest_files_dir, name + ".gtest.txt")] - for platform_suffix in common.PlatformNames(): - gtest_filter_files += [ - os.path.join(gtest_files_dir, name + ".gtest_%s.txt" % platform_suffix), - os.path.join(gtest_files_dir, name + ".gtest-%s_%s.txt" % \ - (tool.ToolName(), platform_suffix))] - logging.info("Reading gtest exclude filter files:") - for filename in gtest_filter_files: - # strip the leading absolute path (may be very long on the bot) - # and the following / or \. - readable_filename = filename.replace("\\", "/") # '\' on Windows - readable_filename = readable_filename.replace(self._source_dir, "")[1:] - if not os.path.exists(filename): - logging.info(" \"%s\" - not found" % readable_filename) - continue - logging.info(" \"%s\" - OK" % readable_filename) - f = open(filename, 'r') - for line in f.readlines(): - if line.startswith("#") or line.startswith("//") or line.isspace(): - continue - line = line.rstrip() - test_prefixes = ["FLAKY", "FAILS"] - for p in test_prefixes: - # Strip prefixes from the test names. - line = line.replace(".%s_" % p, ".") - # Exclude the original test name. - filters.append(line) - if line[-2:] != ".*": - # List all possible prefixes if line doesn't end with ".*". - for p in test_prefixes: - filters.append(line.replace(".", ".%s_" % p)) - # Get rid of duplicates. - filters = set(filters) - gtest_filter = self._gtest_filter - if len(filters): - if gtest_filter: - gtest_filter += ":" - if gtest_filter.find("-") < 0: - gtest_filter += "-" - else: - gtest_filter = "-" - gtest_filter += ":".join(filters) - if gtest_filter: - cmd.append("--gtest_filter=%s" % gtest_filter) - - @staticmethod - def ShowTests(): - test_to_names = {} - for name, test_function in ChromeTests._test_list.iteritems(): - test_to_names.setdefault(test_function, []).append(name) - - name_to_aliases = {} - for names in test_to_names.itervalues(): - names.sort(key=lambda name: len(name)) - name_to_aliases[names[0]] = names[1:] - - print - print "Available tests:" - print "----------------" - for name, aliases in sorted(name_to_aliases.iteritems()): - if aliases: - print " {} (aka {})".format(name, ', '.join(aliases)) - else: - print " {}".format(name) - - def SetupLdPath(self, requires_build_dir): - if requires_build_dir: - self._EnsureBuildDirFound() - elif not self._options.build_dir: - return - - # Append build_dir to LD_LIBRARY_PATH so external libraries can be loaded. - if (os.getenv("LD_LIBRARY_PATH")): - os.putenv("LD_LIBRARY_PATH", "%s:%s" % (os.getenv("LD_LIBRARY_PATH"), - self._options.build_dir)) - else: - os.putenv("LD_LIBRARY_PATH", self._options.build_dir) - - def SimpleTest(self, module, name, valgrind_test_args=None, cmd_args=None): - tool = valgrind_test.CreateTool(self._options.valgrind_tool) - cmd = self._DefaultCommand(tool, name, valgrind_test_args) - self._AppendGtestFilter(tool, name, cmd) - cmd.extend(['--test-tiny-timeout=1000']) - if cmd_args: - cmd.extend(cmd_args) - - self.SetupLdPath(True) - return tool.Run(cmd, module) - - def RunCmdLine(self): - tool = valgrind_test.CreateTool(self._options.valgrind_tool) - cmd = self._DefaultCommand(tool, None, self._args) - self.SetupLdPath(False) - return tool.Run(cmd, None) - - def TestAccessibility(self): - return self.SimpleTest("accessibility", "accessibility_unittests") - - def TestAddressInput(self): - return self.SimpleTest("addressinput", "libaddressinput_unittests") - - def TestAngle(self): - return self.SimpleTest("angle", "angle_unittests") - - def TestAppList(self): - return self.SimpleTest("app_list", "app_list_unittests") - - def TestAsh(self): - return self.SimpleTest("ash", "ash_unittests") - - def TestAura(self): - return self.SimpleTest("aura", "aura_unittests") - - def TestBase(self): - return self.SimpleTest("base", "base_unittests") - - def TestBlinkHeap(self): - return self.SimpleTest("blink_heap", "blink_heap_unittests") - - def TestBlinkPlatform(self): - return self.SimpleTest("blink_platform", "blink_platform_unittests") - - def TestCacheInvalidation(self): - return self.SimpleTest("cacheinvalidation", "cacheinvalidation_unittests") - - def TestCast(self): - return self.SimpleTest("chrome", "cast_unittests") - - def TestCC(self): - return self.SimpleTest("cc", "cc_unittests", - cmd_args=[ - "--cc-layer-tree-test-long-timeout"]) - - def TestChromeApp(self): - return self.SimpleTest("chrome_app", "chrome_app_unittests") - - def TestChromeElf(self): - return self.SimpleTest("chrome_elf", "chrome_elf_unittests") - - def TestChromeDriver(self): - return self.SimpleTest("chromedriver", "chromedriver_unittests") - - def TestChromeOS(self): - return self.SimpleTest("chromeos", "chromeos_unittests") - - def TestComponents(self): - return self.SimpleTest("components", "components_unittests") - - def TestCompositor(self): - return self.SimpleTest("compositor", "compositor_unittests") - - def TestContent(self): - return self.SimpleTest("content", "content_unittests") - - def TestCourgette(self): - return self.SimpleTest("courgette", "courgette_unittests") - - def TestCrypto(self): - return self.SimpleTest("crypto", "crypto_unittests") - - def TestDevice(self): - return self.SimpleTest("device", "device_unittests") - - def TestDisplay(self): - return self.SimpleTest("display", "display_unittests") - - def TestEvents(self): - return self.SimpleTest("events", "events_unittests") - - def TestExtensions(self): - return self.SimpleTest("extensions", "extensions_unittests") - - def TestFFmpegRegressions(self): - return self.SimpleTest("chrome", "ffmpeg_regression_tests") - - def TestGCM(self): - return self.SimpleTest("gcm", "gcm_unit_tests") - - def TestGfx(self): - return self.SimpleTest("gfx", "gfx_unittests") - - def TestGin(self): - return self.SimpleTest("gin", "gin_unittests") - - def TestGoogleApis(self): - return self.SimpleTest("google_apis", "google_apis_unittests") - - def TestGPU(self): - return self.SimpleTest("gpu", "gpu_unittests") - - def TestIpc(self): - return self.SimpleTest("ipc", "ipc_tests", - valgrind_test_args=["--trace_children"]) - - def TestInstallerUtil(self): - return self.SimpleTest("installer_util", "installer_util_unittests") - - def TestInstallStatic(self): - return self.SimpleTest("install_static", "install_static_unittests") - - def TestJingle(self): - return self.SimpleTest("chrome", "jingle_unittests") - - def TestKeyboard(self): - return self.SimpleTest("keyboard", "keyboard_unittests") - - def TestLatency(self): - return self.SimpleTest("latency", "latency_unittests") - - def TestMedia(self): - return self.SimpleTest("chrome", "media_unittests") - - def TestMessageCenter(self): - return self.SimpleTest("message_center", "message_center_unittests") - - def TestMidi(self): - return self.SimpleTest("chrome", "midi_unittests") - - def TestMojoCommon(self): - return self.SimpleTest("mojo_common", "mojo_common_unittests") - - def TestMojoPublicBindings(self): - return self.SimpleTest("mojo_public_bindings", - "mojo_public_bindings_unittests") - - def TestMojoPublicSystem(self): - return self.SimpleTest("mojo_public_system", - "mojo_public_system_unittests") - - def TestMojoPublicSysPerf(self): - return self.SimpleTest("mojo_public_sysperf", - "mojo_public_system_perftests") - - def TestMojoSystem(self): - return self.SimpleTest("mojo_system", "mojo_system_unittests") - - def TestNet(self): - return self.SimpleTest("net", "net_unittests") - - def TestNetPerf(self): - return self.SimpleTest("net", "net_perftests") - - def TestPhoneNumber(self): - return self.SimpleTest("phonenumber", "libphonenumber_unittests") - - def TestPPAPI(self): - return self.SimpleTest("chrome", "ppapi_unittests") - - def TestPrinting(self): - return self.SimpleTest("chrome", "printing_unittests") - - def TestRemoting(self): - return self.SimpleTest("chrome", "remoting_unittests", - cmd_args=[ - "--ui-test-action-timeout=60000", - "--ui-test-action-max-timeout=150000"]) - - def TestSkia(self): - return self.SimpleTest("skia", "skia_unittests") - - def TestSql(self): - return self.SimpleTest("chrome", "sql_unittests") - - def TestStorage(self): - return self.SimpleTest("storage", "storage_unittests") - - def TestLinuxSandbox(self): - return self.SimpleTest("sandbox", "sandbox_linux_unittests") - - def TestUnit(self): - # http://crbug.com/51716 - # Disabling all unit tests - # Problems reappeared after r119922 - if common.IsMac() and (self._options.valgrind_tool == "memcheck"): - logging.warning("unit_tests are disabled for memcheck on MacOS.") - return 0; - return self.SimpleTest("chrome", "unit_tests") - - def TestUIBaseUnit(self): - return self.SimpleTest("chrome", "ui_base_unittests") - - def TestUIChromeOS(self): - return self.SimpleTest("chrome", "ui_chromeos_unittests") - - def TestURL(self): - return self.SimpleTest("chrome", "url_unittests") - - def TestViews(self): - return self.SimpleTest("views", "views_unittests") - - - # Valgrind timeouts are in seconds. - UI_VALGRIND_ARGS = ["--timeout=14400", "--trace_children", "--indirect"] - # UI test timeouts are in milliseconds. - UI_TEST_ARGS = ["--ui-test-action-timeout=60000", - "--ui-test-action-max-timeout=150000", - "--no-sandbox"] - - # TODO(thestig) fine-tune these values. - # Valgrind timeouts are in seconds. - BROWSER_VALGRIND_ARGS = ["--timeout=50000", "--trace_children", "--indirect"] - # Browser test timeouts are in milliseconds. - BROWSER_TEST_ARGS = ["--ui-test-action-timeout=400000", - "--ui-test-action-max-timeout=800000", - "--no-sandbox"] - - def TestBrowser(self): - return self.SimpleTest("chrome", "browser_tests", - valgrind_test_args=self.BROWSER_VALGRIND_ARGS, - cmd_args=self.BROWSER_TEST_ARGS) - - def TestContentBrowser(self): - return self.SimpleTest("content", "content_browsertests", - valgrind_test_args=self.BROWSER_VALGRIND_ARGS, - cmd_args=self.BROWSER_TEST_ARGS) - - def TestInteractiveUI(self): - return self.SimpleTest("chrome", "interactive_ui_tests", - valgrind_test_args=self.UI_VALGRIND_ARGS, - cmd_args=self.UI_TEST_ARGS) - - def TestSyncIntegration(self): - return self.SimpleTest("chrome", "sync_integration_tests", - valgrind_test_args=self.UI_VALGRIND_ARGS, - cmd_args=(["--ui-test-action-max-timeout=450000"])) - - def TestLayoutChunk(self, chunk_num, chunk_size): - # Run tests [chunk_num*chunk_size .. (chunk_num+1)*chunk_size) from the - # list of tests. Wrap around to beginning of list at end. - # If chunk_size is zero, run all tests in the list once. - # If a text file is given as argument, it is used as the list of tests. - assert((chunk_size == 0) != (len(self._args) == 0)) - # Build the ginormous commandline in 'cmd'. - # It's going to be roughly - # python valgrind_test.py ... - # but we'll use the --indirect flag to valgrind_test.py - # to avoid valgrinding python. - # Start by building the valgrind_test.py commandline. - tool = valgrind_test.CreateTool(self._options.valgrind_tool) - cmd = self._DefaultCommand(tool) - cmd.append("--trace_children") - cmd.append("--indirect_webkit_layout") - cmd.append("--ignore_exit_code") - # Now build script_cmd, the run-webkits-tests commandline. - # Store each chunk in its own directory so that we can find the data later - chunk_dir = os.path.join("layout", "chunk_%05d" % chunk_num) - out_dir = os.path.join(path_utils.ScriptDir(), "latest") - out_dir = os.path.join(out_dir, chunk_dir) - if os.path.exists(out_dir): - old_files = glob.glob(os.path.join(out_dir, "*.txt")) - for f in old_files: - os.remove(f) - else: - os.makedirs(out_dir) - script = os.path.join(self._source_dir, "third_party", "WebKit", "Tools", - "Scripts", "run-webkit-tests") - # http://crbug.com/260627: After the switch to content_shell from DRT, each - # test now brings up 3 processes. Under Valgrind, they become memory bound - # and can eventually OOM if we don't reduce the total count. - # It'd be nice if content_shell automatically throttled the startup of new - # tests if we're low on memory. - jobs = max(1, int(multiprocessing.cpu_count() * 0.3)) - script_cmd = ["python", script, "-v", - # run a separate DumpRenderTree for each test - "--batch-size=1", - "--fully-parallel", - "--child-processes=%d" % jobs, - "--time-out-ms=800000", - "--no-retry-failures", # retrying takes too much time - # http://crbug.com/176908: Don't launch a browser when done. - "--no-show-results", - "--nocheck-sys-deps", - "--additional-driver-flag=--no-sandbox"] - # Pass build mode to run-webkit-tests. We aren't passed it directly, - # so parse it out of build_dir. run-webkit-tests can only handle - # the two values "Release" and "Debug". - # TODO(Hercules): unify how all our scripts pass around build mode - # (--mode / --target / --build-dir / --debug) - if self._options.build_dir: - build_root, mode = os.path.split(self._options.build_dir) - script_cmd.extend(["--build-directory", build_root, "--target", mode]) - if (chunk_size > 0): - script_cmd.append("--run-chunk=%d:%d" % (chunk_num, chunk_size)) - if len(self._args): - # if the arg is a txt file, then treat it as a list of tests - if os.path.isfile(self._args[0]) and self._args[0][-4:] == ".txt": - script_cmd.append("--test-list=%s" % self._args[0]) - else: - script_cmd.extend(self._args) - self._AppendGtestFilter(tool, "layout", script_cmd) - # Now run script_cmd with the wrapper in cmd - cmd.extend(["--"]) - cmd.extend(script_cmd) - - # Layout tests often times fail quickly, but the buildbot remains green. - # Detect this situation when running with the default chunk size. - if chunk_size == self.LAYOUT_TESTS_DEFAULT_CHUNK_SIZE: - min_runtime_in_seconds=120 - else: - min_runtime_in_seconds=0 - ret = tool.Run(cmd, "layout", min_runtime_in_seconds=min_runtime_in_seconds) - return ret - - - def TestLayout(self): - # A "chunk file" is maintained in the local directory so that each test - # runs a slice of the layout tests of size chunk_size that increments with - # each run. Since tests can be added and removed from the layout tests at - # any time, this is not going to give exact coverage, but it will allow us - # to continuously run small slices of the layout tests under valgrind rather - # than having to run all of them in one shot. - chunk_size = self._options.num_tests - if chunk_size == 0 or len(self._args): - return self.TestLayoutChunk(0, 0) - chunk_num = 0 - chunk_file = os.path.join("valgrind_layout_chunk.txt") - logging.info("Reading state from " + chunk_file) - try: - f = open(chunk_file) - if f: - chunk_str = f.read() - if len(chunk_str): - chunk_num = int(chunk_str) - # This should be enough so that we have a couple of complete runs - # of test data stored in the archive (although note that when we loop - # that we almost guaranteed won't be at the end of the test list) - if chunk_num > 10000: - chunk_num = 0 - f.close() - except IOError, (errno, strerror): - logging.error("error reading from file %s (%d, %s)" % (chunk_file, - errno, strerror)) - # Save the new chunk size before running the tests. Otherwise if a - # particular chunk hangs the bot, the chunk number will never get - # incremented and the bot will be wedged. - logging.info("Saving state to " + chunk_file) - try: - f = open(chunk_file, "w") - chunk_num += 1 - f.write("%d" % chunk_num) - f.close() - except IOError, (errno, strerror): - logging.error("error writing to file %s (%d, %s)" % (chunk_file, errno, - strerror)) - # Since we're running small chunks of the layout tests, it's important to - # mark the ones that have errors in them. These won't be visible in the - # summary list for long, but will be useful for someone reviewing this bot. - return self.TestLayoutChunk(chunk_num, chunk_size) - - # The known list of tests. - # Recognise the original abbreviations as well as full executable names. - _test_list = { - "cmdline" : RunCmdLine, - "addressinput": TestAddressInput, - "libaddressinput_unittests": TestAddressInput, - "accessibility": TestAccessibility, - "angle": TestAngle, "angle_unittests": TestAngle, - "app_list": TestAppList, "app_list_unittests": TestAppList, - "ash": TestAsh, "ash_unittests": TestAsh, - "aura": TestAura, "aura_unittests": TestAura, - "base": TestBase, "base_unittests": TestBase, - "blink_heap": TestBlinkHeap, - "blink_platform": TestBlinkPlatform, - "browser": TestBrowser, "browser_tests": TestBrowser, - "cacheinvalidation": TestCacheInvalidation, - "cacheinvalidation_unittests": TestCacheInvalidation, - "cast": TestCast, "cast_unittests": TestCast, - "cc": TestCC, "cc_unittests": TestCC, - "chrome_app": TestChromeApp, - "chrome_elf": TestChromeElf, - "chromedriver": TestChromeDriver, - "chromeos": TestChromeOS, "chromeos_unittests": TestChromeOS, - "components": TestComponents,"components_unittests": TestComponents, - "compositor": TestCompositor,"compositor_unittests": TestCompositor, - "content": TestContent, "content_unittests": TestContent, - "content_browsertests": TestContentBrowser, - "courgette": TestCourgette, "courgette_unittests": TestCourgette, - "crypto": TestCrypto, "crypto_unittests": TestCrypto, - "device": TestDevice, "device_unittests": TestDevice, - "display": TestDisplay, "display_unittests": TestDisplay, - "events": TestEvents, "events_unittests": TestEvents, - "extensions": TestExtensions, "extensions_unittests": TestExtensions, - "ffmpeg_regression_tests": TestFFmpegRegressions, - "gcm": TestGCM, "gcm_unit_tests": TestGCM, - "gin": TestGin, "gin_unittests": TestGin, - "gfx": TestGfx, "gfx_unittests": TestGfx, - "google_apis": TestGoogleApis, - "gpu": TestGPU, "gpu_unittests": TestGPU, - "ipc": TestIpc, "ipc_tests": TestIpc, - "installer_util": TestInstallerUtil, - "installer_util_unittests": TestInstallerUtil, - "install_static_unittests": TestInstallStatic, - "interactive_ui": TestInteractiveUI, - "jingle": TestJingle, "jingle_unittests": TestJingle, - "keyboard": TestKeyboard, "keyboard_unittests": TestKeyboard, - "latency": TestLatency, "latency_unittests": TestLatency, - "layout": TestLayout, "layout_tests": TestLayout, - "media": TestMedia, "media_unittests": TestMedia, - "message_center": TestMessageCenter, - "message_center_unittests" : TestMessageCenter, - "midi": TestMidi, "midi_unittests": TestMidi, - "mojo_common": TestMojoCommon, - "mojo_common_unittests": TestMojoCommon, - "mojo_system": TestMojoSystem, - "mojo_system_unittests": TestMojoSystem, - "mojo_public_system": TestMojoPublicSystem, - "mojo_public_system_unittests": TestMojoPublicSystem, - "mojo_public_bindings": TestMojoPublicBindings, - "mojo_public_bindings_unittests": TestMojoPublicBindings, - "mojo_public_sysperf": TestMojoPublicSysPerf, - "net": TestNet, "net_unittests": TestNet, - "net_perf": TestNetPerf, "net_perftests": TestNetPerf, - "phonenumber": TestPhoneNumber, - "libphonenumber_unittests": TestPhoneNumber, - "ppapi": TestPPAPI, "ppapi_unittests": TestPPAPI, - "printing": TestPrinting, "printing_unittests": TestPrinting, - "remoting": TestRemoting, "remoting_unittests": TestRemoting, - "sandbox": TestLinuxSandbox, "sandbox_linux_unittests": TestLinuxSandbox, - "skia": TestSkia, "skia_unittests": TestSkia, - "sql": TestSql, "sql_unittests": TestSql, - "storage": TestStorage, "storage_unittests": TestStorage, - "sync_integration_tests": TestSyncIntegration, - "sync_integration": TestSyncIntegration, - "ui_base_unit": TestUIBaseUnit, "ui_base_unittests": TestUIBaseUnit, - "ui_chromeos": TestUIChromeOS, "ui_chromeos_unittests": TestUIChromeOS, - "unit": TestUnit, "unit_tests": TestUnit, - "url": TestURL, "url_unittests": TestURL, - "views": TestViews, "views_unittests": TestViews, - "webkit": TestLayout, - } - - -def _main(): - parser = optparse.OptionParser("usage: %prog -b <dir> -t <test> " - "[-t <test> ...]") - - parser.add_option("--help-tests", dest="help_tests", action="store_true", - default=False, help="List all available tests") - parser.add_option("-b", "--build-dir", - help="the location of the compiler output") - parser.add_option("--target", help="Debug or Release") - parser.add_option("-t", "--test", action="append", default=[], - help="which test to run, supports test:gtest_filter format " - "as well.") - parser.add_option("--baseline", action="store_true", default=False, - help="generate baseline data instead of validating") - parser.add_option("-f", "--force", action="store_true", default=False, - help="run a broken test anyway") - parser.add_option("--gtest_filter", - help="additional arguments to --gtest_filter") - parser.add_option("--gtest_repeat", help="argument for --gtest_repeat") - parser.add_option("--gtest_shuffle", action="store_true", default=False, - help="Randomize tests' orders on every iteration.") - parser.add_option("--gtest_break_on_failure", action="store_true", - default=False, - help="Drop in to debugger on assertion failure. Also " - "useful for forcing tests to exit with a stack dump " - "on the first assertion failure when running with " - "--gtest_repeat=-1") - parser.add_option("-v", "--verbose", action="store_true", default=False, - help="verbose output - enable debug log messages") - parser.add_option("--tool", dest="valgrind_tool", default="memcheck", - help="specify a valgrind tool to run the tests under") - parser.add_option("--tool_flags", dest="valgrind_tool_flags", default="", - help="specify custom flags for the selected valgrind tool") - parser.add_option("--keep_logs", action="store_true", default=False, - help="store memory tool logs in the <tool>.logs directory " - "instead of /tmp.\nThis can be useful for tool " - "developers/maintainers.\nPlease note that the <tool>" - ".logs directory will be clobbered on tool startup.") - parser.add_option("-n", "--num_tests", type="int", - default=ChromeTests.LAYOUT_TESTS_DEFAULT_CHUNK_SIZE, - help="for layout tests: # of subtests per run. 0 for all.") - parser.add_option("--test-launcher-bot-mode", action="store_true", - help="run the tests with --test-launcher-bot-mode") - parser.add_option("--test-launcher-total-shards", type=int, - help="run the tests with --test-launcher-total-shards") - parser.add_option("--test-launcher-shard-index", type=int, - help="run the tests with --test-launcher-shard-index") - parser.add_option("--drmemory_ops", - help="extra options passed to Dr. Memory") - - options, args = parser.parse_args() - - # Bake target into build_dir. - if options.target and options.build_dir: - assert (options.target != - os.path.basename(os.path.dirname(options.build_dir))) - options.build_dir = os.path.join(os.path.abspath(options.build_dir), - options.target) - - if options.verbose: - logging_utils.config_root(logging.DEBUG) - else: - logging_utils.config_root() - - if options.help_tests: - ChromeTests.ShowTests() - return 0 - - if not options.test: - parser.error("--test not specified") - - if len(options.test) != 1 and options.gtest_filter: - parser.error("--gtest_filter and multiple tests don't make sense together") - - BROKEN_TESTS = { - 'drmemory_light': [ - 'addressinput', - 'aura', - 'base_unittests', - 'cc', - 'components', # x64 only? - 'content', - 'gfx', - 'mojo_public_bindings', - ], - 'drmemory_full': [ - 'addressinput', - 'aura', - 'base_unittests', - 'blink_heap', - 'blink_platform', - 'browser_tests', - 'cast', - 'cc', - 'chromedriver', - 'compositor', - 'content', - 'content_browsertests', - 'device', - 'events', - 'extensions', - 'gfx', - 'google_apis', - 'gpu', - 'ipc_tests', - 'jingle', - 'keyboard', - 'media', - 'midi', - 'mojo_common', - 'mojo_public_bindings', - 'mojo_public_sysperf', - 'mojo_public_system', - 'mojo_system', - 'net', - 'remoting', - 'unit', - 'url', - ], - } - - for t in options.test: - if t in BROKEN_TESTS[options.valgrind_tool] and not options.force: - logging.info("Skipping broken %s test %s -- see crbug.com/633693" % - (options.valgrind_tool, t)) - return 0 - - tests = ChromeTests(options, args, t) - ret = tests.Run() - if ret: return ret - return 0 - - -if __name__ == "__main__": - sys.exit(_main())
diff --git a/tools/valgrind/chrome_tests.sh b/tools/valgrind/chrome_tests.sh deleted file mode 100755 index 479138e..0000000 --- a/tools/valgrind/chrome_tests.sh +++ /dev/null
@@ -1,90 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Set up some paths and re-direct the arguments to chrome_tests.py - -export THISDIR=`dirname $0` -ARGV_COPY="$@" - -# We need to set CHROME_VALGRIND iff using Memcheck: -# tools/valgrind/chrome_tests.sh --tool memcheck -# or -# tools/valgrind/chrome_tests.sh --tool=memcheck -tool="memcheck" # Default to memcheck. -while (( "$#" )) -do - if [[ "$1" == "--tool" ]] - then - tool="$2" - shift - elif [[ "$1" =~ --tool=(.*) ]] - then - tool="${BASH_REMATCH[1]}" - fi - shift -done - -NEEDS_VALGRIND=0 -NEEDS_DRMEMORY=0 - -case "$tool" in - "memcheck") - NEEDS_VALGRIND=1 - ;; - "drmemory" | "drmemory_light" | "drmemory_full" | "drmemory_pattern") - NEEDS_DRMEMORY=1 - ;; -esac - -if [ "$NEEDS_VALGRIND" == "1" ] -then - export CHROME_VALGRIND=`sh $THISDIR/locate_valgrind.sh` - if [ "$CHROME_VALGRIND" = "" ] - then - # locate_valgrind.sh failed - exit 1 - fi - echo "Using valgrind binaries from ${CHROME_VALGRIND}" - - PATH="${CHROME_VALGRIND}/bin:$PATH" - # We need to set these variables to override default lib paths hard-coded into - # Valgrind binary. - export VALGRIND_LIB="$CHROME_VALGRIND/lib/valgrind" - export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind" - - # Clean up some /tmp directories that might be stale due to interrupted - # chrome_tests.py execution. - # FYI: - # -mtime +1 <- only print files modified more than 24h ago, - # -print0/-0 are needed to handle possible newlines in the filenames. - echo "Cleanup /tmp from Valgrind stuff" - find /tmp -maxdepth 1 \(\ - -name "vgdb-pipe-*" -or -name "vg_logs_*" -or -name "valgrind.*" \ - \) -mtime +1 -print0 | xargs -0 rm -rf -fi - -if [ "$NEEDS_DRMEMORY" == "1" ] -then - if [ -z "$DRMEMORY_COMMAND" ] - then - DRMEMORY_PATH="$THISDIR/../../third_party/drmemory" - DRMEMORY_SFX="$DRMEMORY_PATH/drmemory-windows-sfx.exe" - if [ ! -f "$DRMEMORY_SFX" ] - then - echo "Can't find Dr. Memory executables." - echo "See http://www.chromium.org/developers/how-tos/using-valgrind/dr-memory" - echo "for the instructions on how to get them." - exit 1 - fi - - chmod +x "$DRMEMORY_SFX" # Cygwin won't run it without +x. - "$DRMEMORY_SFX" -o"$DRMEMORY_PATH/unpacked" -y - export DRMEMORY_COMMAND="$DRMEMORY_PATH/unpacked/bin/drmemory.exe" - fi -fi - -PYTHONPATH=$THISDIR/../python/google python \ - "$THISDIR/chrome_tests.py" $ARGV_COPY
diff --git a/tools/valgrind/locate_valgrind.sh b/tools/valgrind/locate_valgrind.sh deleted file mode 100755 index a1e9bf2..0000000 --- a/tools/valgrind/locate_valgrind.sh +++ /dev/null
@@ -1,69 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Prints a path to Valgrind binaries to be used for Chromium. -# Select the valgrind from third_party/valgrind by default, -# but allow users to override this default without editing scripts and -# without specifying a commandline option - -export THISDIR=`dirname $0` - -# User may use their own valgrind by giving its path with CHROME_VALGRIND env. -if [ "$CHROME_VALGRIND" = "" ] -then - # Guess which binaries we should use by uname - case "$(uname -a)" in - *Linux*x86_64*) - PLATFORM="linux_x64" - ;; - *Linux*86*) - PLATFORM="linux_x86" - ;; - *Darwin*9.[678].[01]*i386*) - # Didn't test other kernels. - PLATFORM="mac" - ;; - *Darwin*10.[0-9].[0-9]*i386*) - PLATFORM="mac_10.6" - ;; - *Darwin*10.[0-9].[0-9]*x86_64*) - PLATFORM="mac_10.6" - ;; - *Darwin*11.[0-9].[0-9]*x86_64*) - PLATFORM="mac_10.7" - ;; - *) - (echo "Sorry, your platform is not supported:" && - uname -a - echo - echo "If you're on Mac OS X, please see http://crbug.com/441425") >&2 - exit 42 - esac - - # The binaries should be in third_party/valgrind - # (checked out from deps/third_party/valgrind/binaries). - CHROME_VALGRIND="$THISDIR/../../third_party/valgrind/$PLATFORM" - - # TODO(timurrrr): readlink -f is not present on Mac... - if [ "$PLATFORM" != "mac" ] && \ - [ "$PLATFORM" != "mac_10.6" ] && \ - [ "$PLATFORM" != "mac_10.7" ] - then - # Get rid of all "../" dirs - CHROME_VALGRIND=$(readlink -f $CHROME_VALGRIND) - fi -fi - -if ! test -x $CHROME_VALGRIND/bin/valgrind -then - echo "Oops, could not find Valgrind binaries in your checkout." >&2 - echo "Please see" >&2 - echo " http://dev.chromium.org/developers/how-tos/using-valgrind/get-valgrind" >&2 - echo "for the instructions on how to download pre-built binaries." >&2 - exit 1 -fi - -echo $CHROME_VALGRIND
diff --git a/tools/valgrind/valgrind.gni b/tools/valgrind/valgrind.gni deleted file mode 100644 index 84e8e42..0000000 --- a/tools/valgrind/valgrind.gni +++ /dev/null
@@ -1,64 +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. - -import("//build_overrides/build.gni") - -valgrind_dependencies = [ - "asan/asan_symbolize.py", - "asan/third_party/__init__.py", - "asan/third_party/asan_symbolize.py", - "browser_wrapper_win.py", - "chrome_tests.bat", - "chrome_tests.py", - "chrome_tests.sh", - "common.py", - "drmemory.bat", - "drmemory_analyze.py", - "fixed_suppressions.sh", - "gdb_helper.py", - "locate_valgrind.sh", - "memcheck/suppressions.txt", - "memcheck/suppressions_linux.txt", - "memcheck_analyze.py", - "regrind.sh", - "scan-build.py", - "suppressions.py", - "test_suppressions.py", - "unused_suppressions.py", - "valgrind.sh", - "valgrind_test.py", - "waterfall.sh", -] - -if (build_with_chromium) { - valgrind_dependencies += [ - "gtest_exclude/ash_unittests.gtest-memcheck.txt", - "gtest_exclude/aura_unittests.gtest.txt", - "gtest_exclude/base_unittests.gtest.txt", - "gtest_exclude/base_unittests.gtest_win-8.txt", - "gtest_exclude/base_unittests.gtest_win32.txt", - "gtest_exclude/blink_platform_unittests.gtest_win32.txt", - "gtest_exclude/browser_tests.gtest-memcheck.txt", - "gtest_exclude/chromeos_unittests.gtest.txt", - "gtest_exclude/components_unittests.gtest.txt", - "gtest_exclude/content_unittests.gtest.txt", - "gtest_exclude/extensions_unittests.gtest-memcheck.txt", - "gtest_exclude/interactive_ui_tests.gtest.txt", - "gtest_exclude/ipc_tests.gtest.txt", - "gtest_exclude/media_unittests.gtest.txt", - "gtest_exclude/message_center_unittests.gtest.txt", - "gtest_exclude/net_unittests.gtest-memcheck.txt", - "gtest_exclude/net_unittests.gtest.txt", - "gtest_exclude/net_unittests.gtest_linux.txt", - "gtest_exclude/remoting_unittests.gtest_win-8.txt", - "gtest_exclude/sandbox_linux_unittests.gtest.txt", - "gtest_exclude/suppressions.txt", - "gtest_exclude/sync_unit_tests.gtest-asan.txt", - "gtest_exclude/ui_base_unittests.gtest-memcheck.txt", - "gtest_exclude/ui_unittests.gtest-memcheck_linux.txt", - "gtest_exclude/unit_tests.gtest-memcheck.txt", - "gtest_exclude/unit_tests.gtest.txt", - "gtest_exclude/unit_tests.gtest_linux.txt", - ] -}
diff --git a/tools/valgrind/valgrind.sh b/tools/valgrind/valgrind.sh deleted file mode 100755 index 59b4071..0000000 --- a/tools/valgrind/valgrind.sh +++ /dev/null
@@ -1,106 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# This is a small script for manually launching valgrind, along with passing -# it the suppression file, and some helpful arguments (automatically attaching -# the debugger on failures, etc). Run it from your repo root, something like: -# $ sh ./tools/valgrind/valgrind.sh ./out/Debug/chrome -# -# This is mostly intended for running the chrome browser interactively. -# To run unit tests, you probably want to run chrome_tests.sh instead. -# That's the script used by the valgrind buildbot. - -export THISDIR=`dirname $0` - -setup_memcheck() { - RUN_COMMAND="valgrind" - - # Prompt to attach gdb when there was an error detected. - DEFAULT_TOOL_FLAGS=("--db-command=gdb -nw %f %p" "--db-attach=yes" \ - # Keep the registers in gdb in sync with the code. - "--vex-iropt-register-updates=allregs-at-mem-access" \ - # Overwrite newly allocated or freed objects - # with 0x41 to catch inproper use. - "--malloc-fill=41" "--free-fill=41" \ - # Increase the size of stacks being tracked. - "--num-callers=30") -} - -setup_unknown() { - echo "Unknown tool \"$TOOL_NAME\" specified, the result is not guaranteed" - DEFAULT_TOOL_FLAGS=() -} - -set -e - -if [ $# -eq 0 ]; then - echo "usage: <command to run> <arguments ...>" - exit 1 -fi - -TOOL_NAME="memcheck" -declare -a DEFAULT_TOOL_FLAGS[0] - -# Select a tool different from memcheck with --tool=TOOL as a first argument -TMP_STR=`echo $1 | sed 's/^\-\-tool=//'` -if [ "$TMP_STR" != "$1" ]; then - TOOL_NAME="$TMP_STR" - shift -fi - -if echo "$@" | grep "\-\-tool" ; then - echo "--tool=TOOL must be the first argument" >&2 - exit 1 -fi - -case $TOOL_NAME in - memcheck*) setup_memcheck "$1";; - *) setup_unknown;; -esac - - -SUPPRESSIONS="$THISDIR/$TOOL_NAME/suppressions.txt" - -CHROME_VALGRIND=`sh $THISDIR/locate_valgrind.sh` -if [ "$CHROME_VALGRIND" = "" ] -then - # locate_valgrind.sh failed - exit 1 -fi -echo "Using valgrind binaries from ${CHROME_VALGRIND}" - -set -x -PATH="${CHROME_VALGRIND}/bin:$PATH" -# We need to set these variables to override default lib paths hard-coded into -# Valgrind binary. -export VALGRIND_LIB="$CHROME_VALGRIND/lib/valgrind" -export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind" - -# G_SLICE=always-malloc: make glib use system malloc -# NSS_DISABLE_UNLOAD=1: make nss skip dlclosing dynamically loaded modules, -# which would result in "obj:*" in backtraces. -# NSS_DISABLE_ARENA_FREE_LIST=1: make nss use system malloc -# G_DEBUG=fatal_warnings: make GTK abort on any critical or warning assertions. -# If it crashes on you in the Options menu, you hit bug 19751, -# comment out the G_DEBUG=fatal_warnings line. -# -# GTEST_DEATH_TEST_USE_FORK=1: make gtest death tests valgrind-friendly -# -# When everyone has the latest valgrind, we might want to add -# --show-possibly-lost=no -# to ignore possible but not definite leaks. - -G_SLICE=always-malloc \ -NSS_DISABLE_UNLOAD=1 \ -NSS_DISABLE_ARENA_FREE_LIST=1 \ -G_DEBUG=fatal_warnings \ -GTEST_DEATH_TEST_USE_FORK=1 \ -$RUN_COMMAND \ - --trace-children=yes \ - --leak-check=yes \ - --suppressions="$SUPPRESSIONS" \ - "${DEFAULT_TOOL_FLAGS[@]}" \ - "$@"
diff --git a/tools/valgrind/valgrind_test.py b/tools/valgrind/valgrind_test.py deleted file mode 100644 index 8ef4830..0000000 --- a/tools/valgrind/valgrind_test.py +++ /dev/null
@@ -1,846 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Runs an exe through Valgrind and puts the intermediate files in a -directory. -""" - -import datetime -import glob -import logging -import optparse -import os -import re -import shutil -import stat -import subprocess -import sys -import tempfile - -import common - -import drmemory_analyze -import memcheck_analyze - -class BaseTool(object): - """Abstract class for running dynamic error detection tools. - - Always subclass this and implement ToolCommand with framework- and - tool-specific stuff. - """ - - def __init__(self): - temp_parent_dir = None - self.log_parent_dir = "" - if common.IsWindows(): - # gpu process on Windows Vista+ runs at Low Integrity and can only - # write to certain directories (http://crbug.com/119131) - # - # TODO(bruening): if scripts die in middle and don't clean up temp - # dir, we'll accumulate files in profile dir. should remove - # really old files automatically. - profile = os.getenv("USERPROFILE") - if profile: - self.log_parent_dir = profile + "\\AppData\\LocalLow\\" - if os.path.exists(self.log_parent_dir): - self.log_parent_dir = common.NormalizeWindowsPath(self.log_parent_dir) - temp_parent_dir = self.log_parent_dir - # Generated every time (even when overridden) - self.temp_dir = tempfile.mkdtemp(prefix="vg_logs_", dir=temp_parent_dir) - self.log_dir = self.temp_dir # overridable by --keep_logs - self.option_parser_hooks = [] - # TODO(glider): we may not need some of the env vars on some of the - # platforms. - self._env = { - "G_SLICE" : "always-malloc", - "NSS_DISABLE_UNLOAD" : "1", - "NSS_DISABLE_ARENA_FREE_LIST" : "1", - "GTEST_DEATH_TEST_USE_FORK": "1", - } - - def ToolName(self): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def Analyze(self, check_sanity=False): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def RegisterOptionParserHook(self, hook): - # Frameworks and tools can add their own flags to the parser. - self.option_parser_hooks.append(hook) - - def CreateOptionParser(self): - # Defines Chromium-specific flags. - self._parser = optparse.OptionParser("usage: %prog [options] <program to " - "test>") - self._parser.disable_interspersed_args() - self._parser.add_option("-t", "--timeout", - dest="timeout", metavar="TIMEOUT", default=10000, - help="timeout in seconds for the run (default 10000)") - self._parser.add_option("", "--build-dir", - help="the location of the compiler output") - self._parser.add_option("", "--source-dir", - help="path to top of source tree for this build" - "(used to normalize source paths in baseline)") - self._parser.add_option("", "--gtest_filter", default="", - help="which test case to run") - self._parser.add_option("", "--gtest_repeat", - help="how many times to run each test") - self._parser.add_option("", "--gtest_print_time", action="store_true", - default=False, - help="show how long each test takes") - self._parser.add_option("", "--ignore_exit_code", action="store_true", - default=False, - help="ignore exit code of the test " - "(e.g. test failures)") - self._parser.add_option("", "--keep_logs", action="store_true", - default=False, - help="store memory tool logs in the <tool>.logs " - "directory instead of /tmp.\nThis can be " - "useful for tool developers/maintainers.\n" - "Please note that the <tool>.logs directory " - "will be clobbered on tool startup.") - - # To add framework- or tool-specific flags, please add a hook using - # RegisterOptionParserHook in the corresponding subclass. - # See ValgrindTool for an example. - for hook in self.option_parser_hooks: - hook(self, self._parser) - - def ParseArgv(self, args): - self.CreateOptionParser() - - # self._tool_flags will store those tool flags which we don't parse - # manually in this script. - self._tool_flags = [] - known_args = [] - - """ We assume that the first argument not starting with "-" is a program - name and all the following flags should be passed to the program. - TODO(timurrrr): customize optparse instead - """ - while len(args) > 0 and args[0][:1] == "-": - arg = args[0] - if (arg == "--"): - break - if self._parser.has_option(arg.split("=")[0]): - known_args += [arg] - else: - self._tool_flags += [arg] - args = args[1:] - - if len(args) > 0: - known_args += args - - self._options, self._args = self._parser.parse_args(known_args) - - self._timeout = int(self._options.timeout) - self._source_dir = self._options.source_dir - if self._options.keep_logs: - # log_parent_dir has trailing slash if non-empty - self.log_dir = self.log_parent_dir + "%s.logs" % self.ToolName() - if os.path.exists(self.log_dir): - shutil.rmtree(self.log_dir) - os.mkdir(self.log_dir) - logging.info("Logs are in " + self.log_dir) - - self._ignore_exit_code = self._options.ignore_exit_code - if self._options.gtest_filter != "": - self._args.append("--gtest_filter=%s" % self._options.gtest_filter) - if self._options.gtest_repeat: - self._args.append("--gtest_repeat=%s" % self._options.gtest_repeat) - if self._options.gtest_print_time: - self._args.append("--gtest_print_time") - - return True - - def Setup(self, args): - return self.ParseArgv(args) - - def ToolCommand(self): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def Cleanup(self): - # You may override it in the tool-specific subclass - pass - - def Execute(self): - """ Execute the app to be tested after successful instrumentation. - Full execution command-line provided by subclassers via proc.""" - logging.info("starting execution...") - proc = self.ToolCommand() - for var in self._env: - common.PutEnvAndLog(var, self._env[var]) - return common.RunSubprocess(proc, self._timeout) - - def RunTestsAndAnalyze(self, check_sanity): - exec_retcode = self.Execute() - analyze_retcode = self.Analyze(check_sanity) - - if analyze_retcode: - logging.error("Analyze failed.") - logging.info("Search the log for '[ERROR]' to see the error reports.") - return analyze_retcode - - if exec_retcode: - if self._ignore_exit_code: - logging.info("Test execution failed, but the exit code is ignored.") - else: - logging.error("Test execution failed.") - return exec_retcode - else: - logging.info("Test execution completed successfully.") - - if not analyze_retcode: - logging.info("Analysis completed successfully.") - - return 0 - - def Main(self, args, check_sanity, min_runtime_in_seconds): - """Call this to run through the whole process: Setup, Execute, Analyze""" - start_time = datetime.datetime.now() - retcode = -1 - if self.Setup(args): - retcode = self.RunTestsAndAnalyze(check_sanity) - shutil.rmtree(self.temp_dir, ignore_errors=True) - self.Cleanup() - else: - logging.error("Setup failed") - end_time = datetime.datetime.now() - runtime_in_seconds = (end_time - start_time).seconds - hours = runtime_in_seconds / 3600 - seconds = runtime_in_seconds % 3600 - minutes = seconds / 60 - seconds = seconds % 60 - logging.info("elapsed time: %02d:%02d:%02d" % (hours, minutes, seconds)) - if (min_runtime_in_seconds > 0 and - runtime_in_seconds < min_runtime_in_seconds): - logging.error("Layout tests finished too quickly. " - "It should have taken at least %d seconds. " - "Something went wrong?" % min_runtime_in_seconds) - retcode = -1 - return retcode - - def Run(self, args, module, min_runtime_in_seconds=0): - MODULES_TO_SANITY_CHECK = ["base"] - - check_sanity = module in MODULES_TO_SANITY_CHECK - return self.Main(args, check_sanity, min_runtime_in_seconds) - - -class ValgrindTool(BaseTool): - """Abstract class for running Valgrind tools. - - Always subclass this and implement ToolSpecificFlags() and - ExtendOptionParser() for tool-specific stuff. - """ - def __init__(self): - super(ValgrindTool, self).__init__() - self.RegisterOptionParserHook(ValgrindTool.ExtendOptionParser) - - def UseXML(self): - # Override if tool prefers nonxml output - return True - - def ExtendOptionParser(self, parser): - parser.add_option("", "--suppressions", default=[], - action="append", - help="path to a valgrind suppression file") - parser.add_option("", "--indirect", action="store_true", - default=False, - help="set BROWSER_WRAPPER rather than " - "running valgrind directly") - parser.add_option("", "--indirect_webkit_layout", action="store_true", - default=False, - help="set --wrapper rather than running Dr. Memory " - "directly.") - parser.add_option("", "--trace_children", action="store_true", - default=False, - help="also trace child processes") - parser.add_option("", "--num-callers", - dest="num_callers", default=30, - help="number of callers to show in stack traces") - parser.add_option("", "--generate_dsym", action="store_true", - default=False, - help="Generate .dSYM file on Mac if needed. Slow!") - - def Setup(self, args): - if not BaseTool.Setup(self, args): - return False - if common.IsMac(): - self.PrepareForTestMac() - return True - - def PrepareForTestMac(self): - """Runs dsymutil if needed. - - Valgrind for Mac OS X requires that debugging information be in a .dSYM - bundle generated by dsymutil. It is not currently able to chase DWARF - data into .o files like gdb does, so executables without .dSYM bundles or - with the Chromium-specific "fake_dsym" bundles generated by - build/mac/strip_save_dsym won't give source file and line number - information in valgrind. - - This function will run dsymutil if the .dSYM bundle is missing or if - it looks like a fake_dsym. A non-fake dsym that already exists is assumed - to be up to date. - """ - test_command = self._args[0] - dsym_bundle = self._args[0] + '.dSYM' - dsym_file = os.path.join(dsym_bundle, 'Contents', 'Resources', 'DWARF', - os.path.basename(test_command)) - dsym_info_plist = os.path.join(dsym_bundle, 'Contents', 'Info.plist') - - needs_dsymutil = True - saved_test_command = None - - if os.path.exists(dsym_file) and os.path.exists(dsym_info_plist): - # Look for the special fake_dsym tag in dsym_info_plist. - dsym_info_plist_contents = open(dsym_info_plist).read() - - if not re.search('^\s*<key>fake_dsym</key>$', dsym_info_plist_contents, - re.MULTILINE): - # fake_dsym is not set, this is a real .dSYM bundle produced by - # dsymutil. dsymutil does not need to be run again. - needs_dsymutil = False - else: - # fake_dsym is set. dsym_file is a copy of the original test_command - # before it was stripped. Copy it back to test_command so that - # dsymutil has unstripped input to work with. Move the stripped - # test_command out of the way, it will be restored when this is - # done. - saved_test_command = test_command + '.stripped' - os.rename(test_command, saved_test_command) - shutil.copyfile(dsym_file, test_command) - shutil.copymode(saved_test_command, test_command) - - if needs_dsymutil: - if self._options.generate_dsym: - # Remove the .dSYM bundle if it exists. - shutil.rmtree(dsym_bundle, True) - - dsymutil_command = ['dsymutil', test_command] - - # dsymutil is crazy slow. Ideally we'd have a timeout here, - # but common.RunSubprocess' timeout is only checked - # after each line of output; dsymutil is silent - # until the end, and is then killed, which is silly. - common.RunSubprocess(dsymutil_command) - - if saved_test_command: - os.rename(saved_test_command, test_command) - else: - logging.info("No real .dSYM for test_command. Line numbers will " - "not be shown. Either tell xcode to generate .dSYM " - "file, or use --generate_dsym option to this tool.") - - def ToolCommand(self): - """Get the valgrind command to run.""" - # Note that self._args begins with the exe to be run. - tool_name = self.ToolName() - - # Construct the valgrind command. - if 'CHROME_VALGRIND' in os.environ: - path = os.path.join(os.environ['CHROME_VALGRIND'], "bin", "valgrind") - else: - path = "valgrind" - proc = [path, "--tool=%s" % tool_name] - - proc += ["--num-callers=%i" % int(self._options.num_callers)] - - if self._options.trace_children: - proc += ["--trace-children=yes"] - proc += ["--trace-children-skip='*dbus-daemon*'"] - proc += ["--trace-children-skip='*dbus-launch*'"] - proc += ["--trace-children-skip='*perl*'"] - proc += ["--trace-children-skip='*python*'"] - # This is really Python, but for some reason Valgrind follows it. - proc += ["--trace-children-skip='*lsb_release*'"] - - proc += self.ToolSpecificFlags() - proc += self._tool_flags - - suppression_count = 0 - for suppression_file in self._options.suppressions: - if os.path.exists(suppression_file): - suppression_count += 1 - proc += ["--suppressions=%s" % suppression_file] - - if not suppression_count: - logging.warning("WARNING: NOT USING SUPPRESSIONS!") - - logfilename = self.log_dir + ("/%s." % tool_name) + "%p" - if self.UseXML(): - proc += ["--xml=yes", "--xml-file=" + logfilename] - else: - proc += ["--log-file=" + logfilename] - - # The Valgrind command is constructed. - - # Handle --indirect_webkit_layout separately. - if self._options.indirect_webkit_layout: - # Need to create the wrapper before modifying |proc|. - wrapper = self.CreateBrowserWrapper(proc, webkit=True) - proc = self._args - proc.append("--wrapper") - proc.append(wrapper) - return proc - - if self._options.indirect: - wrapper = self.CreateBrowserWrapper(proc) - os.environ["BROWSER_WRAPPER"] = wrapper - logging.info('export BROWSER_WRAPPER=' + wrapper) - proc = [] - proc += self._args - return proc - - def ToolSpecificFlags(self): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def CreateBrowserWrapper(self, proc, webkit=False): - """The program being run invokes Python or something else that can't stand - to be valgrinded, and also invokes the Chrome browser. In this case, use a - magic wrapper to only valgrind the Chrome browser. Build the wrapper here. - Returns the path to the wrapper. It's up to the caller to use the wrapper - appropriately. - """ - command = " ".join(proc) - # Add the PID of the browser wrapper to the logfile names so we can - # separate log files for different UI tests at the analyze stage. - command = command.replace("%p", "$$.%p") - - (fd, indirect_fname) = tempfile.mkstemp(dir=self.log_dir, - prefix="browser_wrapper.", - text=True) - f = os.fdopen(fd, "w") - f.write('#!/bin/bash\n' - 'echo "Started Valgrind wrapper for this test, PID=$$" >&2\n') - - f.write('DIR=`dirname $0`\n' - 'TESTNAME_FILE=$DIR/testcase.$$.name\n\n') - - if webkit: - # Webkit layout_tests pass the URL as the first line of stdin. - f.write('tee $TESTNAME_FILE | %s "$@"\n' % command) - else: - # Try to get the test case name by looking at the program arguments. - # i.e. Chromium ui_tests used --test-name arg. - # TODO(timurrrr): This doesn't handle "--test-name Test.Name" - # TODO(timurrrr): ui_tests are dead. Where do we use the non-webkit - # wrapper now? browser_tests? What do they do? - f.write('for arg in $@\ndo\n' - ' if [[ "$arg" =~ --test-name=(.*) ]]\n then\n' - ' echo ${BASH_REMATCH[1]} >$TESTNAME_FILE\n' - ' fi\n' - 'done\n\n' - '%s "$@"\n' % command) - - f.close() - os.chmod(indirect_fname, stat.S_IRUSR|stat.S_IXUSR) - return indirect_fname - - def CreateAnalyzer(self): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def GetAnalyzeResults(self, check_sanity=False): - # Glob all the files in the log directory - filenames = glob.glob(self.log_dir + "/" + self.ToolName() + ".*") - - # If we have browser wrapper, the logfiles are named as - # "toolname.wrapper_PID.valgrind_PID". - # Let's extract the list of wrapper_PIDs and name it ppids - ppids = set([int(f.split(".")[-2]) \ - for f in filenames if re.search("\.[0-9]+\.[0-9]+$", f)]) - - analyzer = self.CreateAnalyzer() - if len(ppids) == 0: - # Fast path - no browser wrapper was set. - return analyzer.Report(filenames, None, check_sanity) - - ret = 0 - for ppid in ppids: - testcase_name = None - try: - f = open(self.log_dir + ("/testcase.%d.name" % ppid)) - testcase_name = f.read().strip() - f.close() - wk_layout_prefix="third_party/WebKit/LayoutTests/" - wk_prefix_at = testcase_name.rfind(wk_layout_prefix) - if wk_prefix_at != -1: - testcase_name = testcase_name[wk_prefix_at + len(wk_layout_prefix):] - except IOError: - pass - print "=====================================================" - print " Below is the report for valgrind wrapper PID=%d." % ppid - if testcase_name: - print " It was used while running the `%s` test." % testcase_name - else: - print " You can find the corresponding test" - print " by searching the above log for 'PID=%d'" % ppid - sys.stdout.flush() - - ppid_filenames = [f for f in filenames \ - if re.search("\.%d\.[0-9]+$" % ppid, f)] - # check_sanity won't work with browser wrappers - assert check_sanity == False - ret |= analyzer.Report(ppid_filenames, testcase_name) - print "=====================================================" - sys.stdout.flush() - - if ret != 0: - print "" - print "The Valgrind reports are grouped by test names." - print "Each test has its PID printed in the log when the test was run" - print "and at the beginning of its Valgrind report." - print "Hint: you can search for the reports by Ctrl+F -> `=#`" - sys.stdout.flush() - - return ret - - -# TODO(timurrrr): Split into a separate file. -class Memcheck(ValgrindTool): - """Memcheck - Dynamic memory error detector for Linux & Mac - - http://valgrind.org/info/tools.html#memcheck - """ - - def __init__(self): - super(Memcheck, self).__init__() - self.RegisterOptionParserHook(Memcheck.ExtendOptionParser) - - def ToolName(self): - return "memcheck" - - def ExtendOptionParser(self, parser): - parser.add_option("--leak-check", "--leak_check", type="string", - default="yes", # --leak-check=yes is equivalent of =full - help="perform leak checking at the end of the run") - parser.add_option("", "--show_all_leaks", action="store_true", - default=False, - help="also show less blatant leaks") - parser.add_option("", "--track_origins", action="store_true", - default=False, - help="Show whence uninitialized bytes came. 30% slower.") - - def ToolSpecificFlags(self): - ret = ["--gen-suppressions=all", "--demangle=no"] - ret += ["--leak-check=%s" % self._options.leak_check] - - if self._options.show_all_leaks: - ret += ["--show-reachable=yes"] - else: - ret += ["--show-possibly-lost=no"] - - if self._options.track_origins: - ret += ["--track-origins=yes"] - - # TODO(glider): this is a temporary workaround for http://crbug.com/51716 - # Let's see whether it helps. - if common.IsMac(): - ret += ["--smc-check=all"] - - return ret - - def CreateAnalyzer(self): - use_gdb = common.IsMac() - return memcheck_analyze.MemcheckAnalyzer(self._source_dir, - self._options.show_all_leaks, - use_gdb=use_gdb) - - def Analyze(self, check_sanity=False): - ret = self.GetAnalyzeResults(check_sanity) - - if ret != 0: - logging.info("Please see http://dev.chromium.org/developers/how-tos/" - "using-valgrind for the info on Memcheck/Valgrind") - return ret - - -class DrMemory(BaseTool): - """Dr.Memory - Dynamic memory error detector for Windows. - - http://dev.chromium.org/developers/how-tos/using-drmemory - It is not very mature at the moment, some things might not work properly. - """ - - def __init__(self, full_mode, pattern_mode): - super(DrMemory, self).__init__() - self.full_mode = full_mode - self.pattern_mode = pattern_mode - self.RegisterOptionParserHook(DrMemory.ExtendOptionParser) - - def ToolName(self): - return "drmemory" - - def ExtendOptionParser(self, parser): - parser.add_option("", "--suppressions", default=[], - action="append", - help="path to a drmemory suppression file") - parser.add_option("", "--follow_python", action="store_true", - default=False, dest="follow_python", - help="Monitor python child processes. If off, neither " - "python children nor any children of python children " - "will be monitored.") - parser.add_option("", "--indirect", action="store_true", - default=False, - help="set BROWSER_WRAPPER rather than " - "running Dr. Memory directly on the harness") - parser.add_option("", "--indirect_webkit_layout", action="store_true", - default=False, - help="set --wrapper rather than running valgrind " - "directly.") - parser.add_option("", "--use_debug", action="store_true", - default=False, dest="use_debug", - help="Run Dr. Memory debug build") - parser.add_option("", "--trace_children", action="store_true", - default=True, - help="TODO: default value differs from Valgrind") - parser.add_option("", "--drmemory_ops", - help="Extra options passed to Dr. Memory") - - def ToolCommand(self): - """Get the tool command to run.""" - # WINHEAP is what Dr. Memory supports as there are issues w/ both - # jemalloc (https://github.com/DynamoRIO/drmemory/issues/320) and - # tcmalloc (https://github.com/DynamoRIO/drmemory/issues/314) - add_env = { - "CHROME_ALLOCATOR" : "WINHEAP", - "JSIMD_FORCEMMX" : "1", # https://github.com/DynamoRIO/drmemory/issues/540 - } - for k,v in add_env.iteritems(): - logging.info("export %s=%s", k, v) - os.putenv(k, v) - - drmem_cmd = os.getenv("DRMEMORY_COMMAND") - if not drmem_cmd: - raise RuntimeError, "Please set DRMEMORY_COMMAND environment variable " \ - "with the path to drmemory.exe" - proc = drmem_cmd.split(" ") - - # By default, don't run python (this will exclude python's children as well) - # to reduce runtime. We're not really interested in spending time finding - # bugs in the python implementation. - # With file-based config we must update the file every time, and - # it will affect simultaneous drmem uses by this user. While file-based - # config has many advantages, here we may want this-instance-only - # (https://github.com/DynamoRIO/drmemory/issues/334). - drconfig_cmd = [ proc[0].replace("drmemory.exe", "drconfig.exe") ] - drconfig_cmd += ["-quiet"] # suppress errors about no 64-bit libs - run_drconfig = True - if self._options.follow_python: - logging.info("Following python children") - # -unreg fails if not already registered so query for that first - query_cmd = drconfig_cmd + ["-isreg", "python.exe"] - query_proc = subprocess.Popen(query_cmd, stdout=subprocess.PIPE, - shell=True) - (query_out, query_err) = query_proc.communicate() - if re.search("exe not registered", query_out): - run_drconfig = False # all set - else: - drconfig_cmd += ["-unreg", "python.exe"] - else: - logging.info("Excluding python children") - drconfig_cmd += ["-reg", "python.exe", "-norun"] - if run_drconfig: - drconfig_retcode = common.RunSubprocess(drconfig_cmd, self._timeout) - if drconfig_retcode: - logging.error("Configuring whether to follow python children failed " \ - "with %d.", drconfig_retcode) - raise RuntimeError, "Configuring python children failed " - - suppression_count = 0 - supp_files = self._options.suppressions - if self.full_mode: - supp_files += [s.replace(".txt", "_full.txt") for s in supp_files] - for suppression_file in supp_files: - if os.path.exists(suppression_file): - suppression_count += 1 - proc += ["-suppress", common.NormalizeWindowsPath(suppression_file)] - - if not suppression_count: - logging.warning("WARNING: NOT USING SUPPRESSIONS!") - - # Un-comment to dump Dr.Memory events on error - #proc += ["-dr_ops", "-dumpcore_mask", "-dr_ops", "0x8bff"] - - # Un-comment and comment next line to debug Dr.Memory - #proc += ["-dr_ops", "-no_hide"] - #proc += ["-dr_ops", "-msgbox_mask", "-dr_ops", "15"] - #Proc += ["-dr_ops", "-stderr_mask", "-dr_ops", "15"] - # Ensure we see messages about Dr. Memory crashing! - proc += ["-dr_ops", "-stderr_mask", "-dr_ops", "12"] - - if self._options.use_debug: - proc += ["-debug"] - - proc += ["-logdir", common.NormalizeWindowsPath(self.log_dir)] - - if self.log_parent_dir: - # gpu process on Windows Vista+ runs at Low Integrity and can only - # write to certain directories (http://crbug.com/119131) - symcache_dir = os.path.join(self.log_parent_dir, "drmemory.symcache") - elif self._options.build_dir: - # The other case is only possible with -t cmdline. - # Anyways, if we omit -symcache_dir the -logdir's value is used which - # should be fine. - symcache_dir = os.path.join(self._options.build_dir, "drmemory.symcache") - if symcache_dir: - if not os.path.exists(symcache_dir): - try: - os.mkdir(symcache_dir) - except OSError: - logging.warning("Can't create symcache dir?") - if os.path.exists(symcache_dir): - proc += ["-symcache_dir", common.NormalizeWindowsPath(symcache_dir)] - - # Use -no_summary to suppress DrMemory's summary and init-time - # notifications. We generate our own with drmemory_analyze.py. - proc += ["-batch", "-no_summary"] - - # Un-comment to disable interleaved output. Will also suppress error - # messages normally printed to stderr. - #proc += ["-quiet", "-no_results_to_stderr"] - - proc += ["-callstack_max_frames", "40"] - - # disable leak scan for now - proc += ["-no_count_leaks", "-no_leak_scan"] - - # disable warnings about unaddressable prefetches - proc += ["-no_check_prefetch"] - - # crbug.com/413215, no heap mismatch check for Windows release build binary - if common.IsWindows() and "Release" in self._options.build_dir: - proc += ["-no_check_delete_mismatch"] - - # We are seeing false positive invalid heap args on 64-bit, so we are - # disabling the feature for now (xref - # https://github.com/DynamoRIO/drmemory/issues/1839). - if common.IsWindows() and "Release_x64" in self._options.build_dir: - proc += ["-no_check_heap_mismatch"] - - # make callstacks easier to read - proc += ["-callstack_srcfile_prefix", - "build\\src,chromium\\src,crt_build\\self_x86"] - proc += ["-callstack_modname_hide", - "*drmemory*,chrome.dll"] - - boring_callers = common.BoringCallers(mangled=False, use_re_wildcards=False) - # TODO(timurrrr): In fact, we want "starting from .." instead of "below .." - proc += ["-callstack_truncate_below", ",".join(boring_callers)] - - # crbug.com/155839: extra Dr. Memory options passed via --drmemory_ops - if self._options.drmemory_ops: - proc.extend(self._options.drmemory_ops.split()) - - if self.pattern_mode: - proc += ["-pattern", "0xf1fd", "-no_count_leaks", "-redzone_size", "0x20"] - elif not self.full_mode: - proc += ["-light"] - - proc += self._tool_flags - - # Dr.Memory requires -- to separate tool flags from the executable name. - proc += ["--"] - - if self._options.indirect or self._options.indirect_webkit_layout: - wrapper_path = os.path.join(self._source_dir, - "tools", "valgrind", "browser_wrapper_win.py") - wrapper = " ".join(["python", wrapper_path] + proc) - self.CreateBrowserWrapper(wrapper) - logging.info("browser wrapper = " + " ".join(proc)) - if self._options.indirect_webkit_layout: - proc = self._args - # Layout tests want forward slashes. - wrapper = wrapper.replace('\\', '/') - proc += ["--wrapper", wrapper] - return proc - else: - proc = [] - - # Note that self._args begins with the name of the exe to be run. - self._args[0] = common.NormalizeWindowsPath(self._args[0]) - proc += self._args - return proc - - def CreateBrowserWrapper(self, command): - os.putenv("BROWSER_WRAPPER", command) - - def Analyze(self, check_sanity=False): - # Use one analyzer for all the log files to avoid printing duplicate reports - # - # TODO(timurrrr): unify this with Valgrind and other tools when we have - # https://github.com/DynamoRIO/drmemory/issues/684 - analyzer = drmemory_analyze.DrMemoryAnalyzer() - - ret = 0 - if not self._options.indirect and not self._options.indirect_webkit_layout: - filenames = glob.glob(self.log_dir + "/*/results.txt") - - ret = analyzer.Report(filenames, None, check_sanity) - else: - testcases = glob.glob(self.log_dir + "/testcase.*.logs") - # If we have browser wrapper, the per-test logdirs are named as - # "testcase.wrapper_PID.name". - # Let's extract the list of wrapper_PIDs and name it ppids. - # NOTE: ppids may contain '_', i.e. they are not ints! - ppids = set([f.split(".")[-2] for f in testcases]) - - for ppid in ppids: - testcase_name = None - try: - f = open("%s/testcase.%s.name" % (self.log_dir, ppid)) - testcase_name = f.read().strip() - f.close() - except IOError: - pass - print "=====================================================" - print " Below is the report for drmemory wrapper PID=%s." % ppid - if testcase_name: - print " It was used while running the `%s` test." % testcase_name - else: - # TODO(timurrrr): hm, the PID line is suppressed on Windows... - print " You can find the corresponding test" - print " by searching the above log for 'PID=%s'" % ppid - sys.stdout.flush() - ppid_filenames = glob.glob("%s/testcase.%s.logs/*/results.txt" % - (self.log_dir, ppid)) - ret |= analyzer.Report(ppid_filenames, testcase_name, False) - print "=====================================================" - sys.stdout.flush() - - logging.info("Please see http://dev.chromium.org/developers/how-tos/" - "using-drmemory for the info on Dr. Memory") - return ret - - -class ToolFactory: - def Create(self, tool_name): - if tool_name == "memcheck": - return Memcheck() - if tool_name == "drmemory" or tool_name == "drmemory_light": - # TODO(timurrrr): remove support for "drmemory" when buildbots are - # switched to drmemory_light OR make drmemory==drmemory_full the default - # mode when the tool is mature enough. - return DrMemory(False, False) - if tool_name == "drmemory_full": - return DrMemory(True, False) - if tool_name == "drmemory_pattern": - return DrMemory(False, True) - try: - platform_name = common.PlatformNames()[0] - except common.NotImplementedError: - platform_name = sys.platform + "(Unknown)" - raise RuntimeError, "Unknown tool (tool=%s, platform=%s)" % (tool_name, - platform_name) - -def CreateTool(tool): - return ToolFactory().Create(tool)
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc index f263927..e76925d 100644 --- a/ui/compositor/compositor.cc +++ b/ui/compositor/compositor.cc
@@ -43,6 +43,7 @@ #include "ui/compositor/layer_animator_collection.h" #include "ui/compositor/scoped_animation_duration_scale_mode.h" #include "ui/display/display_switches.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gfx/icc_profile.h" #include "ui/gfx/switches.h" #include "ui/gl/gl_switches.h"
diff --git a/ui/compositor/compositor_util.cc b/ui/compositor/compositor_util.cc index 59631c6..20231eb 100644 --- a/ui/compositor/compositor_util.cc +++ b/ui/compositor/compositor_util.cc
@@ -9,7 +9,7 @@ #include "cc/output/renderer_settings.h" #include "ui/compositor/compositor_switches.h" #include "ui/display/display_switches.h" -#include "ui/gfx/switches.h" +#include "ui/gfx/color_space_switches.h" namespace ui {
diff --git a/ui/display/mac/screen_mac.mm b/ui/display/mac/screen_mac.mm index 0340aef..d74ab25c 100644 --- a/ui/display/mac/screen_mac.mm +++ b/ui/display/mac/screen_mac.mm
@@ -19,8 +19,8 @@ #include "base/timer/timer.h" #include "ui/display/display.h" #include "ui/display/display_change_notifier.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gfx/mac/coordinate_conversion.h" -#include "ui/gfx/switches.h" extern "C" { Boolean CGDisplayUsesForceToGray(void);
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn index cf8e1d3..278bd5f 100644 --- a/ui/gfx/BUILD.gn +++ b/ui/gfx/BUILD.gn
@@ -54,8 +54,6 @@ "color_analysis.cc", "color_analysis.h", "color_palette.h", - "color_space_win.cc", - "color_space_win.h", "color_transform.cc", "color_transform.h", "color_utils.cc", @@ -88,9 +86,6 @@ "gfx_paths.h", "half_float.cc", "half_float.h", - "icc_profile_mac.mm", - "icc_profile_win.cc", - "icc_profile_x11.cc", "icon_util.cc", "icon_util.h", "image/image.cc", @@ -237,10 +232,10 @@ public_deps = [ ":color_space", ":geometry_skia", + ":gfx_switches", ":memory_buffer_sources", ":native_widget_types", ":selection_bound_sources", - ":switches_sources", "//base", "//skia", "//third_party/icu", @@ -387,10 +382,7 @@ deps += [ "//ui/gfx/x" ] configs += [ "//build/config/linux:x11" ] } else { - sources -= [ - "icc_profile_x11.cc", - "path_x11.cc", - ] + sources -= [ "path_x11.cc" ] } if (use_cairo) { @@ -402,22 +394,37 @@ sources = [ "color_space.cc", "color_space.h", + "color_space_export.h", + "color_space_win.cc", + "color_space_win.h", "icc_profile.cc", "icc_profile.h", + "icc_profile_mac.mm", + "icc_profile_win.cc", + "icc_profile_x11.cc", "skia_color_space_util.cc", "skia_color_space_util.h", ] public_deps = [ - ":gfx_export", + ":gfx_switches", "//base", "//skia", ] - deps = [ - ":switches_sources", - "//base", - "//skia", - ] - defines = [ "GFX_IMPLEMENTATION" ] + if (is_mac) { + libs = [ + "CoreFoundation.framework", + "CoreGraphics.framework", + ] + } + if (use_x11) { + deps = [ + "//ui/gfx/x", + ] + configs += [ "//build/config/linux:x11" ] + } else { + sources -= [ "icc_profile_x11.cc" ] + } + defines = [ "COLOR_SPACE_IMPLEMENTATION" ] } # Depend on this to use half_float.h without pulling in all of gfx. @@ -529,8 +536,8 @@ defines = [ "GFX_IMPLEMENTATION" ] deps = [ + ":gfx_switches", ":native_widget_types", - ":switches_sources", "//base", "//ui/gfx/geometry", ] @@ -547,18 +554,23 @@ } } -source_set("switches_sources") { - visibility = [ ":*" ] # Depend on through ":switches_sources". - +# TODO(ccameron): This should not be a separate component. Once the flag for +# color correct rendering is removed, color_space_switches.h may be moved +# into color_space (since it will be included in fewer places), and once the +# "best monitor color profile" function is removed, switches.h may be moved +# back into its own source_set. +component("gfx_switches") { sources = [ + "color_space_switches.cc", + "color_space_switches.h", "switches.cc", "switches.h", + "switches_export.h", ] - defines = [ "GFX_IMPLEMENTATION" ] + defines = [ "GFX_SWITCHES_IMPLEMENTATION" ] deps = [ - ":gfx_export", "//base", ] }
diff --git a/ui/gfx/color_space.h b/ui/gfx/color_space.h index 35d3425..813d7d808 100644 --- a/ui/gfx/color_space.h +++ b/ui/gfx/color_space.h
@@ -12,7 +12,7 @@ #include "base/macros.h" #include "build/build_config.h" #include "third_party/skia/include/core/SkColorSpace.h" -#include "ui/gfx/gfx_export.h" +#include "ui/gfx/color_space_export.h" namespace IPC { template <class P> @@ -26,7 +26,7 @@ // Used to represet a color space for the purpose of color conversion. // This is designed to be safe and compact enough to send over IPC // between any processes. -class GFX_EXPORT ColorSpace { +class COLOR_SPACE_EXPORT ColorSpace { public: enum class PrimaryID : uint8_t { INVALID, @@ -212,8 +212,8 @@ }; // Stream operator so ColorSpace can be used in assertion statements. -GFX_EXPORT std::ostream& operator<<(std::ostream& out, - const ColorSpace& color_space); +COLOR_SPACE_EXPORT std::ostream& operator<<(std::ostream& out, + const ColorSpace& color_space); } // namespace gfx
diff --git a/ui/gfx/color_space_export.h b/ui/gfx/color_space_export.h new file mode 100644 index 0000000..a0402b7 --- /dev/null +++ b/ui/gfx/color_space_export.h
@@ -0,0 +1,29 @@ +// 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 UI_GFX_COLOR_SPACE_EXPORT_H_ +#define UI_GFX_COLOR_SPACE_EXPORT_H_ + +#if defined(COMPONENT_BUILD) +#if defined(WIN32) + +#if defined(COLOR_SPACE_IMPLEMENTATION) +#define COLOR_SPACE_EXPORT __declspec(dllexport) +#else +#define COLOR_SPACE_EXPORT __declspec(dllimport) +#endif // defined(COLOR_SPACE_IMPLEMENTATION) + +#else // defined(WIN32) +#if defined(COLOR_SPACE_IMPLEMENTATION) +#define COLOR_SPACE_EXPORT __attribute__((visibility("default"))) +#else +#define COLOR_SPACE_EXPORT +#endif +#endif + +#else // defined(COMPONENT_BUILD) +#define COLOR_SPACE_EXPORT +#endif + +#endif // UI_GFX_COLOR_SPACE_EXPORT_H_
diff --git a/ui/gfx/color_space_switches.cc b/ui/gfx/color_space_switches.cc new file mode 100644 index 0000000..33295ee --- /dev/null +++ b/ui/gfx/color_space_switches.cc
@@ -0,0 +1,19 @@ +// Copyright 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/gfx/color_space_switches.h" +#include "build/build_config.h" + +namespace switches { + +// Convert rasterization and compositing inputs to the output color space +// before operating on them. +const char kEnableColorCorrectRendering[] = "enable-color-correct-rendering"; + +// Force all monitors to be treated as though they have the specified color +// profile. Accepted values are "srgb" and "generic-rgb" (currently used by Mac +// layout tests) and "color-spin-gamma24" (used by layout tests). +const char kForceColorProfile[] = "force-color-profile"; + +} // namespace switches
diff --git a/ui/gfx/color_space_switches.h b/ui/gfx/color_space_switches.h new file mode 100644 index 0000000..904eca3 --- /dev/null +++ b/ui/gfx/color_space_switches.h
@@ -0,0 +1,19 @@ +// Copyright 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_GFX_COLOR_SPACE_SWITCHES_H_ +#define UI_GFX_COLOR_SPACE_SWITCHES_H_ + +#include "build/build_config.h" +#include "ui/gfx/switches_export.h" + +namespace switches { + +GFX_SWITCHES_EXPORT extern const char kEnableColorCorrectRendering[]; + +GFX_SWITCHES_EXPORT extern const char kForceColorProfile[]; + +} // namespace switches + +#endif // UI_GFX_COLOR_SPACE_SWITCHES_H_
diff --git a/ui/gfx/color_space_win.h b/ui/gfx/color_space_win.h index af11c6e5..d02bca78 100644 --- a/ui/gfx/color_space_win.h +++ b/ui/gfx/color_space_win.h
@@ -24,7 +24,7 @@ namespace gfx { -class GFX_EXPORT ColorSpaceWin { +class COLOR_SPACE_EXPORT ColorSpaceWin { public: static DXVA2_ExtendedFormat GetExtendedFormat(const ColorSpace& color_space); static DXGI_COLOR_SPACE_TYPE GetDXGIColorSpace(const ColorSpace& color_space);
diff --git a/ui/gfx/icc_profile.cc b/ui/gfx/icc_profile.cc index 723d062..a8d643d 100644 --- a/ui/gfx/icc_profile.cc +++ b/ui/gfx/icc_profile.cc
@@ -12,8 +12,8 @@ #include "base/synchronization/lock.h" #include "third_party/skia/include/core/SkColorSpaceXform.h" #include "third_party/skia/include/core/SkICC.h" +#include "ui/gfx/color_space_switches.h" #include "ui/gfx/skia_color_space_util.h" -#include "ui/gfx/switches.h" namespace gfx {
diff --git a/ui/gfx/icc_profile.h b/ui/gfx/icc_profile.h index 8146b77..07f6fcb 100644 --- a/ui/gfx/icc_profile.h +++ b/ui/gfx/icc_profile.h
@@ -27,7 +27,7 @@ // can be lossily compressed into a ColorSpace object. This structure should // only be sent from higher-privilege processes to lower-privilege processes, // as parsing this structure is not secure. -class GFX_EXPORT ICCProfile { +class COLOR_SPACE_EXPORT ICCProfile { public: ICCProfile(); ICCProfile(ICCProfile&& other);
diff --git a/ui/gfx/mac/io_surface.cc b/ui/gfx/mac/io_surface.cc index 90dadff5..8fb16032 100644 --- a/ui/gfx/mac/io_surface.cc +++ b/ui/gfx/mac/io_surface.cc
@@ -15,7 +15,7 @@ #include "base/metrics/histogram_macros.h" #include "base/trace_event/trace_event.h" #include "ui/gfx/buffer_format_util.h" -#include "ui/gfx/switches.h" +#include "ui/gfx/color_space_switches.h" namespace gfx {
diff --git a/ui/gfx/paint_vector_icon_unittest.cc b/ui/gfx/paint_vector_icon_unittest.cc index 1adbb3f..de6e497 100644 --- a/ui/gfx/paint_vector_icon_unittest.cc +++ b/ui/gfx/paint_vector_icon_unittest.cc
@@ -56,7 +56,7 @@ sk_sp<cc::PaintRecord> record = recorder.finishRecordingAsPicture(); MockCanvas mock(100, 100); - record->playback(&mock); + record->Playback(&mock); ASSERT_EQ(1U, mock.paths().size()); SkPoint last_point;
diff --git a/ui/gfx/skia_color_space_util.cc b/ui/gfx/skia_color_space_util.cc index 3c71007..51b7e6a 100644 --- a/ui/gfx/skia_color_space_util.cc +++ b/ui/gfx/skia_color_space_util.cc
@@ -424,9 +424,9 @@ return false; } -bool GFX_EXPORT SkApproximateTransferFn(sk_sp<SkICC> sk_icc, - float* max_error, - SkColorSpaceTransferFn* fn) { +bool SkApproximateTransferFn(sk_sp<SkICC> sk_icc, + float* max_error, + SkColorSpaceTransferFn* fn) { SkICC::Tables tables; bool got_tables = sk_icc->rawTransferFnData(&tables); if (!got_tables)
diff --git a/ui/gfx/skia_color_space_util.h b/ui/gfx/skia_color_space_util.h index 5ece50e..5260736 100644 --- a/ui/gfx/skia_color_space_util.h +++ b/ui/gfx/skia_color_space_util.h
@@ -7,38 +7,39 @@ #include "third_party/skia/include/core/SkColorSpace.h" #include "third_party/skia/include/core/SkICC.h" -#include "ui/gfx/gfx_export.h" +#include "ui/gfx/color_space_export.h" namespace gfx { -float GFX_EXPORT SkTransferFnEval(const SkColorSpaceTransferFn& fn, float x); +float COLOR_SPACE_EXPORT SkTransferFnEval(const SkColorSpaceTransferFn& fn, + float x); -SkColorSpaceTransferFn GFX_EXPORT +SkColorSpaceTransferFn COLOR_SPACE_EXPORT SkTransferFnInverse(const SkColorSpaceTransferFn& fn); -bool GFX_EXPORT +bool COLOR_SPACE_EXPORT SkTransferFnsApproximatelyCancel(const SkColorSpaceTransferFn& a, const SkColorSpaceTransferFn& b); -bool GFX_EXPORT +bool COLOR_SPACE_EXPORT SkTransferFnIsApproximatelyIdentity(const SkColorSpaceTransferFn& fn); // Approximates the |n| points in |x| and |t| by the transfer function |fn|. // Returns true if the approximation converged. -bool GFX_EXPORT SkApproximateTransferFn(const float* x, - const float* t, - size_t n, - SkColorSpaceTransferFn* fn); +bool COLOR_SPACE_EXPORT SkApproximateTransferFn(const float* x, + const float* t, + size_t n, + SkColorSpaceTransferFn* fn); // Approximates |sk_icc| by the transfer function |fn|. Returns in |max_error| // the maximum pointwise of all color channels' transfer functions with |fn|. // Returns false if no approximation was possible, or no approximation // converged. -bool GFX_EXPORT SkApproximateTransferFn(sk_sp<SkICC> sk_icc, - float* max_error, - SkColorSpaceTransferFn* fn); +bool COLOR_SPACE_EXPORT SkApproximateTransferFn(sk_sp<SkICC> sk_icc, + float* max_error, + SkColorSpaceTransferFn* fn); -bool GFX_EXPORT SkMatrixIsApproximatelyIdentity(const SkMatrix44& m); +bool COLOR_SPACE_EXPORT SkMatrixIsApproximatelyIdentity(const SkMatrix44& m); } // namespace gfx
diff --git a/ui/gfx/switches.cc b/ui/gfx/switches.cc index 0219b5e..07ee2fc 100644 --- a/ui/gfx/switches.cc +++ b/ui/gfx/switches.cc
@@ -21,13 +21,4 @@ // Run in headless mode, i.e., without a UI or display server dependencies. const char kHeadless[] = "headless"; -// Convert rasterization and compositing inputs to the output color space -// before operating on them. -const char kEnableColorCorrectRendering[] = "enable-color-correct-rendering"; - -// Force all monitors to be treated as though they have the specified color -// profile. Accepted values are "srgb" and "generic-rgb" (currently used by Mac -// layout tests) and "color-spin-gamma24" (used by layout tests). -const char kForceColorProfile[] = "force-color-profile"; - } // namespace switches
diff --git a/ui/gfx/switches.h b/ui/gfx/switches.h index b87dad5..8d2e13e 100644 --- a/ui/gfx/switches.h +++ b/ui/gfx/switches.h
@@ -6,23 +6,19 @@ #define UI_GFX_SWITCHES_H_ #include "build/build_config.h" -#include "ui/gfx/gfx_export.h" +#include "ui/gfx/switches_export.h" namespace switches { #if defined(OS_WIN) -GFX_EXPORT extern const char kDisableDirectWriteForUI[]; +GFX_SWITCHES_EXPORT extern const char kDisableDirectWriteForUI[]; #endif #if defined(OS_MACOSX) -GFX_EXPORT extern const char kEnableHarfBuzzRenderText[]; +GFX_SWITCHES_EXPORT extern const char kEnableHarfBuzzRenderText[]; #endif -GFX_EXPORT extern const char kHeadless[]; - -GFX_EXPORT extern const char kEnableColorCorrectRendering[]; - -GFX_EXPORT extern const char kForceColorProfile[]; +GFX_SWITCHES_EXPORT extern const char kHeadless[]; } // namespace switches
diff --git a/ui/gfx/switches_export.h b/ui/gfx/switches_export.h new file mode 100644 index 0000000..34418ae --- /dev/null +++ b/ui/gfx/switches_export.h
@@ -0,0 +1,29 @@ +// 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 UI_GFX_SWITCHES_EXPORT_H_ +#define UI_GFX_SWITCHES_EXPORT_H_ + +#if defined(COMPONENT_BUILD) +#if defined(WIN32) + +#if defined(GFX_SWITCHES_IMPLEMENTATION) +#define GFX_SWITCHES_EXPORT __declspec(dllexport) +#else +#define GFX_SWITCHES_EXPORT __declspec(dllimport) +#endif // defined(GFX_SWITCHES_IMPLEMENTATION) + +#else // defined(WIN32) +#if defined(GFX_SWITCHES_IMPLEMENTATION) +#define GFX_SWITCHES_EXPORT __attribute__((visibility("default"))) +#else +#define GFX_SWITCHES_EXPORT +#endif +#endif + +#else // defined(COMPONENT_BUILD) +#define GFX_SWITCHES_EXPORT +#endif + +#endif // UI_GFX_SWITCHES_EXPORT_H_
diff --git a/ui/login/account_picker/md_user_pod_row.js b/ui/login/account_picker/md_user_pod_row.js index e9b7f6a..6f35669 100644 --- a/ui/login/account_picker/md_user_pod_row.js +++ b/ui/login/account_picker/md_user_pod_row.js
@@ -66,12 +66,12 @@ * @const */ var UserPodTabOrder = { - POD_INPUT: 1, // Password input field and the pod itself. + POD_INPUT: 1, // Password input field, action box menu button and + // the pod itself. PIN_KEYBOARD: 2, // Pin keyboard below the password input field. POD_CUSTOM_ICON: 3, // Pod custom icon next to password input field. HEADER_BAR: 4, // Buttons on the header bar (Shutdown, Add User). - ACTION_BOX_BUTTON: 5, // Action box menu button. - POD_MENU_ITEM: 6 // User pod menu items (User info, Remove user). + POD_MENU_ITEM: 5 // User pod menu items (User info, Remove user). }; /** @@ -127,18 +127,26 @@ {state: FINGERPRINT_STATES.FAILED, class: 'failed'} ]; + // Supported multi-profile user behavior values. + // Keep in sync with the enum in multi_profile_user_controller.h + var MULTI_PROFILE_USER_BEHAVIOR = { + UNRESTRICTED: 0, + PRIMARY_ONLY: 1, + NOT_ALLOWED: 2, + OWNER_PRIMARY_ONLY: 3 + }; + // Focus and tab order are organized as follows: // // (1) all user pods have tab index 1 so they are traversed first; - // (2) when a user pod is activated, its tab index is set to -1 and its - // main input field gets focus and tab index 1; - // (3) if pin keyboard is present, it has tab index 2 so it follows the input; + // (2) when a user pod is activated, its tab index is set to -1, then its + // main input field and action box menu button get focus; + // (3) if pin keyboard is present, it has tab index 2 so it follows the + // action box menu button; // (4) if user pod custom icon is interactive, it has tab index 3; // (5) buttons on the header bar have tab index 4; - // (6) Action box buttons have tab index 5 and follow the buttons on the - // header bar; - // (7) User pod menu items (if present) have tab index 6; - // (8) lastly, focus jumps to the Status Area and back to user pods. + // (6) User pod menu items (if present) have tab index 5; + // (7) lastly, focus jumps to the Status Area and back to user pods. // // 'Focus' event is handled by a capture handler for the whole document // and in some cases 'mousedown' event handlers are used instead of 'click' @@ -754,7 +762,7 @@ /** @override */ decorate: function() { this.tabIndex = UserPodTabOrder.POD_INPUT; - this.actionBoxAreaElement.tabIndex = UserPodTabOrder.ACTION_BOX_BUTTON; + this.actionBoxAreaElement.tabIndex = UserPodTabOrder.POD_INPUT; this.addEventListener('keydown', this.handlePodKeyDown_.bind(this)); this.addEventListener('click', this.handleClickOnPod_.bind(this)); @@ -1269,12 +1277,15 @@ this.classList.add('multiprofiles-policy-applied'); this.setUserPodIconType('policy'); - if (this.user.multiProfilesPolicy == 'primary-only') + if (this.user.multiProfilesPolicy == + MULTI_PROFILE_USER_BEHAVIOR.PRIMARY_ONLY) { this.querySelector('.mp-policy-primary-only-msg').hidden = false; - else if (this.user.multiProfilesPolicy == 'owner-primary-only') + } else if (this.user.multiProfilesPolicy == + MULTI_PROFILE_USER_BEHAVIOR.OWNER_PRIMARY_ONLY) { this.querySelector('.mp-owner-primary-only-msg').hidden = false; - else + } else { this.querySelector('.mp-policy-not-allowed-msg').hidden = false; + } } else if (this.user_.isApp) { this.setUserPodIconType('app'); }
diff --git a/ui/login/account_picker/md_user_pod_template.html b/ui/login/account_picker/md_user_pod_template.html index 11a2bd6..90348ae 100644 --- a/ui/login/account_picker/md_user_pod_template.html +++ b/ui/login/account_picker/md_user_pod_template.html
@@ -52,6 +52,52 @@ </div> </if> <div class="main-pane"> + <div class="auth-container"> + <!-- Password Authentication --> + <div class="custom-icon-container" hidden></div> +<if expr="chromeos"> + <div class="fingerprint-icon-container" hidden + aria-label="$i18n{fingerprintIconMessage}"> + <div class="custom-icon fingerprint-icon-image"></div> + </div> +</if> + <div class="password-entry-container"> + <div class="password-container"> + <input type="password" class="password" + placeholder="$i18n{passwordHint}"> + </div> +<if expr="chromeos"> + <div class="capslock-hint-container"> + <iron-icon class="capslock-hint" icon="user-pod:caps-lock"> + </iron-icon> + </div> + <paper-icon-button class="submit-button" disabled + aria-label="$i18n{submitButtonAccessibleName}" + icon="user-pod:arrow-forward" tabindex="-1"> + </paper-icon-button> +</if> + </div> + <!-- User Click Authentication --> + <div class="password-label"></div> + <div class="signin-transition-container"> + <span class="signing-in-label">$i18n{signingIn}</span> + <span class="animated-ellipsis-component0">.</span> + <span class="animated-ellipsis-component1">.</span> + <span class="animated-ellipsis-component2">.</span> + </div> + <div class="reauth-hint-container"> + <span class="reauth-warning"></span> + <span class="reauth-name-hint"></span> + </div> + <div class="launch-app-button-container" hidden> + <button class="launch-app-button">$i18n{launchAppButton}</button> + </div> + <div class="input-line"> + <svg> + <line x1="0" y1="0" x2="204" y2="0"> + </svg> + </div> + </div> <div class="name-container"> <div class="name"></div> <div class="action-box-area"> @@ -117,52 +163,6 @@ </div> </div> </div> - <div class="auth-container"> - <!-- Password Authentication --> - <div class="custom-icon-container" hidden></div> -<if expr="chromeos"> - <div class="fingerprint-icon-container" hidden - aria-label="$i18n{fingerprintIconMessage}"> - <div class="custom-icon fingerprint-icon-image"></div> - </div> -</if> - <div class="password-entry-container"> - <div class="password-container"> - <input type="password" class="password" - placeholder="$i18n{passwordHint}"> - </div> -<if expr="chromeos"> - <div class="capslock-hint-container"> - <iron-icon class="capslock-hint" icon="user-pod:caps-lock"> - </iron-icon> - </div> - <paper-icon-button class="submit-button" disabled - aria-label="$i18n{submitButtonAccessibleName}" - icon="user-pod:arrow-forward" tabindex="-1"> - </paper-icon-button> -</if> - </div> - <!-- User Click Authentication --> - <div class="password-label"></div> - <div class="signin-transition-container"> - <span class="signing-in-label">$i18n{signingIn}</span> - <span class="animated-ellipsis-component0">.</span> - <span class="animated-ellipsis-component1">.</span> - <span class="animated-ellipsis-component2">.</span> - </div> - <div class="reauth-hint-container"> - <span class="reauth-warning"></span> - <span class="reauth-name-hint"></span> - </div> - <div class="launch-app-button-container" hidden> - <button class="launch-app-button">$i18n{launchAppButton}</button> - </div> - <div class="input-line"> - <svg> - <line x1="0" y1="0" x2="204" y2="0"> - </svg> - </div> - </div> <div class="public-account-info-container"> <iron-icon class="learn-more" icon="user-pod:public-session-icon"> </iron-icon>
diff --git a/ui/login/account_picker/user_pod_row.js b/ui/login/account_picker/user_pod_row.js index ec915dc..7969075 100644 --- a/ui/login/account_picker/user_pod_row.js +++ b/ui/login/account_picker/user_pod_row.js
@@ -150,6 +150,15 @@ {state: FINGERPRINT_STATES.FAILED, class: 'failed'} ]; + // Supported multi-profile user behavior values. + // Keep in sync with the enum in multi_profile_user_controller.h + var MULTI_PROFILE_USER_BEHAVIOR = { + UNRESTRICTED: 0, + PRIMARY_ONLY: 1, + NOT_ALLOWED: 2, + OWNER_PRIMARY_ONLY: 3 + }; + // Focus and tab order are organized as follows: // // (1) all user pods have tab index 1 so they are traversed first; @@ -1210,12 +1219,15 @@ this.classList.add('multiprofiles-policy-applied'); this.setUserPodIconType('policy'); - if (this.user.multiProfilesPolicy == 'primary-only') + if (this.user.multiProfilesPolicy == + MULTI_PROFILE_USER_BEHAVIOR.PRIMARY_ONLY) { this.querySelector('.mp-policy-primary-only-msg').hidden = false; - else if (this.user.multiProfilesPolicy == 'owner-primary-only') + } else if (this.user.multiProfilesPolicy == + MULTI_PROFILE_USER_BEHAVIOR.OWNER_PRIMARY_ONLY) { this.querySelector('.mp-owner-primary-only-msg').hidden = false; - else + } else { this.querySelector('.mp-policy-not-allowed-msg').hidden = false; + } } else if (this.user_.isApp) { this.setUserPodIconType('app'); }
diff --git a/ui/views/border_unittest.cc b/ui/views/border_unittest.cc index ebaab0a3..92e54a1 100644 --- a/ui/views/border_unittest.cc +++ b/ui/views/border_unittest.cc
@@ -175,7 +175,7 @@ sk_sp<cc::PaintRecord> record = recorder_->finishRecordingAsPicture(); std::unique_ptr<MockCanvas> mock( new MockCanvas(kCanvasWidth, kCanvasHeight)); - record->playback(mock.get()); + record->Playback(mock.get()); return mock; }