diff --git a/DEPS b/DEPS index a64f0839..ce63a9f 100644 --- a/DEPS +++ b/DEPS
@@ -138,11 +138,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': 'c3252a04b377ee1aef62d67a893a0b5628481616', + 'skia_revision': '08a8496135c5d3570e7d86f9fb902bd45f6e997f', # 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': '84cadff444fc7279a72a47c15a9c1774a8fd876b', + 'v8_revision': '8588d1575543e17087081281e2b29c7b001db294', # 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. @@ -150,11 +150,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '9520a2464c6556901313dbd4bf85c1c52468fe3a', + 'angle_revision': '12f38c49d0ba6bec94808f072a3e29e0df85f081', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '8c12f564113cbd9b2e3ab0093401bcca38d4b10d', + 'swiftshader_revision': '26621d54a086fcf2775e9eed85992f22660fcef1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -273,7 +273,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '55ab6aacacb1d615e50e880697afc5771d99596c', + 'dawn_revision': 'd1b4b5cba5571e3d380372db37348ab675f479d0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -807,7 +807,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '17937cb2333ca78145b02b48cba9d02ba78de06c', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '15e76240d795225e0198b888dcd005ae6aab726e', 'condition': 'checkout_linux', }, @@ -1187,7 +1187,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '765b75c294d21bb26ae55f0fe772cc93044a90fb', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '74222959994106084c1d1f69566e631aab30806f', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1251,7 +1251,7 @@ }, 'src/third_party/re2/src': - Var('chromium_git') + '/external/github.com/google/re2.git' + '@' + 'a98fad02c421896bc75d97f49ccd245cdce7dd55', + Var('chromium_git') + '/external/github.com/google/re2.git' + '@' + '848dfb7e1d7ba641d598cb66f81590f3999a555a', 'src/third_party/r8': { 'packages': [ @@ -1355,7 +1355,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '6f0b34abee8dba611c253738d955c59f703c147a', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '9e25f74faab6b9f7e9f358e8531fc260e13bfa3b', + Var('webrtc_git') + '/src.git' + '@' + '856ca198e21cab0b39933658f095762e0e5e1660', 'src/third_party/xdg-utils': { 'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d', @@ -1396,7 +1396,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@152de7c37fc5a5999fb5b6cb59c63df410dd5817', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@f8393e0eb8714b07fa7f7a1c55fb6ff6952f86d6', 'condition': 'checkout_src_internal', },
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 3cbc9cd..faf0ea4 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -525,8 +525,6 @@ "shelf/back_button.h", "shelf/default_shelf_view.cc", "shelf/default_shelf_view.h", - "shelf/home_button_delegate.cc", - "shelf/home_button_delegate.h", "shelf/ink_drop_button_listener.h", "shelf/kiosk_next_shelf_view.cc", "shelf/kiosk_next_shelf_view.h", @@ -936,6 +934,8 @@ "system/unified/collapse_button.h", "system/unified/current_locale_view.cc", "system/unified/current_locale_view.h", + "system/unified/custom_shape_button.cc", + "system/unified/custom_shape_button.h", "system/unified/detailed_view_controller.h", "system/unified/feature_pod_button.cc", "system/unified/feature_pod_button.h",
diff --git a/ash/DEPS b/ash/DEPS index 0df7aaf..4584fdf 100644 --- a/ash/DEPS +++ b/ash/DEPS
@@ -83,10 +83,6 @@ # InputMethodManager lives in the browser process. Use ImeController. "-ui/base/ime/chromeos/input_method_manager.h" - - # SessionManager/UserManager is not part of ash. Use SessionController. - "-components/session_manager/core", - "-components/user_manager/user_manager.h", ] specific_include_rules = {
diff --git a/ash/accelerators/accelerator_controller_impl.cc b/ash/accelerators/accelerator_controller_impl.cc index c816a9c..55864b83 100644 --- a/ash/accelerators/accelerator_controller_impl.cc +++ b/ash/accelerators/accelerator_controller_impl.cc
@@ -22,6 +22,7 @@ #include "ash/display/display_move_window_util.h" #include "ash/display/screen_orientation_controller.h" #include "ash/focus_cycler.h" +#include "ash/home_screen/home_screen_controller.h" #include "ash/ime/ime_controller.h" #include "ash/ime/ime_switch_type.h" #include "ash/keyboard/ui/keyboard_controller.h" @@ -42,7 +43,7 @@ #include "ash/root_window_controller.h" #include "ash/rotator/window_rotation.h" #include "ash/session/session_controller_impl.h" -#include "ash/shelf/home_button_delegate.h" +#include "ash/shelf/app_list_button.h" #include "ash/shelf/shelf.h" #include "ash/shelf/shelf_widget.h" #include "ash/shell.h" @@ -544,11 +545,10 @@ if (accelerator.key_code() == ui::VKEY_LWIN) base::RecordAction(UserMetricsAction("Accel_Search_LWin")); - HomeButtonDelegate::PerformHomeButtonAction( - display::Screen::GetScreen() - ->GetDisplayNearestWindow(Shell::GetRootWindowForNewWindows()) - .id(), - show_source, accelerator.time_stamp()); + Shelf::ForWindow(Shell::GetRootWindowForNewWindows()) + ->shelf_widget() + ->GetAppListButton() + ->OnPressed(show_source, accelerator.time_stamp()); } void HandleToggleFullscreen(const ui::Accelerator& accelerator) {
diff --git a/ash/app_list/app_list_presenter_delegate_unittest.cc b/ash/app_list/app_list_presenter_delegate_unittest.cc index a5359c30..370d05ba 100644 --- a/ash/app_list/app_list_presenter_delegate_unittest.cc +++ b/ash/app_list/app_list_presenter_delegate_unittest.cc
@@ -1388,13 +1388,9 @@ } void PressAppListButton() { - std::unique_ptr<ui::Event> event = std::make_unique<ui::MouseEvent>( - ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), base::TimeTicks(), - ui::EF_NONE, 0); - ShelfModel::Get() - ->GetShelfItemDelegate(ShelfID(kAppListId)) - ->ItemSelected(std::move(event), GetPrimaryDisplayId(), - LAUNCH_FROM_UNKNOWN, base::DoNothing()); + Shell::Get()->app_list_controller()->OnAppListButtonPressed( + GetPrimaryDisplayId(), app_list::AppListShowSource::kShelfButton, + base::TimeTicks()); GetAppListTestHelper()->WaitUntilIdle(); }
diff --git a/ash/assistant/ui/assistant_container_view_unittest.cc b/ash/assistant/ui/assistant_container_view_unittest.cc index e096c463..ed7c5173 100644 --- a/ash/assistant/ui/assistant_container_view_unittest.cc +++ b/ash/assistant/ui/assistant_container_view_unittest.cc
@@ -30,11 +30,6 @@ ~AssistantContainerViewTest() override = default; void SetUp() override { - // Enable Assistant feature. - scoped_feature_list_.InitAndEnableFeature( - chromeos::switches::kAssistantFeature); - ASSERT_TRUE(chromeos::switches::IsAssistantEnabled()); - AshTestBase::SetUp(); // Enable Assistant in settings. @@ -48,8 +43,6 @@ ui_controller_ = controller_->ui_controller(); DCHECK(ui_controller_); - SetUpMocks(); - // After mocks are set up our Assistant service is ready for use. Indicate // this by changing status from NOT_READY to STOPPED. VoiceInteractionController::Get()->NotifyStatusChanged( @@ -59,29 +52,6 @@ AssistantUiController* ui_controller() { return ui_controller_; } private: - void SetUpMocks() { - // Mock the Assistant service. - assistant_ = std::make_unique<chromeos::assistant::MockAssistant>(); - assistant_binding_ = - std::make_unique<mojo::Binding<chromeos::assistant::mojom::Assistant>>( - assistant_.get()); - chromeos::assistant::mojom::AssistantPtr assistant; - assistant_binding_->Bind(mojo::MakeRequest(&assistant)); - controller_->SetAssistant(std::move(assistant)); - - // Mock any screen context cache requests by immediately invoking callback. - ON_CALL(*assistant_, DoCacheScreenContext(testing::_)) - .WillByDefault(testing::Invoke( - [](base::OnceClosure* callback) { std::move(*callback).Run(); })); - } - - base::test::ScopedFeatureList scoped_feature_list_; - - std::unique_ptr<chromeos::assistant::MockAssistant> assistant_; - - std::unique_ptr<mojo::Binding<chromeos::assistant::mojom::Assistant>> - assistant_binding_; - AssistantController* controller_ = nullptr; AssistantUiController* ui_controller_ = nullptr;
diff --git a/ash/kiosk_next/kiosk_next_shell_controller_impl.cc b/ash/kiosk_next/kiosk_next_shell_controller_impl.cc index 51ca121..0b101713 100644 --- a/ash/kiosk_next/kiosk_next_shell_controller_impl.cc +++ b/ash/kiosk_next/kiosk_next_shell_controller_impl.cc
@@ -14,7 +14,6 @@ #include "ash/public/cpp/ash_pref_names.h" #include "ash/public/cpp/shelf_model.h" #include "ash/session/session_controller_impl.h" -#include "ash/shelf/home_button_delegate.h" #include "ash/shell.h" #include "ash/strings/grit/ash_strings.h" #include "base/metrics/histogram_macros.h" @@ -31,10 +30,6 @@ std::unique_ptr<ShelfModel> CreateKioskNextShelfModel() { auto shelf_model = std::make_unique<ShelfModel>(); - shelf_model->SetShelfItemDelegate(ShelfID(kBackButtonId), nullptr); - shelf_model->SetShelfItemDelegate(ShelfID(kAppListId), - std::make_unique<HomeButtonDelegate>()); - DCHECK_EQ(0, shelf_model->ItemIndexByID(ShelfID(kBackButtonId))); DCHECK_EQ(1, shelf_model->ItemIndexByID(ShelfID(kAppListId)));
diff --git a/ash/login/ui/login_auth_user_view.cc b/ash/login/ui/login_auth_user_view.cc index 26af517e..9953ed7 100644 --- a/ash/login/ui/login_auth_user_view.cc +++ b/ash/login/ui/login_auth_user_view.cc
@@ -706,7 +706,7 @@ // Use views::GridLayout instead of views::BoxLayout because views::BoxLayout // lays out children according to the view->children order. views::GridLayout* grid_layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* column_set = grid_layout->AddColumnSet(0); column_set->AddColumn(views::GridLayout::CENTER, views::GridLayout::LEADING, 0 /*resize_percent*/, views::GridLayout::USE_PREF,
diff --git a/ash/login/ui/login_user_view.cc b/ash/login/ui/login_user_view.cc index e789803..7f65871 100644 --- a/ash/login/ui/login_user_view.cc +++ b/ash/login/ui/login_user_view.cc
@@ -651,7 +651,7 @@ // Use views::GridLayout instead of views::BoxLayout because views::BoxLayout // lays out children according to the view->children order. views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); constexpr int kImageColumnId = 0; constexpr int kLabelDropdownColumnId = 1;
diff --git a/ash/public/cpp/android_intent_helper.cc b/ash/public/cpp/android_intent_helper.cc index 416fd0cb..e5dc099 100644 --- a/ash/public/cpp/android_intent_helper.cc +++ b/ash/public/cpp/android_intent_helper.cc
@@ -22,7 +22,7 @@ AndroidIntentHelper::~AndroidIntentHelper() { DCHECK_EQ(g_android_intent_helper, this); - g_android_intent_helper = this; + g_android_intent_helper = nullptr; } } // namespace ash
diff --git a/ash/resources/vector_icons/switch_access.icon b/ash/resources/vector_icons/switch_access.icon index a53851a..f6c3d48 100644 --- a/ash/resources/vector_icons/switch_access.icon +++ b/ash/resources/vector_icons/switch_access.icon
@@ -2,61 +2,37 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -CANVAS_DIMENSIONS, 24, -MOVE_TO, 3, 13, -R_H_LINE_TO, 2, -R_V_LINE_TO, -2, -H_LINE_TO, 3, +CANVAS_DIMENSIONS, 20, +R_MOVE_TO, 18, 9, R_V_LINE_TO, 2, +R_H_LINE_TO, -1.17f, +R_CUBIC_TO, -0.41f, 1.17f, -1.52f, 2, -2.83f, 2, +R_CUBIC_TO, -1.66f, 0, -3, -1.34f, -3, -3, +R_CUBIC_TO, 0, -1.66f, 1.34f, -3, 3, -3, +R_CUBIC_TO, 1.31f, 0, 2.42f, 0.83f, 2.83f, 2, +CLOSE, +R_MOVE_TO, -12, -2, +R_CUBIC_TO, 0.46f, 0, 0.9f, 0.1f, 1.29f, 0.29f, +R_LINE_TO, 2.71f, -2.71f, +R_LINE_TO, 1.41f, 1.41f, +R_LINE_TO, -2.71f, 2.71f, +R_CUBIC_TO, 0.19f, 0.39f, 0.29f, 0.83f, 0.29f, 1.29f, +R_CUBIC_TO, 0, 1.66f, -1.34f, 3, -3, 3, +R_CUBIC_TO, -1.31f, 0, -2.42f, -0.83f, -2.83f, -2, +R_H_LINE_TO, -1.17f, +R_V_LINE_TO, -2, +R_H_LINE_TO, 1.17f, +R_CUBIC_TO, 0.41f, -1.17f, 1.52f, -2, 2.83f, -2, CLOSE, R_MOVE_TO, 0, 4, -R_H_LINE_TO, 2, -R_V_LINE_TO, -2, -H_LINE_TO, 3, -R_V_LINE_TO, 2, +R_CUBIC_TO, 0.55f, 0, 1, -0.45f, 1, -1, +R_CUBIC_TO, 0, -0.55f, -0.45f, -1, -1, -1, +R_CUBIC_TO, -0.55f, 0, -1, 0.45f, -1, 1, +R_CUBIC_TO, 0, 0.55f, 0.45f, 1, 1, 1, CLOSE, -R_MOVE_TO, 2, 4, -R_V_LINE_TO, -2, -H_LINE_TO, 3, -R_CUBIC_TO, 0, 1.1f, 0.89f, 2, 2, 2, -CLOSE, -MOVE_TO, 3, 9, -R_H_LINE_TO, 2, -V_LINE_TO, 7, -H_LINE_TO, 3, -R_V_LINE_TO, 2, -CLOSE, -R_MOVE_TO, 12, 12, -R_H_LINE_TO, 2, -R_V_LINE_TO, -2, -R_H_LINE_TO, -2, -R_V_LINE_TO, 2, -CLOSE, -R_MOVE_TO, 4, -18, -H_LINE_TO, 9, -R_CUBIC_TO, -1.11f, 0, -2, 0.9f, -2, 2, -R_V_LINE_TO, 10, -R_CUBIC_TO, 0, 1.1f, 0.89f, 2, 2, 2, -R_H_LINE_TO, 10, -R_CUBIC_TO, 1.1f, 0, 2, -0.9f, 2, -2, -V_LINE_TO, 5, -R_CUBIC_TO, 0, -1.1f, -0.9f, -2, -2, -2, -CLOSE, -R_MOVE_TO, 0, 12, -H_LINE_TO, 9, -V_LINE_TO, 5, -R_H_LINE_TO, 10, -R_V_LINE_TO, 10, -CLOSE, -R_MOVE_TO, -8, 6, -R_H_LINE_TO, 2, -R_V_LINE_TO, -2, -R_H_LINE_TO, -2, -R_V_LINE_TO, 2, -CLOSE, -R_MOVE_TO, -4, 0, -R_H_LINE_TO, 2, -R_V_LINE_TO, -2, -H_LINE_TO, 7, -R_V_LINE_TO, 2, +R_MOVE_TO, 8, 0, +R_CUBIC_TO, 0.55f, 0, 1, -0.45f, 1, -1, +R_CUBIC_TO, 0, -0.55f, -0.45f, -1, -1, -1, +R_CUBIC_TO, -0.55f, 0, -1, 0.45f, -1, 1, +R_CUBIC_TO, 0, 0.55f, 0.45f, 1, 1, 1, CLOSE
diff --git a/ash/shelf/app_list_button.cc b/ash/shelf/app_list_button.cc index 22b2192..4a975a8 100644 --- a/ash/shelf/app_list_button.cc +++ b/ash/shelf/app_list_button.cc
@@ -6,9 +6,13 @@ #include <math.h> // std::ceil +#include "ash/app_list/app_list_controller_impl.h" +#include "ash/kiosk_next/kiosk_next_shell_controller_impl.h" #include "ash/public/cpp/shelf_types.h" #include "ash/shelf/shelf.h" #include "ash/shelf/shelf_constants.h" +#include "ash/shelf/shelf_view.h" +#include "ash/shell.h" #include "base/logging.h" #include "chromeos/strings/grit/chromeos_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -59,6 +63,17 @@ return controller_.is_showing_app_list(); } +void AppListButton::OnPressed(app_list::AppListShowSource show_source, + base::TimeTicks time_stamp) { + ShelfAction shelf_action = + Shell::Get()->app_list_controller()->OnAppListButtonPressed( + shelf_view()->GetDisplayId(), show_source, time_stamp); + if (shelf_action == SHELF_ACTION_APP_LIST_DISMISSED) { + GetInkDrop()->SnapToActivated(); + GetInkDrop()->AnimateToState(views::InkDropState::HIDDEN); + } +} + void AppListButton::PaintButtonContents(gfx::Canvas* canvas) { gfx::PointF circle_center(GetCenterPoint());
diff --git a/ash/shelf/app_list_button.h b/ash/shelf/app_list_button.h index 37bed766..3606dd8 100644 --- a/ash/shelf/app_list_button.h +++ b/ash/shelf/app_list_button.h
@@ -7,6 +7,7 @@ #include <memory> +#include "ash/app_list/app_list_metrics.h" #include "ash/ash_export.h" #include "ash/shelf/app_list_button_controller.h" #include "ash/shelf/shelf_control_button.h" @@ -44,6 +45,9 @@ // True if the app list is shown for the display containing this button. bool IsShowingAppList() const; + virtual void OnPressed(app_list::AppListShowSource show_source, + base::TimeTicks time_stamp); + protected: // views::Button: void PaintButtonContents(gfx::Canvas* canvas) override;
diff --git a/ash/shelf/app_list_button_unittest.cc b/ash/shelf/app_list_button_unittest.cc index 5939d49..7f347da3 100644 --- a/ash/shelf/app_list_button_unittest.cc +++ b/ash/shelf/app_list_button_unittest.cc
@@ -162,30 +162,7 @@ EXPECT_EQ(ShelfConstants::button_spacing(), app_list_button()->bounds().x()); } -class VoiceInteractionAppListButtonTest : public AppListButtonTest { - public: - VoiceInteractionAppListButtonTest() { - feature_list_.InitAndEnableFeature(chromeos::switches::kAssistantFeature); - } - - // AppListButtonTest: - void SetUp() override { - AppListButtonTest::SetUp(); - - Shell::Get()->assistant_controller()->SetAssistant( - assistant_.CreateInterfacePtrAndBind()); - } - - private: - std::unique_ptr<base::test::ScopedCommandLine> command_line_; - base::test::ScopedFeatureList feature_list_; - TestAssistantService assistant_; - - DISALLOW_COPY_AND_ASSIGN(VoiceInteractionAppListButtonTest); -}; - -TEST_F(VoiceInteractionAppListButtonTest, - LongPressGestureWithVoiceInteractionFlag) { +TEST_F(AppListButtonTest, LongPressGesture) { ui::ScopedAnimationDurationScaleMode animation_duration_mode( ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION); // Simulate two user with primary user as active. @@ -220,7 +197,7 @@ ->visibility()); } -TEST_F(VoiceInteractionAppListButtonTest, LongPressGestureWithSecondaryUser) { +TEST_F(AppListButtonTest, LongPressGestureWithSecondaryUser) { // Disallowed by secondary user. VoiceInteractionController::Get()->NotifyFeatureAllowed( mojom::AssistantAllowedState::DISALLOWED_BY_NONPRIMARY_USER); @@ -247,8 +224,7 @@ ->visibility()); } -TEST_F(VoiceInteractionAppListButtonTest, - LongPressGestureWithSettingsDisabled) { +TEST_F(AppListButtonTest, LongPressGestureWithSettingsDisabled) { // Simulate two user with primary user as active. CreateUserSessions(2);
diff --git a/ash/shelf/default_shelf_view.cc b/ash/shelf/default_shelf_view.cc index 710a96f0..206905c6 100644 --- a/ash/shelf/default_shelf_view.cc +++ b/ash/shelf/default_shelf_view.cc
@@ -84,6 +84,30 @@ DefaultShelfView::~DefaultShelfView() = default; +void DefaultShelfView::CalculateBackAndHomeButtonsIdealBounds() { + if (is_overflow_mode()) + return; + + const int button_spacing = ShelfConstants::button_spacing(); + int x = shelf()->PrimaryAxisValue(button_spacing, 0); + int y = shelf()->PrimaryAxisValue(0, button_spacing); + + GetBackButton()->set_ideal_bounds(gfx::Rect( + x, y, shelf()->PrimaryAxisValue(kShelfControlSize, kShelfButtonSize), + shelf()->PrimaryAxisValue(kShelfButtonSize, kShelfControlSize))); + + // If we are not in tablet mode, the home button will get placed on top of + // the (invisible) back button. + if (IsTabletModeEnabled()) { + x = shelf()->PrimaryAxisValue(x + kShelfControlSize + button_spacing, x); + y = shelf()->PrimaryAxisValue(y, y + kShelfControlSize + button_spacing); + } + + GetAppListButton()->set_ideal_bounds(gfx::Rect( + x, y, shelf()->PrimaryAxisValue(kShelfControlSize, kShelfButtonSize), + shelf()->PrimaryAxisValue(kShelfButtonSize, kShelfControlSize))); +} + void DefaultShelfView::Init() { // Add the background view behind the app list and back buttons first, so // that other views will appear above it. @@ -126,79 +150,72 @@ separator_->SetVisible(separator_index != -1 && separator_index < last_visible_index() && !virtual_keyboard_visible); - int app_list_button_position; - int x = shelf()->PrimaryAxisValue(button_spacing, 0); - int y = shelf()->PrimaryAxisValue(0, button_spacing); + int x = 0; + int y = 0; + if (!is_overflow_mode()) { + // Calculate the bounds for the back and home buttons separately. + CalculateBackAndHomeButtonsIdealBounds(); - for (int i = 0; i < view_model()->view_size(); ++i) { - // "Primary" as in "same direction as the shelf's direction". The - // "secondary" (orthogonal) size is always the full shelf to maximize click - // targets even for control buttons. - const int size_primary = - (i <= kAppListButtonIndex) ? kShelfControlSize : kShelfButtonSize; - const int size_secondary = kShelfButtonSize; + int app_list_button_position = + shelf()->PrimaryAxisValue(GetAppListButton()->ideal_bounds().right(), + GetAppListButton()->ideal_bounds().bottom()); + x = shelf()->PrimaryAxisValue(app_list_button_position, 0); + y = shelf()->PrimaryAxisValue(0, app_list_button_position); + + // A larger minimum padding after the app list button is required: + // increment with the necessary extra amount. + x += shelf()->PrimaryAxisValue(kAppIconGroupMargin - button_spacing, 0); + y += shelf()->PrimaryAxisValue(0, kAppIconGroupMargin - button_spacing); + + // Now add the necessary padding to center app icons. + StatusAreaWidget* status_widget = shelf_widget()->status_area_widget(); + const int status_widget_size = + status_widget ? shelf()->PrimaryAxisValue( + status_widget->GetWindowBoundsInScreen().width(), + status_widget->GetWindowBoundsInScreen().height()) + : 0; + const int screen_size = available_size + status_widget_size; + + const int available_size_for_app_icons = GetAvailableSpaceForAppIcons(); + const int icons_size = GetSizeOfAppIcons(number_of_visible_apps(), + app_centering_strategy.overflow); + int padding_for_centering = 0; + + if (app_centering_strategy.center_on_screen) { + padding_for_centering = (screen_size - icons_size) / 2; + } else { + padding_for_centering = + kShelfButtonSpacing + + (IsTabletModeEnabled() ? 2 : 1) * kShelfControlSize + + kAppIconGroupMargin + (available_size_for_app_icons - icons_size) / 2; + } + + if (padding_for_centering > + app_list_button_position + kAppIconGroupMargin) { + // Only shift buttons to the right, never let them interfere with the + // left-aligned system buttons. + x = shelf()->PrimaryAxisValue(padding_for_centering, 0); + y = shelf()->PrimaryAxisValue(0, padding_for_centering); + } + } + + // We've already processed the back and home buttons. + for (int i = kAppListButtonIndex + 1; i < view_model()->view_size(); ++i) { if (is_overflow_mode() && i < first_visible_index()) { view_model()->set_ideal_bounds(i, gfx::Rect(x, y, 0, 0)); continue; } - if (i == kAppListButtonIndex + 1) { - // Start centering after we've laid out the app list button. - - StatusAreaWidget* status_widget = shelf_widget()->status_area_widget(); - const int status_widget_size = - status_widget ? shelf()->PrimaryAxisValue( - status_widget->GetWindowBoundsInScreen().width(), - status_widget->GetWindowBoundsInScreen().height()) - : 0; - const int screen_size = available_size + status_widget_size; - - const int available_size_for_app_icons = GetAvailableSpaceForAppIcons(); - const int icons_size = GetSizeOfAppIcons(number_of_visible_apps(), - app_centering_strategy.overflow); - int padding_for_centering = 0; - - if (app_centering_strategy.center_on_screen) { - padding_for_centering = (screen_size - icons_size) / 2; - } else { - padding_for_centering = - kShelfButtonSpacing + - (IsTabletModeEnabled() ? 2 : 1) * kShelfControlSize + - kAppIconGroupMargin + - (available_size_for_app_icons - icons_size) / 2; - } - - if (padding_for_centering > - app_list_button_position + kAppIconGroupMargin) { - // Only shift buttons to the right, never let them interfere with the - // left-aligned system buttons. - x = shelf()->PrimaryAxisValue(padding_for_centering, 0); - y = shelf()->PrimaryAxisValue(0, padding_for_centering); - } - } view_model()->set_ideal_bounds( i, - gfx::Rect(x, y, shelf()->PrimaryAxisValue(size_primary, size_secondary), - shelf()->PrimaryAxisValue(size_secondary, size_primary))); + gfx::Rect( + x, y, shelf()->PrimaryAxisValue(kShelfButtonSize, kShelfButtonSize), + shelf()->PrimaryAxisValue(kShelfButtonSize, kShelfButtonSize))); - // If not in tablet mode do not increase |x| or |y|. Instead just let the - // next item (app list button) cover the back button, which will have - // opacity 0 anyways. - if (i == kBackButtonIndex && !IsTabletModeEnabled()) - continue; - - x = shelf()->PrimaryAxisValue(x + size_primary + button_spacing, x); - y = shelf()->PrimaryAxisValue(y, y + size_primary + button_spacing); - - if (i == kAppListButtonIndex) { - app_list_button_position = shelf()->PrimaryAxisValue(x, y); - // A larger minimum padding after the app list button is required: - // increment with the necessary extra amount. - x += shelf()->PrimaryAxisValue(kAppIconGroupMargin - button_spacing, 0); - y += shelf()->PrimaryAxisValue(0, kAppIconGroupMargin - button_spacing); - } + x = shelf()->PrimaryAxisValue(x + kShelfButtonSize + button_spacing, x); + y = shelf()->PrimaryAxisValue(y, y + kShelfButtonSize + button_spacing); if (i == separator_index) { // Place the separator halfway between the two icons it separates,
diff --git a/ash/shelf/default_shelf_view.h b/ash/shelf/default_shelf_view.h index bd6881e5..163541f7 100644 --- a/ash/shelf/default_shelf_view.h +++ b/ash/shelf/default_shelf_view.h
@@ -30,6 +30,8 @@ DefaultShelfView(ShelfModel* model, Shelf* shelf, ShelfWidget* shelf_widget); ~DefaultShelfView() override; + void CalculateBackAndHomeButtonsIdealBounds(); + // All ShelfView overrides are public to keep them together. // ShelfView: void Init() override;
diff --git a/ash/shelf/home_button_delegate.cc b/ash/shelf/home_button_delegate.cc deleted file mode 100644 index f65b4199..0000000 --- a/ash/shelf/home_button_delegate.cc +++ /dev/null
@@ -1,61 +0,0 @@ -// Copyright 2019 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/shelf/home_button_delegate.h" - -#include <utility> - -#include "ash/app_list/app_list_controller_impl.h" -#include "ash/home_screen/home_screen_controller.h" -#include "ash/kiosk_next/kiosk_next_shell_controller_impl.h" -#include "ash/public/cpp/shelf_model.h" -#include "ash/shell.h" -#include "base/logging.h" - -namespace ash { - -HomeButtonDelegate::HomeButtonDelegate() - : ShelfItemDelegate(ShelfID(kAppListId)) {} - -HomeButtonDelegate::~HomeButtonDelegate() = default; - -// static -ShelfAction HomeButtonDelegate::PerformHomeButtonAction( - int64_t display_id, - app_list::AppListShowSource show_source, - base::TimeTicks event_time_stamp) { - ShelfAction shelf_action = ash::SHELF_ACTION_NONE; - if (Shell::Get()->kiosk_next_shell_controller()->IsEnabled()) { - Shell::Get()->home_screen_controller()->GoHome(display_id); - shelf_action = ash::SHELF_ACTION_APP_LIST_SHOWN; - } else { - shelf_action = Shell::Get()->app_list_controller()->OnAppListButtonPressed( - display_id, show_source, event_time_stamp); - } - return shelf_action; -} - -void HomeButtonDelegate::ItemSelected(std::unique_ptr<ui::Event> event, - int64_t display_id, - ShelfLaunchSource source, - ItemSelectedCallback callback) { - ShelfAction shelf_action = PerformHomeButtonAction( - display_id, - event->IsShiftDown() ? app_list::kShelfButtonFullscreen - : app_list::kShelfButton, - event->time_stamp()); - std::move(callback).Run(shelf_action, {}); -} - -void HomeButtonDelegate::ExecuteCommand(bool from_context_menu, - int64_t command_id, - int32_t event_flags, - int64_t display_id) { - // This delegate does not show custom context or application menu items. - NOTIMPLEMENTED(); -} - -void HomeButtonDelegate::Close() {} - -} // namespace ash
diff --git a/ash/shelf/home_button_delegate.h b/ash/shelf/home_button_delegate.h deleted file mode 100644 index a06bc7c..0000000 --- a/ash/shelf/home_button_delegate.h +++ /dev/null
@@ -1,53 +0,0 @@ -// Copyright 2019 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_SHELF_HOME_BUTTON_DELEGATE_H_ -#define ASH_SHELF_HOME_BUTTON_DELEGATE_H_ - -#include <memory> - -#include "ash/app_list/app_list_metrics.h" -#include "ash/ash_export.h" -#include "ash/public/cpp/shelf_item_delegate.h" -#include "ash/public/cpp/shelf_types.h" -#include "base/macros.h" - -namespace ash { - -// ShelfItemDelegate for the Home button, aka the app list button. -// TODO(michaelpg): Rename references to app list button to home button. -class ASH_EXPORT HomeButtonDelegate : public ShelfItemDelegate { - public: - HomeButtonDelegate(); - ~HomeButtonDelegate() override; - - // Responds to the home button being activated or the equivalent accelerator - // being pressed. - // |display_id| is the display of the button, indicating where the Home screen - // should be shown. - // |show_source| is the type of user action that triggered this. - // |event_time_stamp| is timestamp of the triggering event. - static ShelfAction PerformHomeButtonAction( - int64_t display_id, - app_list::AppListShowSource show_source, - base::TimeTicks event_time_stamp); - - // ShelfItemDelegate: - void ItemSelected(std::unique_ptr<ui::Event> event, - int64_t display_id, - ShelfLaunchSource source, - ItemSelectedCallback callback) override; - void ExecuteCommand(bool from_context_menu, - int64_t command_id, - int32_t event_flags, - int64_t display_id) override; - void Close() override; - - private: - DISALLOW_COPY_AND_ASSIGN(HomeButtonDelegate); -}; - -} // namespace ash - -#endif // ASH_SHELF_HOME_BUTTON_DELEGATE_H_
diff --git a/ash/shelf/kiosk_next_shelf_view.cc b/ash/shelf/kiosk_next_shelf_view.cc index 65f4638..59fadc1b 100644 --- a/ash/shelf/kiosk_next_shelf_view.cc +++ b/ash/shelf/kiosk_next_shelf_view.cc
@@ -7,6 +7,7 @@ #include <memory> #include "ash/display/screen_orientation_controller.h" +#include "ash/home_screen/home_screen_controller.h" #include "ash/public/cpp/shelf_model.h" #include "ash/shelf/app_list_button.h" #include "ash/shelf/back_button.h" @@ -86,6 +87,12 @@ GetInkDropBaseColor(), ink_drop_visible_opacity()); } + void OnPressed(app_list::AppListShowSource show_source, + base::TimeTicks time_stamp) override { + Shell::Get()->home_screen_controller()->GoHome( + shelf_view()->GetDisplayId()); + } + DISALLOW_COPY_AND_ASSIGN(KioskNextHomeButton); }; @@ -144,12 +151,12 @@ int x = total_shelf_width / 2 - kKioskNextShelfControlWidthDp - control_buttons_spacing / 2; int y = (kShelfSize - kKioskNextShelfControlHeightDp) / 2; - for (int i = 0; i < view_model()->view_size(); ++i) { - view_model()->set_ideal_bounds( - i, gfx::Rect(x, y, kKioskNextShelfControlWidthDp, - kKioskNextShelfControlHeightDp)); - x += (kKioskNextShelfControlWidthDp + control_buttons_spacing); - } + + GetBackButton()->set_ideal_bounds(gfx::Rect( + x, y, kKioskNextShelfControlWidthDp, kKioskNextShelfControlHeightDp)); + x += (kKioskNextShelfControlWidthDp + control_buttons_spacing); + GetAppListButton()->set_ideal_bounds(gfx::Rect( + x, y, kKioskNextShelfControlWidthDp, kKioskNextShelfControlHeightDp)); } std::unique_ptr<BackButton> KioskNextShelfView::CreateBackButton() {
diff --git a/ash/shelf/shelf_control_button.h b/ash/shelf/shelf_control_button.h index 2008b63..3dff299f 100644 --- a/ash/shelf/shelf_control_button.h +++ b/ash/shelf/shelf_control_button.h
@@ -27,6 +27,10 @@ // drops. gfx::Point GetCenterPoint() const; + const gfx::Rect& ideal_bounds() const { return ideal_bounds_; } + + void set_ideal_bounds(const gfx::Rect& bounds) { ideal_bounds_ = bounds; } + protected: // views::Button: std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override; @@ -41,6 +45,7 @@ private: Shelf* shelf_; + gfx::Rect ideal_bounds_; DISALLOW_COPY_AND_ASSIGN(ShelfControlButton); };
diff --git a/ash/shelf/shelf_controller.cc b/ash/shelf/shelf_controller.cc index 3c7ac15..130828fd 100644 --- a/ash/shelf/shelf_controller.cc +++ b/ash/shelf/shelf_controller.cc
@@ -9,7 +9,6 @@ #include "ash/public/cpp/shelf_prefs.h" #include "ash/root_window_controller.h" #include "ash/session/session_controller_impl.h" -#include "ash/shelf/home_button_delegate.h" #include "ash/shelf/shelf.h" #include "ash/shelf/shelf_constants.h" #include "ash/shelf/shelf_widget.h" @@ -116,9 +115,7 @@ back_item.title = l10n_util::GetStringUTF16(IDS_ASH_SHELF_BACK_BUTTON_TITLE); model_.Set(0, back_item); - // Set the delegate and title string for the home button. - model_.SetShelfItemDelegate(ShelfID(kAppListId), - std::make_unique<HomeButtonDelegate>()); + // Set the title string for the home button. DCHECK_EQ(1, model_.ItemIndexByID(ShelfID(kAppListId))); ShelfItem launcher_item = model_.items()[1]; launcher_item.title =
diff --git a/ash/shelf/shelf_controller_unittest.cc b/ash/shelf/shelf_controller_unittest.cc index b696ae788..7dab2aa6 100644 --- a/ash/shelf/shelf_controller_unittest.cc +++ b/ash/shelf/shelf_controller_unittest.cc
@@ -60,7 +60,6 @@ EXPECT_EQ(kBackButtonId, model->items()[0].id.app_id); EXPECT_FALSE(model->GetShelfItemDelegate(ShelfID(kBackButtonId))); EXPECT_EQ(kAppListId, model->items()[1].id.app_id); - EXPECT_TRUE(model->GetShelfItemDelegate(ShelfID(kAppListId))); } TEST_F(ShelfControllerTest, Shutdown) {
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc index d945e146..5101097a8 100644 --- a/ash/shelf/shelf_view.cc +++ b/ash/shelf/shelf_view.cc
@@ -242,7 +242,7 @@ }; // Returns the id of the display on which |view| is shown. -int64_t GetDisplayIdForView(View* view) { +int64_t GetDisplayIdForView(const View* view) { aura::Window* window = view->GetWidget()->GetNativeWindow(); return display::Screen::GetScreen()->GetDisplayNearestWindow(window).id(); } @@ -385,6 +385,11 @@ } gfx::Rect ShelfView::GetIdealBoundsOfItemIcon(const ShelfID& id) { + if (id == ShelfID(kAppListId)) + return GetMirroredRect(GetAppListButton()->ideal_bounds()); + if (id == ShelfID(kBackButtonId)) + return GetMirroredRect(GetBackButton()->ideal_bounds()); + int index = model_->ItemIndexByID(id); if (index < 0 || last_visible_index_ < 0 || index >= view_model_->view_size()) return gfx::Rect(); @@ -395,9 +400,6 @@ const gfx::Rect& ideal_bounds(view_model_->ideal_bounds(index)); views::View* view = view_model_->view_at(index); - // The app list and back button are not ShelfAppButton subclass instances. - if (view == GetAppListButton() || view == GetBackButton()) - return GetMirroredRect(ideal_bounds); CHECK_EQ(ShelfAppButton::kViewClassName, view->GetClassName()); ShelfAppButton* button = static_cast<ShelfAppButton*>(view); @@ -481,6 +483,10 @@ } base::string16 ShelfView::GetTitleForView(const views::View* view) const { + if (view == back_button_) + return back_button_->GetAccessibleName(); + if (view == home_button_) + return home_button_->GetAccessibleName(); if (view == overflow_button_) return overflow_button_->GetAccessibleName(); @@ -610,6 +616,16 @@ return; } + if (sender == GetAppListButton()) { + Shell::Get()->metrics()->RecordUserMetricsAction( + UMA_LAUNCHER_CLICK_ON_APPLIST_BUTTON); + const app_list::AppListShowSource show_source = + event.IsShiftDown() ? app_list::kShelfButtonFullscreen + : app_list::kShelfButton; + GetAppListButton()->OnPressed(show_source, event.time_stamp()); + return; + } + // None of the checks in ShouldEventActivateButton() affects overflow button. // So, it is safe to be checked after handling overflow button. if (!ShouldEventActivateButton(sender, event)) { @@ -869,6 +885,10 @@ } } +int64_t ShelfView::GetDisplayId() const { + return GetDisplayIdForView(this); +} + // static void ShelfView::ConfigureChildView(views::View* view) { view->SetPaintToLayer(); @@ -1138,6 +1158,7 @@ views::ViewModelUtils::SetViewBoundsToIdealBounds(*view_model_); UpdateBackButton(); LayoutAppListAndBackButtonHighlight(); + LayoutBackAndHomeButtons(); LayoutOverflowButton(); UpdateVisibleShelfItemBoundsUnion(); } @@ -1150,6 +1171,11 @@ OnBoundsChanged(GetBoundsInScreen()); } +void ShelfView::LayoutBackAndHomeButtons() { + back_button_->SetBoundsRect(back_button_->ideal_bounds()); + home_button_->SetBoundsRect(home_button_->ideal_bounds()); +} + void ShelfView::LayoutOverflowButton() const { DCHECK_NE(0, view_model_->view_size()); int x = 0; @@ -1179,12 +1205,21 @@ void ShelfView::AnimateToIdealBounds() { CalculateIdealBounds(); - for (int i = 0; i < view_model_->view_size(); ++i) { + + // Handle back and home separately. + ShelfControlButton* back = GetBackButton(); + bounds_animator_->AnimateViewTo(back, back->ideal_bounds()); + ShelfControlButton* home = GetAppListButton(); + bounds_animator_->AnimateViewTo(home, home->ideal_bounds()); + if (home->border()) + home->SetBorder(views::NullBorder()); + + for (int i = kAppListButtonIndex + 1; i < view_model_->view_size(); ++i) { View* view = view_model_->view_at(i); bounds_animator_->AnimateViewTo(view, view_model_->ideal_bounds(i)); // Now that the item animation starts, we have to make sure that the // padding of the first gets properly transferred to the new first item. - if (i && view->border()) + if (view->border()) view->SetBorder(views::NullBorder()); } LayoutAppListAndBackButtonHighlight();
diff --git a/ash/shelf/shelf_view.h b/ash/shelf/shelf_view.h index 4e521fd..53981c0 100644 --- a/ash/shelf/shelf_view.h +++ b/ash/shelf/shelf_view.h
@@ -285,6 +285,9 @@ void OnShelfButtonAboutToRequestFocusFromTabTraversal(ShelfButton* button, bool reverse); + // Returns the ID of the display where this view is shown. + int64_t GetDisplayId() const; + // Return the view model for test purposes. const views::ViewModel* view_model_for_test() const { return view_model_.get(); @@ -377,6 +380,7 @@ // Sets the bounds of each view to its ideal bounds. void LayoutToIdealBounds(); + void LayoutBackAndHomeButtons(); void LayoutOverflowButton() const; // Returns the index of the last view whose max primary axis coordinate is
diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc index 39ce397e..2a1b478 100644 --- a/ash/shelf/shelf_view_unittest.cc +++ b/ash/shelf/shelf_view_unittest.cc
@@ -4038,11 +4038,13 @@ ShelfConstants::shelf_size()); expected_button_area_bounds.ClampToCenteredSize(expected_button_area_size); - const gfx::Rect back_button_bounds = test_api_->GetIdealBoundsByIndex(0); + const gfx::Rect back_button_bounds = + shelf_view_->GetBackButton()->ideal_bounds(); EXPECT_FALSE(back_button_bounds.IsEmpty()); EXPECT_TRUE(expected_button_area_bounds.Contains(back_button_bounds)); - const gfx::Rect home_button_bounds = test_api_->GetIdealBoundsByIndex(1); + const gfx::Rect home_button_bounds = + shelf_view_->GetAppListButton()->ideal_bounds(); EXPECT_FALSE(home_button_bounds.IsEmpty()); EXPECT_TRUE(expected_button_area_bounds.Contains(home_button_bounds));
diff --git a/ash/shell/window_type_launcher.cc b/ash/shell/window_type_launcher.cc index 6ea7633a..6ce20ee 100644 --- a/ash/shell/window_type_launcher.cc +++ b/ash/shell/window_type_launcher.cc
@@ -183,7 +183,7 @@ create_embedded_browser_callback_( std::move(create_embedded_browser_callback)) { views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); SetBorder(views::CreateEmptyBorder(gfx::Insets(5))); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER,
diff --git a/ash/system/message_center/notifier_settings_view.cc b/ash/system/message_center/notifier_settings_view.cc index baab9df..7093aae5 100644 --- a/ash/system/message_center/notifier_settings_view.cc +++ b/ash/system/message_center/notifier_settings_view.cc
@@ -377,7 +377,7 @@ using views::ColumnSet; using views::GridLayout; - GridLayout* layout = SetLayoutManager(std::make_unique<GridLayout>(this)); + GridLayout* layout = SetLayoutManager(std::make_unique<GridLayout>()); ColumnSet* cs = layout->AddColumnSet(0); // Add a column for the checkbox. cs->AddPaddingColumn(0, kInnateCheckboxRightPadding);
diff --git a/ash/system/palette/palette_tray_unittest.cc b/ash/system/palette/palette_tray_unittest.cc index 89d000aec..ae2d10ee 100644 --- a/ash/system/palette/palette_tray_unittest.cc +++ b/ash/system/palette/palette_tray_unittest.cc
@@ -198,11 +198,6 @@ EXPECT_FALSE(palette_tray_->is_active()); } -TEST_F(PaletteTrayTest, NoMetalayerToolViewCreated) { - EXPECT_FALSE( - test_api_->palette_tool_manager()->HasTool(PaletteToolId::METALAYER)); -} - TEST_F(PaletteTrayTest, EnableStylusPref) { local_state_pref_service()->SetBoolean(prefs::kHasSeenStylus, true); @@ -243,9 +238,7 @@ // Base class for tests that rely on Assistant enabled. class PaletteTrayTestWithVoiceInteraction : public PaletteTrayTest { public: - PaletteTrayTestWithVoiceInteraction() { - feature_list_.InitAndEnableFeature(chromeos::switches::kAssistantFeature); - } + PaletteTrayTestWithVoiceInteraction() = default; ~PaletteTrayTestWithVoiceInteraction() override = default; // PaletteTrayTest: @@ -262,9 +255,6 @@ highlighter_test_api_ = std::make_unique<HighlighterControllerTestApi>( Shell::Get()->highlighter_controller()); - - Shell::Get()->assistant_controller()->SetAssistant( - assistant_.CreateInterfacePtrAndBind()); } void TearDown() override { @@ -330,9 +320,7 @@ std::unique_ptr<HighlighterControllerTestApi> highlighter_test_api_; private: - TestAssistantService assistant_; base::SimpleTestTickClock simulated_clock_; - base::test::ScopedFeatureList feature_list_; DISALLOW_COPY_AND_ASSIGN(PaletteTrayTestWithVoiceInteraction); };
diff --git a/ash/system/palette/tools/metalayer_unittest.cc b/ash/system/palette/tools/metalayer_unittest.cc index 1e2b7c3..ef71839 100644 --- a/ash/system/palette/tools/metalayer_unittest.cc +++ b/ash/system/palette/tools/metalayer_unittest.cc
@@ -18,6 +18,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/strings/utf_string_conversions.h" +#include "testing/gmock/include/gmock/gmock.h" #include "ui/views/controls/label.h" #include "ui/views/view.h" @@ -180,7 +181,8 @@ // Changing the state to NOT_READY should disable the tool. EXPECT_CALL(*palette_tool_delegate_.get(), - DisableTool(PaletteToolId::METALAYER)); + DisableTool(PaletteToolId::METALAYER)) + .Times(testing::AtLeast(1)); VoiceInteractionController::Get()->NotifyStatusChanged( mojom::VoiceInteractionState::NOT_READY); VoiceInteractionController::Get()->FlushForTesting();
diff --git a/ash/system/status_area_widget_delegate.cc b/ash/system/status_area_widget_delegate.cc index 045ef095..a6710a8 100644 --- a/ash/system/status_area_widget_delegate.cc +++ b/ash/system/status_area_widget_delegate.cc
@@ -118,7 +118,7 @@ // Use a grid layout so that the trays can be centered in each cell, and // so that the widget gets laid out correctly when tray sizes change. views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); // Update tray border based on layout. bool is_child_on_edge = true;
diff --git a/ash/system/time/time_view.cc b/ash/system/time/time_view.cc index 767a0b3..735b3de 100644 --- a/ash/system/time/time_view.cc +++ b/ash/system/time/time_view.cc
@@ -81,7 +81,7 @@ } else { RemoveChildView(horizontal_label_.get()); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); const int kColumnId = 0; views::ColumnSet* columns = layout->AddColumnSet(kColumnId); columns->AddPaddingColumn(0, kVerticalClockLeftPadding);
diff --git a/ash/system/unified/collapse_button.cc b/ash/system/unified/collapse_button.cc index dc806bc3..2a3aec1c 100644 --- a/ash/system/unified/collapse_button.cc +++ b/ash/system/unified/collapse_button.cc
@@ -7,105 +7,13 @@ #include "ash/resources/vector_icons/vector_icons.h" #include "ash/strings/grit/ash_strings.h" #include "ash/system/tray/tray_constants.h" -#include "ash/system/tray/tray_popup_utils.h" #include "ui/base/l10n/l10n_util.h" -#include "ui/compositor/paint_recorder.h" -#include "ui/gfx/canvas.h" -#include "ui/gfx/image/image_skia_operations.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/scoped_canvas.h" -#include "ui/gfx/skbitmap_operations.h" -#include "ui/views/animation/flood_fill_ink_drop_ripple.h" -#include "ui/views/animation/ink_drop_highlight.h" -#include "ui/views/animation/ink_drop_impl.h" -#include "ui/views/animation/ink_drop_mask.h" -#include "ui/views/border.h" #include "ui/views/view_class_properties.h" namespace ash { -namespace { - -// Ink drop mask that masks non-standard shape of CustomShapeButton. -class CustomShapeInkDropMask : public views::InkDropMask { - public: - CustomShapeInkDropMask(const gfx::Size& layer_size, - const CustomShapeButton* button); - - private: - // InkDropMask: - void OnPaintLayer(const ui::PaintContext& context) override; - - const CustomShapeButton* const button_; - - DISALLOW_COPY_AND_ASSIGN(CustomShapeInkDropMask); -}; - -CustomShapeInkDropMask::CustomShapeInkDropMask(const gfx::Size& layer_size, - const CustomShapeButton* button) - : views::InkDropMask(layer_size), button_(button) {} - -void CustomShapeInkDropMask::OnPaintLayer(const ui::PaintContext& context) { - cc::PaintFlags flags; - flags.setAlpha(255); - flags.setStyle(cc::PaintFlags::kFill_Style); - flags.setAntiAlias(true); - - ui::PaintRecorder recorder(context, layer()->size()); - recorder.canvas()->DrawPath(button_->CreateCustomShapePath(layer()->bounds()), - flags); -} - -} // namespace - -CustomShapeButton::CustomShapeButton(views::ButtonListener* listener) - : ImageButton(listener) { - TrayPopupUtils::ConfigureTrayPopupButton(this); -} - -CustomShapeButton::~CustomShapeButton() = default; - -void CustomShapeButton::PaintButtonContents(gfx::Canvas* canvas) { - PaintCustomShapePath(canvas); - views::ImageButton::PaintButtonContents(canvas); -} - -std::unique_ptr<views::InkDrop> CustomShapeButton::CreateInkDrop() { - return TrayPopupUtils::CreateInkDrop(this); -} - -std::unique_ptr<views::InkDropRipple> CustomShapeButton::CreateInkDropRipple() - const { - return TrayPopupUtils::CreateInkDropRipple( - TrayPopupInkDropStyle::FILL_BOUNDS, this, - GetInkDropCenterBasedOnLastEvent(), kUnifiedMenuIconColor); -} - -std::unique_ptr<views::InkDropHighlight> -CustomShapeButton::CreateInkDropHighlight() const { - return TrayPopupUtils::CreateInkDropHighlight( - TrayPopupInkDropStyle::FILL_BOUNDS, this, kUnifiedMenuIconColor); -} - -std::unique_ptr<views::InkDropMask> CustomShapeButton::CreateInkDropMask() - const { - return std::make_unique<CustomShapeInkDropMask>(size(), this); -} - -const char* CustomShapeButton::GetClassName() const { - return "CustomShapeButton"; -} - -void CustomShapeButton::PaintCustomShapePath(gfx::Canvas* canvas) { - cc::PaintFlags flags; - flags.setAntiAlias(true); - flags.setColor(GetEnabled() ? kUnifiedMenuButtonColor - : kUnifiedMenuButtonColorDisabled); - flags.setStyle(cc::PaintFlags::kFill_Style); - - canvas->DrawPath(CreateCustomShapePath(GetLocalBounds()), flags); -} - CollapseButton::CollapseButton(views::ButtonListener* listener) : CustomShapeButton(listener) { OnEnabledChanged();
diff --git a/ash/system/unified/collapse_button.h b/ash/system/unified/collapse_button.h index bc7b5b4c..c49cbd4 100644 --- a/ash/system/unified/collapse_button.h +++ b/ash/system/unified/collapse_button.h
@@ -5,37 +5,11 @@ #ifndef ASH_SYSTEM_UNIFIED_COLLAPSE_BUTTON_H_ #define ASH_SYSTEM_UNIFIED_COLLAPSE_BUTTON_H_ +#include "ash/system/unified/custom_shape_button.h" #include "base/bind.h" -#include "ui/views/controls/button/image_button.h" namespace ash { -// Abstract base class of buttons that have custom shape with Material Design -// ink drop. -class CustomShapeButton : public views::ImageButton { - public: - explicit CustomShapeButton(views::ButtonListener* listener); - ~CustomShapeButton() override; - - // Return the custom shape for the button in SkPath. - virtual SkPath CreateCustomShapePath(const gfx::Rect& bounds) const = 0; - - // views::ImageButton: - void PaintButtonContents(gfx::Canvas* canvas) override; - std::unique_ptr<views::InkDrop> CreateInkDrop() override; - std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override; - std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight() - const override; - std::unique_ptr<views::InkDropMask> CreateInkDropMask() const override; - const char* GetClassName() const override; - - protected: - void PaintCustomShapePath(gfx::Canvas* canvas); - - private: - DISALLOW_COPY_AND_ASSIGN(CustomShapeButton); -}; - // Collapse button shown in TopShortcutsView with TopShortcutButtons. // UnifiedSystemTrayBubble will support collapsed state where the height of the // bubble is smaller, and some rows and labels will be omitted.
diff --git a/ash/system/unified/custom_shape_button.cc b/ash/system/unified/custom_shape_button.cc new file mode 100644 index 0000000..9ac205a --- /dev/null +++ b/ash/system/unified/custom_shape_button.cc
@@ -0,0 +1,102 @@ +// Copyright 2019 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/system/unified/custom_shape_button.h" + +#include "ash/system/tray/tray_constants.h" +#include "ash/system/tray/tray_popup_utils.h" +#include "ui/compositor/paint_recorder.h" +#include "ui/gfx/image/image_skia_operations.h" +#include "ui/gfx/skbitmap_operations.h" +#include "ui/views/animation/flood_fill_ink_drop_ripple.h" +#include "ui/views/animation/ink_drop_highlight.h" +#include "ui/views/animation/ink_drop_impl.h" +#include "ui/views/animation/ink_drop_mask.h" +#include "ui/views/border.h" + +namespace ash { + +namespace { + +// Ink drop mask that masks non-standard shape of CustomShapeButton. +class CustomShapeInkDropMask : public views::InkDropMask { + public: + CustomShapeInkDropMask(const gfx::Size& layer_size, + const CustomShapeButton* button); + + private: + // InkDropMask: + void OnPaintLayer(const ui::PaintContext& context) override; + + const CustomShapeButton* const button_; + + DISALLOW_COPY_AND_ASSIGN(CustomShapeInkDropMask); +}; + +CustomShapeInkDropMask::CustomShapeInkDropMask(const gfx::Size& layer_size, + const CustomShapeButton* button) + : views::InkDropMask(layer_size), button_(button) {} + +void CustomShapeInkDropMask::OnPaintLayer(const ui::PaintContext& context) { + cc::PaintFlags flags; + flags.setAlpha(255); + flags.setStyle(cc::PaintFlags::kFill_Style); + flags.setAntiAlias(true); + + ui::PaintRecorder recorder(context, layer()->size()); + recorder.canvas()->DrawPath(button_->CreateCustomShapePath(layer()->bounds()), + flags); +} + +} // namespace + +CustomShapeButton::CustomShapeButton(views::ButtonListener* listener) + : ImageButton(listener) { + TrayPopupUtils::ConfigureTrayPopupButton(this); +} + +CustomShapeButton::~CustomShapeButton() = default; + +void CustomShapeButton::PaintButtonContents(gfx::Canvas* canvas) { + PaintCustomShapePath(canvas); + views::ImageButton::PaintButtonContents(canvas); +} + +std::unique_ptr<views::InkDrop> CustomShapeButton::CreateInkDrop() { + return TrayPopupUtils::CreateInkDrop(this); +} + +std::unique_ptr<views::InkDropRipple> CustomShapeButton::CreateInkDropRipple() + const { + return TrayPopupUtils::CreateInkDropRipple( + TrayPopupInkDropStyle::FILL_BOUNDS, this, + GetInkDropCenterBasedOnLastEvent(), kUnifiedMenuIconColor); +} + +std::unique_ptr<views::InkDropHighlight> +CustomShapeButton::CreateInkDropHighlight() const { + return TrayPopupUtils::CreateInkDropHighlight( + TrayPopupInkDropStyle::FILL_BOUNDS, this, kUnifiedMenuIconColor); +} + +std::unique_ptr<views::InkDropMask> CustomShapeButton::CreateInkDropMask() + const { + return std::make_unique<CustomShapeInkDropMask>(size(), this); +} + +const char* CustomShapeButton::GetClassName() const { + return "CustomShapeButton"; +} + +void CustomShapeButton::PaintCustomShapePath(gfx::Canvas* canvas) { + cc::PaintFlags flags; + flags.setAntiAlias(true); + flags.setColor(GetEnabled() ? kUnifiedMenuButtonColor + : kUnifiedMenuButtonColorDisabled); + flags.setStyle(cc::PaintFlags::kFill_Style); + + canvas->DrawPath(CreateCustomShapePath(GetLocalBounds()), flags); +} + +} // namespace ash
diff --git a/ash/system/unified/custom_shape_button.h b/ash/system/unified/custom_shape_button.h new file mode 100644 index 0000000..0c762c7 --- /dev/null +++ b/ash/system/unified/custom_shape_button.h
@@ -0,0 +1,40 @@ +// Copyright 2019 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_SYSTEM_UNIFIED_CUSTOM_SHAPE_BUTTON_H_ +#define ASH_SYSTEM_UNIFIED_CUSTOM_SHAPE_BUTTON_H_ + +#include "ui/views/controls/button/image_button.h" + +namespace ash { + +// Abstract base class of buttons that have custom shape with Material Design +// ink drop. +class CustomShapeButton : public views::ImageButton { + public: + explicit CustomShapeButton(views::ButtonListener* listener); + ~CustomShapeButton() override; + + // Return the custom shape for the button in SkPath. + virtual SkPath CreateCustomShapePath(const gfx::Rect& bounds) const = 0; + + // views::ImageButton: + void PaintButtonContents(gfx::Canvas* canvas) override; + std::unique_ptr<views::InkDrop> CreateInkDrop() override; + std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override; + std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight() + const override; + std::unique_ptr<views::InkDropMask> CreateInkDropMask() const override; + const char* GetClassName() const override; + + protected: + void PaintCustomShapePath(gfx::Canvas* canvas); + + private: + DISALLOW_COPY_AND_ASSIGN(CustomShapeButton); +}; + +} // namespace ash + +#endif // ASH_SYSTEM_UNIFIED_CUSTOM_SHAPE_BUTTON_H_
diff --git a/ash/test/ash_test_helper.cc b/ash/test/ash_test_helper.cc index a183b64..7562712 100644 --- a/ash/test/ash_test_helper.cc +++ b/ash/test/ash_test_helper.cc
@@ -10,6 +10,8 @@ #include <utility> #include "ash/app_list/test/app_list_test_helper.h" +#include "ash/assistant/assistant_controller.h" +#include "ash/assistant/test/test_assistant_service.h" #include "ash/display/display_configuration_controller_test_api.h" #include "ash/display/screen_ash.h" #include "ash/keyboard/ash_keyboard_controller.h" @@ -154,6 +156,10 @@ shell->session_controller(), prefs_provider_.get())); session_controller_client_->InitializeAndSetClient(); + assistant_service_ = std::make_unique<TestAssistantService>(); + shell->assistant_controller()->SetAssistant( + assistant_service_->CreateInterfacePtrAndBind()); + system_tray_client_ = std::make_unique<TestSystemTrayClient>(); shell->system_tray_model()->SetClient(system_tray_client_.get());
diff --git a/ash/test/ash_test_helper.h b/ash/test/ash_test_helper.h index aac29cd..bdda0c0 100644 --- a/ash/test/ash_test_helper.h +++ b/ash/test/ash_test_helper.h
@@ -10,6 +10,7 @@ #include <memory> #include <utility> +#include "ash/assistant/test/test_assistant_service.h" #include "ash/session/test_session_controller_client.h" #include "base/macros.h" #include "base/test/scoped_command_line.h" @@ -124,7 +125,7 @@ std::unique_ptr<TestSessionControllerClient> session_controller_client_; std::unique_ptr<TestSystemTrayClient> system_tray_client_; std::unique_ptr<TestPrefServiceProvider> prefs_provider_; - + std::unique_ptr<TestAssistantService> assistant_service_; std::unique_ptr<ui::TestContextFactories> context_factories_; std::unique_ptr<base::test::ScopedCommandLine> command_line_;
diff --git a/ash/wallpaper/wallpaper_controller_impl.cc b/ash/wallpaper/wallpaper_controller_impl.cc index 897d918..8f05d04e 100644 --- a/ash/wallpaper/wallpaper_controller_impl.cc +++ b/ash/wallpaper/wallpaper_controller_impl.cc
@@ -46,6 +46,7 @@ #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" +#include "components/user_manager/user_manager.h" #include "components/user_manager/user_type.h" #include "services/data_decoder/public/cpp/decode_image.h" #include "ui/display/manager/display_manager.h" @@ -442,19 +443,21 @@ // Returns true if the user's wallpaper is to be treated as ephemeral. bool IsEphemeralUser(const AccountId& id) { - for (const auto& s : Shell::Get()->session_controller()->GetUserSessions()) { - if (s->user_info.account_id == id) - return s->user_info.is_ephemeral; + if (user_manager::UserManager::IsInitialized()) { + return user_manager::UserManager::Get()->IsUserNonCryptohomeDataEphemeral( + id); } + NOTIMPLEMENTED(); return false; } // Returns the type of the user with the specified |id| or USER_TYPE_REGULAR. user_manager::UserType GetUserType(const AccountId& id) { - for (const auto& s : Shell::Get()->session_controller()->GetUserSessions()) { - if (s->user_info.account_id == id) - return s->user_info.type; + if (user_manager::UserManager::IsInitialized()) { + if (auto* user = user_manager::UserManager::Get()->FindUser(id)) + return user->GetType(); } + NOTIMPLEMENTED(); return user_manager::USER_TYPE_REGULAR; }
diff --git a/ash/wallpaper/wallpaper_controller_unittest.cc b/ash/wallpaper/wallpaper_controller_unittest.cc index 713bbf7..3010090 100644 --- a/ash/wallpaper/wallpaper_controller_unittest.cc +++ b/ash/wallpaper/wallpaper_controller_unittest.cc
@@ -32,6 +32,8 @@ #include "base/test/bind_test_util.h" #include "base/time/time_override.h" #include "chromeos/constants/chromeos_switches.h" +#include "components/user_manager/fake_user_manager.h" +#include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/user_names.h" #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkColor.h" @@ -244,6 +246,7 @@ DISALLOW_COPY_AND_ASSIGN(TestWallpaperControllerClient); }; + // A test implementation of the WallpaperControllerObserver interface. class TestWallpaperControllerObserver : public WallpaperControllerObserver { public: @@ -278,11 +281,16 @@ class WallpaperControllerTest : public AshTestBase { public: - WallpaperControllerTest() : controller_(nullptr) {} + WallpaperControllerTest() = default; ~WallpaperControllerTest() override = default; void SetUp() override { AshTestBase::SetUp(); + auto fake_user_manager = std::make_unique<user_manager::FakeUserManager>(); + fake_user_manager_ = fake_user_manager.get(); + scoped_user_manager_ = std::make_unique<user_manager::ScopedUserManager>( + std::move(fake_user_manager)); + // Ash shell initialization creates wallpaper. Reset it so we can manually // control wallpaper creation and animation in our tests. Shell::Get() @@ -522,13 +530,16 @@ return controller_->GetWallpaperContainerId(controller_->locked_); } - WallpaperControllerImpl* controller_; // Not owned. + WallpaperControllerImpl* controller_ = nullptr; // Not owned. base::ScopedTempDir user_data_dir_; base::ScopedTempDir online_wallpaper_dir_; base::ScopedTempDir custom_wallpaper_dir_; base::ScopedTempDir default_wallpaper_dir_; + user_manager::FakeUserManager* fake_user_manager_ = nullptr; + std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_; + private: DISALLOW_COPY_AND_ASSIGN(WallpaperControllerTest); }; @@ -1281,7 +1292,7 @@ const std::string child_email = "child@test.com"; const AccountId child_account_id = AccountId::FromUserEmail(child_email); const std::string child_wallpaper_files_id = GetDummyFileId(child_account_id); - SimulateUserLogin(child_email, user_manager::USER_TYPE_CHILD); + fake_user_manager_->AddChildUser(child_account_id); // Verify the large child wallpaper is set successfully with the correct file // path. @@ -1327,9 +1338,9 @@ base::Time::Now().LocalMidnight()); EXPECT_NE(wallpaper_info.type, default_wallpaper_info.type); - SimulateGuestLogin(); const AccountId guest_id = AccountId::FromUserEmail(user_manager::kGuestUserName); + fake_user_manager_->AddGuestUser(guest_id); // Verify that during a guest session, |SetDefaultWallpaper| removes the user // custom wallpaper info, but a guest specific wallpaper should be set,
diff --git a/base/debug/stack_trace.h b/base/debug/stack_trace.h index f9db705..0d617ff 100644 --- a/base/debug/stack_trace.h +++ b/base/debug/stack_trace.h
@@ -16,6 +16,9 @@ #include "build/build_config.h" #if defined(OS_POSIX) +#if !defined(OS_NACL) +#include <signal.h> +#endif #include <unistd.h> #endif @@ -38,7 +41,7 @@ // done in official builds because it has security implications). BASE_EXPORT bool EnableInProcessStackDumping(); -#if defined(OS_POSIX) +#if defined(OS_POSIX) && !defined(OS_NACL) // Sets a first-chance callback for the stack dump signal handler. This callback // is called at the beginning of the signal handler to handle special kinds of // signals, like out-of-bounds memory accesses in WebAssembly (WebAssembly Trap @@ -47,7 +50,7 @@ // has been set correctly. It returns {false} if the stack dump signal handler // has not been registered with the OS, e.g. because of ASAN. BASE_EXPORT bool SetStackDumpFirstChanceCallback(bool (*handler)(int, - void*, + siginfo_t*, void*)); #endif
diff --git a/base/debug/stack_trace_posix.cc b/base/debug/stack_trace_posix.cc index de2f356..f4ddf9c 100644 --- a/base/debug/stack_trace_posix.cc +++ b/base/debug/stack_trace_posix.cc
@@ -63,7 +63,9 @@ volatile sig_atomic_t in_signal_handler = 0; -bool (*try_handle_signal)(int, void*, void*) = nullptr; +#if !defined(OS_NACL) +bool (*try_handle_signal)(int, siginfo_t*, void*) = nullptr; +#endif #if !defined(USE_SYMBOLIZE) // The prefix used for mangled symbols, per the Itanium C++ ABI: @@ -228,6 +230,7 @@ // NOTE: This code MUST be async-signal safe. // NO malloc or stdio is allowed here. +#if !defined(OS_NACL) // Give a registered callback a chance to recover from this signal // // V8 uses guard regions to guarantee memory safety in WebAssembly. This means @@ -248,6 +251,7 @@ sigaction(signal, &action, nullptr); return; } +#endif // Do not take the "in signal handler" code path on Mac in a DCHECK-enabled // build, as this prevents seeing a useful (symbolized) stack trace on a crash @@ -803,7 +807,8 @@ return success; } -bool SetStackDumpFirstChanceCallback(bool (*handler)(int, void*, void*)) { +#if !defined(OS_NACL) +bool SetStackDumpFirstChanceCallback(bool (*handler)(int, siginfo_t*, void*)) { DCHECK(try_handle_signal == nullptr || handler == nullptr); try_handle_signal = handler; @@ -823,6 +828,7 @@ #endif return true; } +#endif size_t CollectStackTrace(void** trace, size_t count) { // NOTE: This code MUST be async-signal safe (it's used by in-process
diff --git a/base/task/thread_pool/thread_group_unittest.cc b/base/task/thread_pool/thread_group_unittest.cc index 3a84ca8f..b071245 100644 --- a/base/task/thread_pool/thread_group_unittest.cc +++ b/base/task/thread_pool/thread_group_unittest.cc
@@ -285,12 +285,12 @@ // Wait until the task runs. task_ran.Wait(); - // Expect the task to run after its delay expires, but no more than 250 - // ms after that. + // Expect the task to run after its delay expires, but no more than a + // reasonable amount of time after that (overloaded bots can be slow sometimes + // so give it 10X flexibility). const TimeDelta actual_delay = TimeTicks::Now() - start_time; EXPECT_GE(actual_delay, TestTimeouts::tiny_timeout()); - EXPECT_LT(actual_delay, - TimeDelta::FromMilliseconds(250) + TestTimeouts::tiny_timeout()); + EXPECT_LT(actual_delay, 10 * TestTimeouts::tiny_timeout()); } // Verify that the RunsTasksInCurrentSequence() method of a SEQUENCED TaskRunner
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 8bddc35..094f83a6 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -8910715237090861408 \ No newline at end of file +8910690471883428096 \ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index a6a04bb..6c574847 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -8910717122314502752 \ No newline at end of file +8910690961961271888 \ No newline at end of file
diff --git a/cc/trees/layer_tree_host_unittest_animation.cc b/cc/trees/layer_tree_host_unittest_animation.cc index 47a27fd6..604cd8d 100644 --- a/cc/trees/layer_tree_host_unittest_animation.cc +++ b/cc/trees/layer_tree_host_unittest_animation.cc
@@ -369,6 +369,15 @@ if (host_impl->active_tree()->source_frame_number() != 0) return; + // The impl thread may start a second frame before the test finishes. This + // can lead to a race as if the main thread has committed a new sync tree + // the impl thread can now delete the KeyframeModel as the animation only + // lasts a single frame and no longer affects either tree. Only test the + // first frame the animation shows up for. + if (!first_animation_frame_) + return; + first_animation_frame_ = false; + scoped_refptr<AnimationTimeline> timeline_impl = GetImplAnimationHost(host_impl)->GetTimelineById(timeline_id_); scoped_refptr<SingleKeyframeEffectAnimation> animation_child_impl = @@ -397,6 +406,7 @@ FakeContentLayerClient client_; scoped_refptr<FakePictureLayer> picture_; + bool first_animation_frame_ = true; }; SINGLE_AND_MULTI_THREAD_TEST_F(
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 5ed6cd8..766aa5b 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -1872,7 +1872,9 @@ input = "javatests/AndroidManifest_monochrome.xml" includes = [ "java/AndroidManifest.xml", + "java/AndroidManifest_monochrome.xml", "javatests/AndroidManifest.xml", + "//android_webview/apk/java/AndroidManifest.xml", ] output = monochrome_public_test_ar_apk_manifest variables = chrome_public_jinja_variables + @@ -1881,6 +1883,7 @@ "target_sdk_version=$android_sdk_version", "test_manifest_package=$test_manifest_package", "webview_library=libmonochrome.so", + "include_arcore_manifest_flag=true", ] } @@ -1934,6 +1937,47 @@ } } +template("monochrome_test_apk_tmpl") { + monochrome_public_common_apk_or_module_tmpl(target_name) { + forward_variables_from(invoker, + [ + "apk_name", + "android_manifest", + "android_manifest_dep", + "data_deps", + "loadable_modules", + "secondary_abi_loadable_modules", + "shared_libraries", + ]) + + testonly = true + target_type = "instrumentation_test_apk" + + # Always set to false so that we don't have to change the shared library we + # use. See the comment in the monochrome_public_test_ar_apk target for + # details. + add_unwind_tables_in_apk = false + + deps = _chrome_public_shared_deps + invoker.deps + [ + ":monochrome_apk_pak_assets", + ":chrome_public_base_module_java_for_test", + "//third_party/android_support_test_runner:runner_java", + "//third_party/android_sdk:android_test_base_java", + "//third_party/android_sdk:android_test_mock_java", + "//third_party/android_sdk:android_test_runner_java", + ] + + additional_apks = [ "//net/android:net_test_support_apk" ] + if (defined(invoker.additional_apks)) { + additional_apks += invoker.additional_apks + } + if (!is_java_debug) { + proguard_enabled = true + proguard_configs = [ "//chrome/android/java/apk_for_test.flags" ] + } + } +} + chrome_test_apk_tmpl("chrome_public_test_apk") { apk_name = "ChromePublicTest" android_manifest = chrome_public_test_apk_manifest @@ -1985,24 +2029,46 @@ } if (enable_arcore) { - instrumentation_test_apk("monochrome_public_test_ar_apk") { + monochrome_test_apk_tmpl("monochrome_public_test_ar_apk") { apk_name = "MonochromePublicTestAr" - apk_under_test = ":monochrome_public_apk" android_manifest = monochrome_public_test_ar_apk_manifest android_manifest_dep = ":monochrome_public_test_ar_apk_manifest" + # This is where we would add the shared_libraries entry for + # :libchromefortest in the non-Monochrome version. However, doing so in the + # Monochrome version causes Chrome to crash on startup due to being unable + # to load the library, and looking at the libraries included in the APK + # shows both libchromefortest and libmonochrome, when only one should be + # present. The tests currently work fine with just libmonochrome, so keep + # it this way until we actually need the test-only library. This may be + # related to monochrome_public_common_apk_or_module_tmpl adding its own + # shared libraries, but chrome_public_common_apk_or_module_tmpl not. See + # https://crbug.com/974017. deps = [ ":chrome_test_ar_java", "//third_party/android_sdk:android_test_mock_java", ] + + # Include ArCore files directly instead of using bundles. + deps += [ + "//chrome/browser/android/vr:ar_java", + "//third_party/android_deps:com_google_ar_core_java", + ] + + # We store this as a separate .so in the APK and only load as needed. + if (android_64bit_target_cpu && build_apk_secondary_abi) { + secondary_abi_loadable_modules = [ "$root_gen_dir/third_party/android_deps/com_google_ar_core_java/jni/armeabi-v7a/libarcore_sdk_c.so" ] + } else if (android_64bit_target_cpu && !build_apk_secondary_abi) { + loadable_modules = [ "$root_gen_dir/third_party/android_deps/com_google_ar_core_java/jni/armeabi-v7a/libarcore_sdk_c.so" ] + } else { + loadable_modules = [ "$root_gen_dir/third_party/android_deps/com_google_ar_core_java/jni/armeabi-v7a/libarcore_sdk_c.so" ] + } + additional_apks = [ "//net/android:net_test_support_apk" ] proguard_enabled = !is_java_debug if (proguard_enabled && !enable_proguard_obfuscation) { proguard_configs = [ "//base/android/proguard/enable_obfuscation.flags" ] } - alternative_android_sdk_dep = webview_framework_dep - - never_incremental = true } }
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni index 7ea064bc..e9140c3a 100644 --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -421,24 +421,6 @@ png_to_webp = true } - # Adding ArCore to make AR integration tests work. - # TODO(crbug.com/951065): Remove once AR tests migrated to single integration test APK. - if (invoker.target_type == "android_apk" && enable_arcore) { - _deps += [ - "//chrome/browser/android/vr:ar_java", - "//third_party/android_deps:com_google_ar_core_java", - ] - - # We store this as a separate .so in the APK and only load as needed. - if (android_64bit_target_cpu && build_apk_secondary_abi) { - secondary_abi_loadable_modules += [ "$root_gen_dir/third_party/android_deps/com_google_ar_core_java/jni/armeabi-v7a/libarcore_sdk_c.so" ] - } else if (android_64bit_target_cpu && !build_apk_secondary_abi) { - loadable_modules += [ "$root_gen_dir/third_party/android_deps/com_google_ar_core_java/jni/armeabi-v7a/libarcore_sdk_c.so" ] - } else { - loadable_modules += [ "$root_gen_dir/third_party/android_deps/com_google_ar_core_java/jni/armeabi-v7a/libarcore_sdk_c.so" ] - } - } - if (!defined(deps)) { deps = [] }
diff --git a/chrome/android/java/res/xml/do_not_track_preferences.xml b/chrome/android/java/res/xml/do_not_track_preferences.xml index 18dd6ad5..83339e1 100644 --- a/chrome/android/java/res/xml/do_not_track_preferences.xml +++ b/chrome/android/java/res/xml/do_not_track_preferences.xml
@@ -3,17 +3,17 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> -<PreferenceScreen +<android.support.v7.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> - <org.chromium.chrome.browser.preferences.ChromeSwitchPreference + <org.chromium.chrome.browser.preferences.ChromeSwitchPreferenceCompat android:key="do_not_track_switch" android:summaryOn="@string/text_on" - android:summaryOff="@string/text_off" - app:drawDivider="true" /> + android:summaryOff="@string/text_off" /> - <org.chromium.chrome.browser.preferences.TextMessagePreference - android:title="@string/do_not_track_description" /> + <org.chromium.chrome.browser.preferences.TextMessagePreferenceCompat + android:title="@string/do_not_track_description" + app:allowDividerBelow="false" /> -</PreferenceScreen> \ No newline at end of file +</android.support.v7.preference.PreferenceScreen> \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java b/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java index 062facf4..5e436d2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
@@ -53,6 +53,7 @@ import org.chromium.chrome.browser.survey.SurveyController; import org.chromium.chrome.browser.tab.AuthenticatorNavigationInterceptor; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.touchless.TouchlessDelegate; import org.chromium.chrome.browser.touchless.TouchlessModelCoordinator; import org.chromium.chrome.browser.touchless.TouchlessUiCoordinator; import org.chromium.chrome.browser.ui.ImmersiveModeManager; @@ -391,7 +392,7 @@ * @return A new {@link TouchlessUiCoordinator} instance. */ public TouchlessUiCoordinator createTouchlessUiCoordinator(ChromeActivity activity) { - return null; + return TouchlessDelegate.getTouchlessUiCoordinator(activity); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java index 3e4fdaae..6439753 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
@@ -41,7 +41,6 @@ import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.toolbar.ToolbarDataProvider; import org.chromium.chrome.browser.util.UrlConstants; -import org.chromium.components.omnibox.AnswerType; import org.chromium.content_public.browser.WebContents; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.PageTransition; @@ -63,20 +62,20 @@ implements OnSuggestionsReceivedListener, SuggestionHost, StartStopWithNativeObserver { /** A struct containing information about the suggestion and its view type. */ private static class SuggestionViewInfo { + /** Processor managing the suggestion. */ + public final SuggestionProcessor processor; + /** The suggestion this info represents. */ public final OmniboxSuggestion suggestion; /** The model the view uses to render the suggestion. */ public final PropertyModel model; - /** The view type ID. */ - public final int typeId; - - public SuggestionViewInfo( - OmniboxSuggestion omniboxSuggestion, PropertyModel propertyModel, int id) { + public SuggestionViewInfo(SuggestionProcessor suggestionProcessor, + OmniboxSuggestion omniboxSuggestion, PropertyModel propertyModel) { + processor = suggestionProcessor; suggestion = omniboxSuggestion; model = propertyModel; - typeId = id; } } @@ -177,7 +176,7 @@ @Override public void onStopWithNative() { - recordAnswersHistogram(); + recordSuggestionsShown(); } /** @@ -190,19 +189,14 @@ } /** - * Record presence of AiS answers. - * - * Note: At the time of writing this functionality, AiS was offering at most one answer to any - * query. If this changes before the metric is expired, the code below may need either - * revisiting or a secondary metric telling us how many answer suggestions have been shown. + * Record histograms for presented suggestions. */ - private void recordAnswersHistogram() { + private void recordSuggestionsShown() { int richEntitiesCount = 0; for (SuggestionViewInfo info : mCurrentModels) { - if (info.suggestion.hasAnswer()) { - RecordHistogram.recordEnumeratedHistogram("Omnibox.AnswerInSuggestShown", - info.suggestion.getAnswer().getType(), AnswerType.TOTAL_COUNT); - } else if (mEntitySuggestionProcessor.doesProcessSuggestion(info.suggestion)) { + info.processor.recordSuggestionPresented(info.suggestion, info.model); + + if (info.processor.getViewTypeId() == OmniboxSuggestionUiType.ENTITY_SUGGESTION) { richEntitiesCount++; } } @@ -239,7 +233,7 @@ List<Pair<Integer, PropertyModel>> models = new ArrayList<>(mCurrentModels.size()); for (int i = 0; i < mCurrentModels.size(); i++) { PropertyModel model = mCurrentModels.get(i).model; - models.add(new Pair<>(mCurrentModels.get(i).typeId, model)); + models.add(new Pair<>(mCurrentModels.get(i).processor.getViewTypeId(), model)); } mListPropertyModel.set(SuggestionListProperties.SUGGESTION_MODELS, models); } @@ -398,9 +392,7 @@ }); } } else { - // Record presence of answers as user stops interacting with omnibox. - // This covers actions such as pressing 'back' button or choosing an answer. - recordAnswersHistogram(); + recordSuggestionsShown(); mSuggestionVisibilityState = SuggestionVisibilityState.DISALLOWED; mHasStartedNewOmniboxEditSession = false; @@ -540,6 +532,9 @@ }; return; } + SuggestionViewInfo info = mCurrentModels.get(position); + info.processor.recordSuggestionUsed(info.suggestion, info.model); + loadUrlFromOmniboxMatch(position, suggestion, mLastActionUpTimestamp, true); mDelegate.hideKeyboard(); } @@ -829,8 +824,7 @@ // Before populating the model, add it to the list of current models. If the suggestion // has an image and the image was already cached, it will be updated synchronously and // the model will only have the image populated if it is tracked as a current model. - mCurrentModels.add( - new SuggestionViewInfo(suggestion, model, processor.getViewTypeId())); + mCurrentModels.add(new SuggestionViewInfo(processor, suggestion, model)); processor.populateModel(suggestion, model, i); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionProcessor.java index 16904e9..a91fff0c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionProcessor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionProcessor.java
@@ -46,4 +46,21 @@ * @param position The position of the suggestion in the list. */ void populateModel(OmniboxSuggestion suggestion, PropertyModel model, int position); + + /** + * Record histograms for presented suggestion. + * Purpose of this function is bookkeeping of presented suggestions at the time user finishes + * interacting with omnibox (whether navigating somewhere, turning off screen, leaving omnibox + * or closing the app). + * This call is invoked only on Processor responsible for managing specific omnibox suggestion + * type. + */ + void recordSuggestionPresented(OmniboxSuggestion suggestion, PropertyModel model); + + /** + * Record histograms for used suggestion. + * Invoked whenever user uses particular suggestion to navigate somewhere. + * Only the processor responsible for managing specific suggestion receives this call. + */ + void recordSuggestionUsed(OmniboxSuggestion suggestion, PropertyModel model); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/answer/AnswerSuggestionProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/answer/AnswerSuggestionProcessor.java index bb9f6e85..e2e1924f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/answer/AnswerSuggestionProcessor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/answer/AnswerSuggestionProcessor.java
@@ -11,6 +11,7 @@ import android.view.View; import org.chromium.base.ThreadUtils; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.ChromeApplication; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.image_fetcher.ImageFetcher; @@ -114,6 +115,21 @@ } } + @Override + public void recordSuggestionPresented(OmniboxSuggestion suggestion, PropertyModel model) { + // Note: At the time of writing this functionality, AiS was offering at most one answer to + // any query. If this changes before the metric is expired, the code below may need either + // revisiting or a secondary metric telling us how many answer suggestions have been shown. + RecordHistogram.recordEnumeratedHistogram("Omnibox.AnswerInSuggestShown", + suggestion.getAnswer().getType(), AnswerType.TOTAL_COUNT); + } + + @Override + public void recordSuggestionUsed(OmniboxSuggestion suggestion, PropertyModel model) { + // Bookkeeping handled in C++: + // https://cs.chromium.org/Omnibox.SuggestionUsed.AnswerInSuggest + } + private void maybeFetchAnswerIcon(OmniboxSuggestion suggestion, PropertyModel model) { ThreadUtils.assertOnUiThread();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessor.java index 1569641..91b0f0d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/BasicSuggestionProcessor.java
@@ -15,6 +15,8 @@ import android.view.View; import org.chromium.base.ApiCompatibilityUtils; +import org.chromium.base.VisibleForTesting; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.favicon.LargeIconBridge; @@ -83,6 +85,20 @@ @Override public void onUrlFocusChange(boolean hasFocus) {} + @Override + public void recordSuggestionPresented(OmniboxSuggestion suggestion, PropertyModel model) { + RecordHistogram.recordEnumeratedHistogram("Omnibox.IconOrFaviconShown", + model.get(SuggestionViewProperties.SUGGESTION_ICON_TYPE), + SuggestionIcon.TOTAL_COUNT); + } + + @Override + public void recordSuggestionUsed(OmniboxSuggestion suggestion, PropertyModel model) { + RecordHistogram.recordEnumeratedHistogram("Omnibox.SuggestionUsed.IconOrFaviconType", + model.get(SuggestionViewProperties.SUGGESTION_ICON_TYPE), + SuggestionIcon.TOTAL_COUNT); + } + /** * Signals that native initialization has completed. */ @@ -105,23 +121,52 @@ } } + /** + * Returns suggestion icon to be presented for specified omnibox suggestion. + * + * This method returns the stock icon type to be attached to the Suggestion. + * Note that the stock icons do not include Favicon - Favicon is only declared + * when we know we have a valid and large enough site favicon to present. + */ + @VisibleForTesting + public @SuggestionIcon int getSuggestionIconType(OmniboxSuggestion suggestion) { + if (suggestion.isUrlSuggestion()) { + if (suggestion.isStarred()) { + return SuggestionIcon.BOOKMARK; + } else if (suggestion.getType() == OmniboxSuggestionType.HISTORY_URL) { + return mEnableSuggestionFavicons ? SuggestionIcon.GLOBE : SuggestionIcon.HISTORY; + } else { + return SuggestionIcon.GLOBE; + } + } else /* Search suggestion */ { + switch (suggestion.getType()) { + case OmniboxSuggestionType.VOICE_SUGGEST: + return SuggestionIcon.VOICE; + + case OmniboxSuggestionType.SEARCH_SUGGEST_PERSONALIZED: + case OmniboxSuggestionType.SEARCH_HISTORY: + return mEnableSuggestionFavicons ? SuggestionIcon.MAGNIFIER + : SuggestionIcon.HISTORY; + + case OmniboxSuggestionType.CALCULATOR: + return mEnableNewAnswerLayout ? SuggestionIcon.CALCULATOR + : SuggestionIcon.MAGNIFIER; + + default: + return SuggestionIcon.MAGNIFIER; + } + } + } + private void setStateForSuggestion(PropertyModel model, OmniboxSuggestion suggestion) { int suggestionType = suggestion.getType(); - @SuggestionIcon - int suggestionIcon; Spannable textLine1; Spannable textLine2; int textLine2Color = 0; int textLine2Direction = View.TEXT_DIRECTION_INHERIT; + if (suggestion.isUrlSuggestion()) { - suggestionIcon = SuggestionIcon.GLOBE; - if (suggestion.isStarred()) { - suggestionIcon = SuggestionIcon.BOOKMARK; - } else if (!mEnableSuggestionFavicons - && suggestionType == OmniboxSuggestionType.HISTORY_URL) { - suggestionIcon = SuggestionIcon.HISTORY; - } boolean urlHighlighted = false; if (!TextUtils.isEmpty(suggestion.getUrl())) { Spannable str = SpannableString.valueOf(suggestion.getDisplayText()); @@ -138,15 +183,6 @@ } textLine1 = getSuggestedQuery(suggestion, true, !urlHighlighted); } else { - suggestionIcon = SuggestionIcon.MAGNIFIER; - if (suggestionType == OmniboxSuggestionType.VOICE_SUGGEST) { - suggestionIcon = SuggestionIcon.VOICE; - } else if (!mEnableSuggestionFavicons - && ((suggestionType == OmniboxSuggestionType.SEARCH_SUGGEST_PERSONALIZED) - || (suggestionType == OmniboxSuggestionType.SEARCH_HISTORY))) { - // Show history icon for suggestions based on user queries. - suggestionIcon = SuggestionIcon.HISTORY; - } textLine1 = getSuggestedQuery(suggestion, false, true); if ((suggestionType == OmniboxSuggestionType.SEARCH_SUGGEST_ENTITY) || (suggestionType == OmniboxSuggestionType.SEARCH_SUGGEST_PROFILE)) { @@ -158,7 +194,6 @@ textLine2Direction = View.TEXT_DIRECTION_INHERIT; } else if (mEnableNewAnswerLayout && suggestionType == OmniboxSuggestionType.CALCULATOR) { - suggestionIcon = SuggestionIcon.CALCULATOR; textLine2 = SpannableString.valueOf( mUrlBarEditingTextProvider.getTextWithAutocomplete()); @@ -170,6 +205,9 @@ } } + model.set(SuggestionViewProperties.SUGGESTION_ICON_TYPE, getSuggestionIconType(suggestion)); + model.set(SuggestionViewProperties.SUGGESTION_ICON_BITMAP, null); + model.set(SuggestionViewProperties.IS_ANSWER, false); model.set(SuggestionViewProperties.HAS_ANSWER_IMAGE, false); model.set(SuggestionViewProperties.ANSWER_IMAGE, null); @@ -193,7 +231,6 @@ .omnibox_suggestion_second_line_text_size))); model.set(SuggestionViewProperties.TEXT_LINE_1_MAX_LINES, 1); model.set(SuggestionViewProperties.TEXT_LINE_2_MAX_LINES, 1); - model.set(SuggestionViewProperties.SUGGESTION_ICON_BITMAP, null); // Include site favicon if we are presenting URL and have favicon available. if (mLargeIconBridge != null && suggestion.getUrl() != null) { @@ -201,8 +238,12 @@ (Bitmap icon, int fallbackColor, boolean isFallbackColorDefault, int iconType) -> { if (!mSuggestionHost.isActiveModel(model)) return; - model.set(SuggestionViewProperties.SUGGESTION_ICON_BITMAP, icon); - mSuggestionHost.notifyPropertyModelsChanged(); + if (icon != null) { + model.set(SuggestionViewProperties.SUGGESTION_ICON_BITMAP, icon); + model.set(SuggestionViewProperties.SUGGESTION_ICON_TYPE, + SuggestionIcon.FAVICON); + mSuggestionHost.notifyPropertyModelsChanged(); + } }); } @@ -211,7 +252,6 @@ suggestion.getDisplayText()); model.set(SuggestionViewProperties.REFINABLE, !sameAsTyped); - model.set(SuggestionViewProperties.SUGGESTION_ICON_TYPE, suggestionIcon); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/SuggestionViewProperties.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/SuggestionViewProperties.java index 576bbb1f..8844c949 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/SuggestionViewProperties.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/SuggestionViewProperties.java
@@ -25,18 +25,22 @@ * The properties associated with rendering the suggestion view. */ public class SuggestionViewProperties { - @IntDef({SuggestionIcon.UNDEFINED, SuggestionIcon.BOOKMARK, SuggestionIcon.HISTORY, + @IntDef({SuggestionIcon.UNSET, SuggestionIcon.BOOKMARK, SuggestionIcon.HISTORY, SuggestionIcon.GLOBE, SuggestionIcon.MAGNIFIER, SuggestionIcon.VOICE, - SuggestionIcon.CALCULATOR}) + SuggestionIcon.CALCULATOR, SuggestionIcon.FAVICON, SuggestionIcon.TOTAL_COUNT}) @Retention(RetentionPolicy.SOURCE) public @interface SuggestionIcon { - int UNDEFINED = -1; - int BOOKMARK = 0; - int HISTORY = 1; - int GLOBE = 2; - int MAGNIFIER = 3; - int VOICE = 4; - int CALCULATOR = 5; + // This enum is used to back UMA histograms, and should therefore be treated as append-only. + // See http://cs.chromium.org/SuggestionIconOrFaviconType + int UNSET = 0; + int BOOKMARK = 1; + int HISTORY = 2; + int GLOBE = 3; + int MAGNIFIER = 4; + int VOICE = 5; + int CALCULATOR = 6; + int FAVICON = 7; + int TOTAL_COUNT = 8; } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/SuggestionViewViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/SuggestionViewViewBinder.java index 1258b04c..c24d68d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/SuggestionViewViewBinder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/SuggestionViewViewBinder.java
@@ -156,6 +156,18 @@ int drawableId = R.drawable.ic_omnibox_page; switch (type) { + case SuggestionIcon.UNSET: + case SuggestionIcon.FAVICON: + // At this point there is no suggestion icon available - yet. + // - UNSET indicates we have yet to identify adequate SuggestionIcon type, + // - FAVICON indicates suggestion is about to receive a favicon bitmap, but + // that has not yet happened. + // This path will be triggered as a result of USE_DARK_COLORS or + // SHOW_SUGGESTION_ICONS properties being set before we had the chance to + // update SUGGESTION_ICON_TYPE, or adapter copying keys to a new model. + // This is not an error. + return; + case SuggestionIcon.GLOBE: drawableId = R.drawable.ic_globe_24dp; break; @@ -175,11 +187,6 @@ drawableId = R.drawable.ic_equals_sign_round; allowTint = false; break; - case SuggestionIcon.UNDEFINED: - // Since SuggestionViews may be re-used, there is a risk we would be - // presenting an stale favicon already. - assert false : "Unknown suggestion icon type."; - break; default: break; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor.java index ded877e..ac052e4 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor.java
@@ -235,6 +235,12 @@ ChromeFeatureList.isEnabled(ChromeFeatureList.OMNIBOX_SHOW_SUGGESTION_FAVICONS); } + @Override + public void recordSuggestionPresented(OmniboxSuggestion suggestion, PropertyModel model) {} + + @Override + public void recordSuggestionUsed(OmniboxSuggestion suggestion, PropertyModel model) {} + /** * Updates the profile used for extracting website favicons. * @param profile The profile to be used.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionProcessor.java index e3b2b6f1..f4163521 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionProcessor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionProcessor.java
@@ -77,6 +77,17 @@ if (mImageFetcher != null && !hasFocus) mImageFetcher.clear(); } + @Override + public void recordSuggestionPresented(OmniboxSuggestion suggestion, PropertyModel model) { + // Not used. + } + + @Override + public void recordSuggestionUsed(OmniboxSuggestion suggestion, PropertyModel model) { + // Bookkeeping handled in C++: + // http://cs.chromium.org/Omnibox.SuggestionUsed.RichEntity + } + private void fetchEntityImage(OmniboxSuggestion suggestion, PropertyModel model) { ThreadUtils.assertOnUiThread(); final String url = suggestion.getImageUrl();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionView.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionView.java index c29704f..c8ef243 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionView.java
@@ -5,8 +5,13 @@ package org.chromium.chrome.browser.omnibox.suggestions.entity; import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; import android.graphics.drawable.Drawable; +import android.graphics.drawable.TransitionDrawable; import android.support.v4.graphics.drawable.DrawableCompat; +import android.support.v4.graphics.drawable.RoundedBitmapDrawable; +import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; @@ -45,6 +50,9 @@ void onRefine(); } + /** Length of the transition animation used to animate appearance of the entity image. */ + private static final int IMAGE_TRANSITION_ANIMATION_LENGTH_MS = 300; + private EventListener mEventListener; private View mEntityView; private TextView mSubjectText; @@ -53,6 +61,7 @@ private ImageView mRefineView; private boolean mUseDarkColors; private boolean mUseSuggestionImage; + private Drawable mCurrentImage; /** * Container view for omnibox suggestions allowing soft focus from keyboard. @@ -82,7 +91,6 @@ mEntityImageView = findViewById(R.id.omnibox_entity_image); mEntityView = findViewById(R.id.omnibox_entity); mRefineView = findViewById(R.id.omnibox_entity_refine_icon); - showSearchIcon(); } @@ -145,13 +153,34 @@ } /** - * Specify image to be shown beside suggestion text. - * @param drawable Image to be rendered. + * Specify image bitmap to be shown beside suggestion text. + * Image will be resized and decorated with rounded corners. + * + * @param bitmap Image to be rendered. */ - void setSuggestionImage(Drawable drawable) { + void setSuggestionImage(Bitmap bitmap) { + Resources res = getContext().getResources(); + int edgeLength = res.getDimensionPixelSize(R.dimen.omnibox_suggestion_entity_icon_size); + int radiusLength = res.getDimensionPixelSize(R.dimen.default_rounded_corner_radius); + + Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, edgeLength, edgeLength, true); + RoundedBitmapDrawable roundedDrawable = + RoundedBitmapDrawableFactory.create(res, scaledBitmap); + roundedDrawable.setCornerRadius(radiusLength); mUseSuggestionImage = true; - mEntityImageView.setImageDrawable(drawable); + + Drawable presentedDrawable = roundedDrawable; + + if (mCurrentImage != null && !(mCurrentImage instanceof TransitionDrawable)) { + TransitionDrawable transition = + new TransitionDrawable(new Drawable[] {mCurrentImage, roundedDrawable}); + transition.setCrossFadeEnabled(true); + transition.startTransition(IMAGE_TRANSITION_ANIMATION_LENGTH_MS); + presentedDrawable = transition; + } + mEntityImageView.setImageDrawable(presentedDrawable); mEntityImageView.setScaleType(ImageView.ScaleType.FIT_CENTER); + mCurrentImage = roundedDrawable; } /** @@ -163,6 +192,7 @@ } private void showSearchIcon() { + mCurrentImage = null; mEntityImageView.setImageDrawable(TintedDrawable.constructTintedDrawable(getContext(), R.drawable.ic_suggestion_magnifier, mUseDarkColors ? R.color.default_icon_color_secondary_list
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionViewBinder.java index bb544c67f..44bcf82 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionViewBinder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/entity/EntitySuggestionViewBinder.java
@@ -6,8 +6,6 @@ import android.graphics.Bitmap; import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.ColorDrawable; import android.os.Handler; import android.view.MotionEvent; @@ -78,9 +76,14 @@ int color = model.get(EntitySuggestionViewProperties.IMAGE_DOMINANT_COLOR); if (bitmap != null) { - view.setSuggestionImage(new BitmapDrawable(bitmap)); + view.setSuggestionImage(bitmap); } else if (color != NO_DOMINANT_COLOR) { - view.setSuggestionImage(new ColorDrawable(color)); + // Note: we deliberately don't use ColorDrawable here to allow presenting + // fallback color as a rounded-corners rectangle. + // See EntitySuggestionView#setSuggestionImage for more details. + bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); + bitmap.eraseColor(color); + view.setSuggestionImage(bitmap); } else { view.clearSuggestionImage(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/DoNotTrackPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/DoNotTrackPreference.java index 6aa5237..859a5d61 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/DoNotTrackPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/DoNotTrackPreference.java
@@ -5,40 +5,33 @@ package org.chromium.chrome.browser.preferences.privacy; import android.os.Bundle; -import android.preference.Preference; -import android.preference.Preference.OnPreferenceChangeListener; -import android.preference.PreferenceFragment; +import android.support.v7.preference.PreferenceFragmentCompat; import org.chromium.chrome.R; -import org.chromium.chrome.browser.preferences.ChromeSwitchPreference; +import org.chromium.chrome.browser.preferences.ChromeSwitchPreferenceCompat; import org.chromium.chrome.browser.preferences.PrefServiceBridge; import org.chromium.chrome.browser.preferences.PreferenceUtils; /** * Fragment to manage 'Do Not Track' preference and to explain to the user what it does. */ -public class DoNotTrackPreference extends PreferenceFragment { - +public class DoNotTrackPreference extends PreferenceFragmentCompat { private static final String PREF_DO_NOT_TRACK_SWITCH = "do_not_track_switch"; @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { PreferenceUtils.addPreferencesFromResource(this, R.xml.do_not_track_preferences); getActivity().setTitle(R.string.do_not_track_title); - ChromeSwitchPreference doNotTrackSwitch = - (ChromeSwitchPreference) findPreference(PREF_DO_NOT_TRACK_SWITCH); + ChromeSwitchPreferenceCompat doNotTrackSwitch = + (ChromeSwitchPreferenceCompat) findPreference(PREF_DO_NOT_TRACK_SWITCH); boolean isDoNotTrackEnabled = PrefServiceBridge.getInstance().isDoNotTrackEnabled(); doNotTrackSwitch.setChecked(isDoNotTrackEnabled); - doNotTrackSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - PrefServiceBridge.getInstance().setDoNotTrackEnabled((boolean) newValue); - return true; - } + doNotTrackSwitch.setOnPreferenceChangeListener((preference, newValue) -> { + PrefServiceBridge.getInstance().setDoNotTrackEnabled((boolean) newValue); + return true; }); } }
diff --git a/chrome/android/javatests/AndroidManifest_monochrome.xml b/chrome/android/javatests/AndroidManifest_monochrome.xml index 7ff0d89..2b06c06 100644 --- a/chrome/android/javatests/AndroidManifest_monochrome.xml +++ b/chrome/android/javatests/AndroidManifest_monochrome.xml
@@ -1,24 +1,19 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright 2015 The Chromium Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. --> +{% extends "chrome/android/java/AndroidManifest_monochrome.xml" %} -<!-- package name must be unique. --> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="{{test_manifest_package}}"> +# Copyright 2015 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. - <uses-sdk android:minSdkVersion="{{min_sdk_version}}" android:targetSdkVersion="{{target_sdk_version}}" /> +{% block application_label %}MonochromePublicTest{% endblock %} + +{% block extra_uses_permissions %} <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> <uses-permission android:name="android.permission.READ_LOGS"/> - <uses-permission android:name="android.permission.WAKE_LOCK" /> - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> - <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/> +{% endblock %} - <application android:label="MonochromePublicTest"> - <uses-library android:name="android.test.runner" /> - </application> - +{% block extra_root_definitions %} <instrumentation android:name="org.chromium.base.test.BaseChromiumAndroidJUnitRunner" android:targetPackage="{{manifest_package}}" android:label="Tests for {{manifest_package}}"/> -</manifest> +{% endblock %}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java index 76d09383..e42f42e 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java
@@ -13,11 +13,13 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.Restriction; import org.chromium.base.test.util.RetryOnFailure; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.permissions.PermissionTestRule.PermissionUpdateWaiter; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil; import org.chromium.device.geolocation.LocationProviderOverrider; import org.chromium.device.geolocation.MockLocationProvider; @@ -67,6 +69,7 @@ @Test @MediumTest @CommandLineFlags.Add("disable-features=" + PermissionTestRule.MODAL_FLAG) + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) @Feature({"Location", "Main"}) public void testGeolocationPlumbingAllowedInfoBar() throws Exception { runTest("initiate_getCurrentPosition()", 1, false, false); @@ -104,6 +107,7 @@ @Test @MediumTest @CommandLineFlags.Add("disable-features=" + PermissionTestRule.MODAL_FLAG) + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) @Feature({"Location"}) public void testGeolocationWatchInfoBar() throws Exception { runTest("initiate_watchPosition()", 2, false, false);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MediaTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MediaTest.java index 7d62aa21..35f2deeb 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MediaTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MediaTest.java
@@ -13,11 +13,13 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.Restriction; import org.chromium.base.test.util.RetryOnFailure; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.permissions.PermissionTestRule.PermissionUpdateWaiter; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.content_public.common.ContentSwitches; /** @@ -59,6 +61,7 @@ @MediumTest @Feature({"MediaPermissions", "Main"}) @CommandLineFlags.Add({FAKE_DEVICE, "disable-features=" + PermissionTestRule.MODAL_FLAG}) + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) public void testMicrophonePermissionsPlumbingInfoBar() throws Exception { testMediaPermissionsPlumbing("Mic count:", "initiate_getMicrophone()", 1, false, false); } @@ -83,6 +86,7 @@ @MediumTest @Feature({"MediaPermissions", "Main"}) @CommandLineFlags.Add({FAKE_DEVICE, "disable-features=" + PermissionTestRule.MODAL_FLAG}) + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) public void testCameraPermissionsPlumbingInfoBar() throws Exception { testMediaPermissionsPlumbing("Camera count:", "initiate_getCamera()", 1, false, false); } @@ -109,6 +113,7 @@ @MediumTest @Feature({"MediaPermissions", "Main"}) @CommandLineFlags.Add({FAKE_DEVICE, "disable-features=" + PermissionTestRule.MODAL_FLAG}) + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) public void testCombinedPermissionsPlumbing() throws Exception { testMediaPermissionsPlumbing("Combined count:", "initiate_getCombined()", 1, false, false); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/QuotaTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/QuotaTest.java index 3b9434a4f..f9a2468 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/QuotaTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/QuotaTest.java
@@ -13,11 +13,13 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.Restriction; import org.chromium.base.test.util.RetryOnFailure; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.permissions.PermissionTestRule.PermissionUpdateWaiter; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.util.ChromeRestriction; /** * Test suite for quota permissions requests. @@ -57,6 +59,7 @@ @MediumTest @Feature({"QuotaPermissions"}) @CommandLineFlags.Add("disable-features=" + PermissionTestRule.MODAL_FLAG) + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) public void testQuotaShowsInfobar() throws Exception { testQuotaPermissionsPlumbing("initiate_requestQuota(1024)", 1, false, false); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataTest.java index 8871d686..6f4f237 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataTest.java
@@ -15,6 +15,7 @@ import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.browsing_data.BrowsingDataType; @@ -22,6 +23,7 @@ import org.chromium.chrome.browser.browsing_data.TimePeriod; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.net.test.EmbeddedTestServer; @@ -140,6 +142,7 @@ */ @Test @SmallTest + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) public void testHistoryDeleted() throws Exception { Assert.assertEquals(0, getCookieCount()); mActivityTestRule.loadUrlInNewTab(mUrl);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/PermissionInfoTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/PermissionInfoTest.java index 2831f26e..8a06f77 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/PermissionInfoTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/PermissionInfoTest.java
@@ -17,6 +17,7 @@ import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeSwitches; +import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.util.browser.Features.DisableFeatures; @@ -86,13 +87,17 @@ Assert.assertEquals( ContentSettingValues.ALLOW, getGeolocation(DSE_ORIGIN, null, incognito)); - // Resetting in incognito should not have the same behavior. - incognito = true; - setGeolocation(DSE_ORIGIN, null, ContentSettingValues.BLOCK, incognito); - Assert.assertEquals( - ContentSettingValues.BLOCK, getGeolocation(DSE_ORIGIN, null, incognito)); - setGeolocation(DSE_ORIGIN, null, ContentSettingValues.DEFAULT, incognito); - Assert.assertEquals(ContentSettingValues.ASK, getGeolocation(DSE_ORIGIN, null, incognito)); + // Incognito is not available in touchless mode. + if (!FeatureUtilities.isNoTouchModeEnabled()) { + // Resetting in incognito should not have the same behavior. + incognito = true; + setGeolocation(DSE_ORIGIN, null, ContentSettingValues.BLOCK, incognito); + Assert.assertEquals( + ContentSettingValues.BLOCK, getGeolocation(DSE_ORIGIN, null, incognito)); + setGeolocation(DSE_ORIGIN, null, ContentSettingValues.DEFAULT, incognito); + Assert.assertEquals( + ContentSettingValues.ASK, getGeolocation(DSE_ORIGIN, null, incognito)); + } // Resetting a different top level origin should not have the same behavior incognito = false; @@ -140,16 +145,19 @@ Assert.assertEquals( ContentSettingValues.ALLOW, getNotifications(DSE_ORIGIN, null, incognito)); - // Resetting in incognito should not have the same behavior. - TestThreadUtils.runOnUiThreadBlocking( - () -> WebsitePreferenceBridge.nativeResetNotificationsSettingsForTest()); - incognito = true; - setNotifications(DSE_ORIGIN, null, ContentSettingValues.BLOCK, incognito); - Assert.assertEquals( - ContentSettingValues.BLOCK, getNotifications(DSE_ORIGIN, null, incognito)); - setNotifications(DSE_ORIGIN, null, ContentSettingValues.DEFAULT, incognito); - Assert.assertEquals( - ContentSettingValues.ASK, getNotifications(DSE_ORIGIN, null, incognito)); + // Incognito is not available in touchless mode. + if (!FeatureUtilities.isNoTouchModeEnabled()) { + // Resetting in incognito should not have the same behavior. + TestThreadUtils.runOnUiThreadBlocking( + () -> WebsitePreferenceBridge.nativeResetNotificationsSettingsForTest()); + incognito = true; + setNotifications(DSE_ORIGIN, null, ContentSettingValues.BLOCK, incognito); + Assert.assertEquals( + ContentSettingValues.BLOCK, getNotifications(DSE_ORIGIN, null, incognito)); + setNotifications(DSE_ORIGIN, null, ContentSettingValues.DEFAULT, incognito); + Assert.assertEquals( + ContentSettingValues.ASK, getNotifications(DSE_ORIGIN, null, incognito)); + } // // Resetting a different top level origin should not have the same behavior TestThreadUtils.runOnUiThreadBlocking(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferencesTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferencesTest.java index 3520f258..8ae6b4a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferencesTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferencesTest.java
@@ -18,8 +18,10 @@ import org.junit.Test; import org.junit.runner.RunWith; +import org.chromium.base.ApplicationStatus; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.Restriction; import org.chromium.base.test.util.RetryOnFailure; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeFeatureList; @@ -31,8 +33,10 @@ import org.chromium.chrome.browser.preferences.LocationSettings; import org.chromium.chrome.browser.preferences.PrefServiceBridge; import org.chromium.chrome.browser.preferences.Preferences; +import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.InfoBarTestAnimationListener; import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil; import org.chromium.content_public.browser.test.util.TestThreadUtils; @@ -96,7 +100,7 @@ @Override public InfoBarTestAnimationListener call() throws Exception { InfoBarContainer container = mActivityTestRule.getInfoBarContainer(); - InfoBarTestAnimationListener listener = new InfoBarTestAnimationListener(); + InfoBarTestAnimationListener listener = new InfoBarTestAnimationListener(); container.addAnimationListener(listener); return listener; } @@ -110,6 +114,7 @@ */ @Test @SmallTest + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) @CommandLineFlags.Add("disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS) @Feature({"Preferences"}) public void testSetAllowLocationEnabled() throws Exception { @@ -131,6 +136,7 @@ */ @Test @SmallTest + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) @CommandLineFlags.Add("disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS) @Feature({"Preferences"}) public void testSetAllowLocationNotEnabled() throws Exception { @@ -157,9 +163,11 @@ (ChromeBaseCheckBoxPreference) websitePreferences.findPreference( SingleCategoryPreferences.THIRD_PARTY_COOKIES_TOGGLE_KEY); - Assert.assertEquals("Third-party cookie toggle should be " - + (doesAcceptCookies() ? "enabled" : " disabled"), - doesAcceptCookies(), thirdPartyCookies.isEnabled()); + if (thirdPartyCookies != null) { + Assert.assertEquals("Third-party cookie toggle should be " + + (doesAcceptCookies() ? "enabled" : " disabled"), + doesAcceptCookies(), thirdPartyCookies.isEnabled()); + } websitePreferences.onPreferenceChange(cookies, enabled); Assert.assertEquals("Cookies should be " + (enabled ? "allowed" : "blocked"), doesAcceptCookies(), enabled); @@ -266,6 +274,7 @@ @Test @SmallTest @Feature({"Preferences"}) + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) public void testThirdPartyCookieToggleGetsDisabled() throws Exception { Preferences preferenceActivity = SiteSettingsTestUtils.startSiteSettingsCategory(SiteSettingsCategory.Type.COOKIES); @@ -395,12 +404,18 @@ @Feature({"Preferences"}) public void testPopupsBlocked() throws Exception { setEnablePopups(false); + int activitiesCount = ApplicationStatus.getRunningActivities().size(); // Test that the popup doesn't open. mActivityTestRule.loadUrl(mTestServer.getURL("/chrome/test/data/android/popup.html")); - InstrumentationRegistry.getInstrumentation().waitForIdleSync(); - Assert.assertEquals(1, getTabCount()); + + if (FeatureUtilities.isNoTouchModeEnabled()) { + // Popups open in a new activity in touchless mode. + Assert.assertEquals(ApplicationStatus.getRunningActivities().size(), activitiesCount); + } else { + Assert.assertEquals(1, getTabCount()); + } } /** @@ -412,12 +427,19 @@ @Feature({"Preferences"}) public void testPopupsNotBlocked() throws Exception { setEnablePopups(true); + int activitiesCount = ApplicationStatus.getRunningActivities().size(); // Test that a popup opens. mActivityTestRule.loadUrl(mTestServer.getURL("/chrome/test/data/android/popup.html")); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); - Assert.assertEquals(2, getTabCount()); + if (FeatureUtilities.isNoTouchModeEnabled()) { + // Popups open in a new activity in touchless mode. + Assert.assertEquals( + 1, ApplicationStatus.getRunningActivities().size() - activitiesCount); + } else { + Assert.assertEquals(2, getTabCount()); + } } /** @@ -610,6 +632,7 @@ @Test @SmallTest @Feature({"Preferences"}) + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) @CommandLineFlags.Add({ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM, "disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS}) public void testCameraNotBlocked() throws Exception { @@ -636,6 +659,7 @@ @Test @SmallTest @Feature({"Preferences"}) + @Restriction({ChromeRestriction.RESTRICTION_TYPE_REQUIRES_TOUCH}) @CommandLineFlags.Add({ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM, "disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS}) public void testMicNotBlocked() throws Exception {
diff --git a/chrome/android/touchless/fallback/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java b/chrome/android/touchless/fallback/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java index 5a551ff..86f5e0b 100644 --- a/chrome/android/touchless/fallback/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java +++ b/chrome/android/touchless/fallback/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java
@@ -43,4 +43,8 @@ ModalDialogProperties.Controller controller, PermissionDialogDelegate delegate) { return null; } + + public static TouchlessUiCoordinator getTouchlessUiCoordinator(ChromeActivity activity) { + return null; + } }
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java index 15031a4..e97b9eae 100644 --- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java +++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java
@@ -44,4 +44,8 @@ ModalDialogProperties.Controller controller, PermissionDialogDelegate delegate) { return TouchlessPermissionDialogModel.getModel(controller, delegate); } + + public static TouchlessUiCoordinator getTouchlessUiCoordinator(ChromeActivity activity) { + return new TouchlessUiCoordinatorImpl(activity); + } }
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessPreferences.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessPreferences.java index 2298460..9d5d9f5 100644 --- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessPreferences.java +++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessPreferences.java
@@ -29,7 +29,9 @@ mTouchlessModelCoordinator = AppHooks.get().createTouchlessModelCoordinator(this); mDialogModel = new PropertyModel.Builder(TouchlessDialogProperties.MINIMAL_DIALOG_KEYS).build(); - mTouchlessModelCoordinator.addModelToQueue(mDialogModel); + if (mTouchlessModelCoordinator != null) { + mTouchlessModelCoordinator.addModelToQueue(mDialogModel); + } } @Override
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessUiCoordinatorImpl.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessUiCoordinatorImpl.java index 8e56e066..1a0c918 100644 --- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessUiCoordinatorImpl.java +++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessUiCoordinatorImpl.java
@@ -102,8 +102,14 @@ @Override public ModalDialogManager createModalDialogManager() { - return new ModalDialogManager( - new TouchlessDialogPresenter(mActivity, mModelCoordinator), ModalDialogType.APP); + TouchlessDialogPresenter dialogPresenter = + new TouchlessDialogPresenter(mActivity, mModelCoordinator); + ModalDialogManager modalDialogManager = + new ModalDialogManager(dialogPresenter, ModalDialogType.APP); + // Some tests need a presenter for ModalDialogType.TAB. Refer to + // PermissionTestRule$DialogShownCriteria#isSatisfied. + modalDialogManager.registerPresenter(dialogPresenter, ModalDialogType.TAB); + return modalDialogManager; } protected TouchlessModelCoordinator getModelCoordinator() {
diff --git a/chrome/android/touchless/java/strings/touchless_strings.grd b/chrome/android/touchless/java/strings/touchless_strings.grd index 232e869..d22d530 100644 --- a/chrome/android/touchless/java/strings/touchless_strings.grd +++ b/chrome/android/touchless/java/strings/touchless_strings.grd
@@ -126,7 +126,7 @@ Now </message> <message name="IDS_NTP_ALL_APPS" desc="Text to accompany icon that will navigate to a page showing a categorized view of different applications or sites"> - All apps + Explore apps </message> <message name="IDS_MORE_ARTICLES" desc="Message at the bottom of a list of news items prompting the user to load more."> More articles
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index 97d857a..d2bbd9c 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -3282,6 +3282,15 @@ <message name="IDS_SUPERVISION_ONBOARDING_BACK_BUTTON" desc="Label for button that shows the previous page in the Supervision Onboarding flow."> Back </message> + <message name="IDS_SUPERVISION_ONBOARDING_RETRY_BUTTON" desc="Label for button that tries to load again a page in the Supervision Onboarding flow."> + Try again + </message> + <message name="IDS_SUPERVISION_ONBOARDING_RETRY_DIALOG_TITLE" desc="Label for title of a dialog shown when there's an error loading a Supervision Onboarding page."> + Something went wrong + </message> + <message name="IDS_SUPERVISION_ONBOARDING_RETRY_DIALOG_MESSAGE" desc="Message for a dialog shown when there's an error loading a Supervision Onboarding page."> + Try again later + </message> <message name="IDS_SUPERVISION_ONBOARDING_WAIT_MESSAGE" desc="Message shown while we load the Supervision Onboarding flow."> Please wait... </message>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 57758860..b47d1556 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -2883,6 +2883,8 @@ "download/download_shelf_controller.h", "enterprise_reporting/prefs.cc", "enterprise_reporting/prefs.h", + "enterprise_reporting/profile_report_generator.cc", + "enterprise_reporting/profile_report_generator.h", "enterprise_reporting/report_scheduler.cc", "enterprise_reporting/report_scheduler.h", "enterprise_reporting/report_uploader.cc", @@ -3377,6 +3379,7 @@ "//chrome/browser/resources:component_extension_resources", "//chrome/browser/search:generated", "//chrome/common/importer:interfaces", + "//chrome/common/themes:autogenerated_theme_util", "//chrome/services/app_service:lib", "//chrome/services/app_service/public/cpp:app_service_proxy", "//chrome/services/app_service/public/cpp:app_update",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index a1a503f..ec75847 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -84,6 +84,7 @@ #include "components/previews/core/previews_switches.h" #include "components/printing/browser/features.h" #include "components/safe_browsing/features.h" +#include "components/security_interstitials/core/features.h" #include "components/security_state/core/features.h" #include "components/security_state/core/security_state.h" #include "components/send_tab_to_self/features.h" @@ -3917,6 +3918,12 @@ flag_descriptions::kEvDetailsInPageInfoDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kEvDetailsInPageInfo)}, + {"security-interstitials-dark-mode", + flag_descriptions::kSecurityInterstitialsDarkModeName, + flag_descriptions::kSecurityInterstitialsDarkModeDescription, kOsAll, + FEATURE_VALUE_TYPE( + security_interstitials::kSecurityInterstitialsDarkMode)}, + {"enable-autofill-credit-card-upload-feedback", flag_descriptions::kEnableAutofillCreditCardUploadFeedbackName, flag_descriptions::kEnableAutofillCreditCardUploadFeedbackDescription,
diff --git a/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm b/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm index 5a22b34..1b8d8a3 100644 --- a/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm +++ b/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm
@@ -301,12 +301,21 @@ namespace apps { +// Shims require static libraries http://crbug.com/386024. +#if defined(COMPONENT_BUILD) +#define MAYBE_Launch DISABLED_Launch +#define MAYBE_HostedAppLaunch DISABLED_HostedAppLaunch +#define MAYBE_ShowWindow DISABLED_ShowWindow +#define MAYBE_RebuildShim DISABLED_RebuildShim +#else #define MAYBE_Launch DISABLED_Launch // http://crbug.com/913490 #define MAYBE_HostedAppLaunch DISABLED_HostedAppLaunch +#define MAYBE_ShowWindow ShowWindow // http://crbug.com/517744 HostedAppLaunch fails with open as tab for apps // http://crbug.com/509774 this test is flaky so is disabled even in the // static build. #define MAYBE_RebuildShim DISABLED_RebuildShim +#endif IN_PROC_BROWSER_TEST_F(AppShimInteractiveTest, MAYBE_HostedAppLaunch) { const extensions::Extension* app = InstallAppWithShim(APP_TYPE_HOSTED, ""); @@ -457,7 +466,7 @@ // Test that the shim's lifetime depends on the visibility of windows. I.e. the // shim is only active when there are visible windows. -IN_PROC_BROWSER_TEST_F(AppShimInteractiveTest, ShowWindow) { +IN_PROC_BROWSER_TEST_F(AppShimInteractiveTest, MAYBE_ShowWindow) { const extensions::Extension* app = InstallAppWithShim(APP_TYPE_PACKAGED, "hidden"); NSString* bundle_id = GetBundleID(shim_path_);
diff --git a/chrome/browser/apps/app_shim/extension_app_shim_handler_mac.cc b/chrome/browser/apps/app_shim/extension_app_shim_handler_mac.cc index 56f5522..ccf9324 100644 --- a/chrome/browser/apps/app_shim/extension_app_shim_handler_mac.cc +++ b/chrome/browser/apps/app_shim/extension_app_shim_handler_mac.cc
@@ -227,10 +227,6 @@ DISALLOW_COPY_AND_ASSIGN(EnableViaPrompt); }; -bool UsesRemoteViews(const extensions::Extension* extension) { - return extension->is_hosted_app() && extension->from_bookmark(); -} - } // namespace namespace apps { @@ -303,7 +299,7 @@ Profile* profile, const extensions::Extension* extension) { return new AppShimHost(extension->id(), profile->GetPath(), - UsesRemoteViews(extension)); + extension->is_hosted_app()); } void ExtensionAppShimHandler::Delegate::EnableExtension( @@ -342,10 +338,7 @@ bool recreate_shims, apps::ShimLaunchedCallback launched_callback, apps::ShimTerminatedCallback terminated_callback) { - // Only force recreation of shims when RemoteViews is in use (that is, for - // PWAs). Otherwise, shims may be created unexpectedly. - // https://crbug.com/941160 - if (recreate_shims && UsesRemoteViews(extension)) { + if (recreate_shims) { // Load the resources needed to build the app shim (icons, etc), and then // recreate the shim and launch it. web_app::GetShortcutInfoForApp(
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 701de951..afb72423 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -2028,6 +2028,8 @@ "tpm_firmware_update.h", "tpm_firmware_update_notification.cc", "tpm_firmware_update_notification.h", + "u2f_notification.cc", + "u2f_notification.h", "ui/echo_dialog_listener.h", "ui/echo_dialog_view.cc", "ui/echo_dialog_view.h",
diff --git a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc index 2f473e08..5da1670 100644 --- a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc +++ b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc
@@ -306,10 +306,6 @@ return nullptr; } -bool AXTreeSourceArc::IsIgnored(ArcAccessibilityInfoData* info_data) const { - return false; -} - bool AXTreeSourceArc::IsValid(ArcAccessibilityInfoData* info_data) const { return info_data; }
diff --git a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h index 504651c..e85531f 100644 --- a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h +++ b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h
@@ -97,7 +97,6 @@ void GetChildren( ArcAccessibilityInfoData* info_data, std::vector<ArcAccessibilityInfoData*>* out_children) const override; - bool IsIgnored(ArcAccessibilityInfoData* info_data) const override; bool IsValid(ArcAccessibilityInfoData* info_data) const override; bool IsEqual(ArcAccessibilityInfoData* info_data1, ArcAccessibilityInfoData* info_data2) const override;
diff --git a/chrome/browser/chromeos/login/lock/screen_locker_unittest.cc b/chrome/browser/chromeos/login/lock/screen_locker_unittest.cc index 8dd0533..66cf643 100644 --- a/chrome/browser/chromeos/login/lock/screen_locker_unittest.cc +++ b/chrome/browser/chromeos/login/lock/screen_locker_unittest.cc
@@ -4,6 +4,8 @@ #include "chrome/browser/chromeos/login/lock/screen_locker.h" +#include <memory> + #include "ash/public/cpp/login_screen_model.h" #include "ash/public/cpp/login_types.h" #include "base/macros.h" @@ -16,6 +18,7 @@ #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" #include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h" #include "chrome/browser/ui/ash/accessibility/fake_accessibility_controller.h" +#include "chrome/browser/ui/ash/assistant/assistant_client.h" #include "chrome/browser/ui/ash/login_screen_client.h" #include "chrome/browser/ui/ash/session_controller_client_impl.h" #include "chrome/browser/ui/ash/test_login_screen.h" @@ -67,6 +70,9 @@ std::make_unique<SessionControllerClientImpl>(); session_controller_client_->Init(); + // Initialize AssistantClient: + assistant_client_ = std::make_unique<AssistantClient>(); + // Initialize AccessibilityManager and dependencies: observer_ = std::make_unique<audio::TestObserver>((base::DoNothing())); audio::AudioStreamHandler::SetObserverForTesting(observer_.get()); @@ -95,6 +101,7 @@ void TearDown() override { input_method::InputMethodManager::Shutdown(); audio::SoundsManager::Shutdown(); + assistant_client_.reset(); session_controller_client_.reset(); LoginState::Shutdown(); CryptohomeClient::Shutdown(); @@ -137,6 +144,7 @@ ScopedDeviceSettingsTestHelper device_settings_test_helper_; TestSessionController test_session_controller_; std::unique_ptr<SessionControllerClientImpl> session_controller_client_; + std::unique_ptr<AssistantClient> assistant_client_; std::unique_ptr<audio::TestObserver> observer_; DISALLOW_COPY_AND_ASSIGN(ScreenLockerUnitTest);
diff --git a/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc b/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc index 905e40a..40942958 100644 --- a/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc +++ b/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc
@@ -560,9 +560,7 @@ HandleAppDownloadingScreen(); } - if (test_setup()->arc_state() != ArcState::kNotAvailable) { - HandleAssistantOptInScreen(); - } + HandleAssistantOptInScreen(); WaitForLoginDisplayHostShutdown(); } @@ -774,9 +772,7 @@ HandleAppDownloadingScreen(); } - if (test_setup()->arc_state() != ArcState::kNotAvailable) { - HandleAssistantOptInScreen(); - } + HandleAssistantOptInScreen(); WaitForActiveSession(); }
diff --git a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc index 2494dcfb..de850a2 100644 --- a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc +++ b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.h" #include "chrome/browser/chromeos/assistant/assistant_util.h" +#include "chrome/browser/chromeos/login/users/chrome_user_manager_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.h" @@ -38,6 +39,11 @@ if (!view_) return; + if (chrome_user_manager_util::IsPublicSessionOrEphemeralLogin()) { + exit_callback_.Run(); + return; + } + #if BUILDFLAG(ENABLE_CROS_ASSISTANT) if (chromeos::switches::IsAssistantEnabled() && ::assistant::IsAssistantAllowedForProfile(
diff --git a/chrome/browser/chromeos/login/screens/supervision_onboarding_screen_browsertest.cc b/chrome/browser/chromeos/login/screens/supervision_onboarding_screen_browsertest.cc index 48e3674..dc6ea70 100644 --- a/chrome/browser/chromeos/login/screens/supervision_onboarding_screen_browsertest.cc +++ b/chrome/browser/chromeos/login/screens/supervision_onboarding_screen_browsertest.cc
@@ -143,6 +143,10 @@ {features::kSupervisionOnboardingEligibility, features::kSupervisionOnboardingScreens}, {}); + } else { + feature_list_.InitWithFeatures( + {}, {features::kSupervisionOnboardingEligibility, + features::kSupervisionOnboardingScreens}); } MixinBasedInProcessBrowserTest::SetUp(); @@ -150,10 +154,6 @@ void SetUpCommandLine(base::CommandLine* command_line) override { if (IsFeatureOn()) { - command_line->AppendSwitchASCII( - switches::kSupervisionOnboardingUrlPrefix, - embedded_test_server()->base_url().spec()); - // To turn on the feature properly we also ask the server to return the // expected custom http header value. Tests that want to simulate other // server responses can call these methods again to override this @@ -162,6 +162,12 @@ supervision::kDeviceOnboardingExperimentName); } + // Even with the feature turned off we need to override the server url. + // Otherwise tests that end up pinging the server (but shouldn't) will + // only timeout instead of failing for the correct reason. + command_line->AppendSwitchASCII(switches::kSupervisionOnboardingUrlPrefix, + embedded_test_server()->base_url().spec()); + MixinBasedInProcessBrowserTest::SetUpCommandLine(command_line); }
diff --git a/chrome/browser/chromeos/login/session/chrome_session_manager.cc b/chrome/browser/chromeos/login/session/chrome_session_manager.cc index fd0fb56..d818255 100644 --- a/chrome/browser/chromeos/login/session/chrome_session_manager.cc +++ b/chrome/browser/chromeos/login/session/chrome_session_manager.cc
@@ -35,6 +35,7 @@ #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/chromeos/tether/tether_service.h" #include "chrome/browser/chromeos/tpm_firmware_update_notification.h" +#include "chrome/browser/chromeos/u2f_notification.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/ui/app_list/app_list_client_impl.h" @@ -195,6 +196,7 @@ UserSessionManager::GetInstance()->CheckEolStatus(user_profile); tpm_firmware_update::ShowNotificationIfNeeded(user_profile); + UserSessionManager::GetInstance()->MaybeShowU2FNotification(); g_browser_process->platform_part() ->browser_policy_connector_chromeos() ->GetTPMAutoUpdateModePolicyHandler()
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc index 6b8b4e1..54e5e1d 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -81,6 +81,7 @@ #include "chrome/browser/chromeos/settings/cros_settings.h" #include "chrome/browser/chromeos/tether/tether_service.h" #include "chrome/browser/chromeos/tpm_firmware_update_notification.h" +#include "chrome/browser/chromeos/u2f_notification.h" #include "chrome/browser/component_updater/crl_set_component_installer.h" #include "chrome/browser/component_updater/sth_set_component_remover.h" #include "chrome/browser/first_run/first_run.h" @@ -2179,6 +2180,9 @@ // and show the message accordingly. tpm_firmware_update::ShowNotificationIfNeeded(profile); + // Show legacy U2F notification if applicable. + MaybeShowU2FNotification(); + g_browser_process->platform_part() ->browser_policy_connector_chromeos() ->GetTPMAutoUpdateModePolicyHandler() @@ -2289,6 +2293,7 @@ token_handle_util_.reset(); first_run::GoodiesDisplayer::Delete(); always_on_vpn_manager_.reset(); + u2f_notification_.reset(); } void UserSessionManager::SetSwitchesForUser( @@ -2311,6 +2316,13 @@ all_switches); } +void UserSessionManager::MaybeShowU2FNotification() { + if (!u2f_notification_) { + u2f_notification_ = std::make_unique<U2FNotification>(); + u2f_notification_->Check(); + } +} + void UserSessionManager::CreateTokenUtilIfMissing() { if (!token_handle_util_.get()) token_handle_util_.reset(new TokenHandleUtil());
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.h b/chrome/browser/chromeos/login/session/user_session_manager.h index 7aa0b09..ed6318e0 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.h +++ b/chrome/browser/chromeos/login/session/user_session_manager.h
@@ -28,6 +28,7 @@ #include "chrome/browser/chromeos/login/signin/oauth2_login_manager.h" #include "chrome/browser/chromeos/login/signin/token_handle_util.h" #include "chrome/browser/chromeos/settings/cros_settings.h" +#include "chrome/browser/chromeos/u2f_notification.h" #include "chromeos/dbus/session_manager/session_manager_client.h" #include "chromeos/login/auth/authenticator.h" #include "chromeos/login/auth/user_context.h" @@ -312,6 +313,9 @@ // password from the UserContext regardless of the value of |send_password|. void OnUserNetworkPolicyParsed(bool send_password); + // Shows U2F notification if necessary. + void MaybeShowU2FNotification(); + private: friend class test::UserSessionManagerTestApi; friend struct base::DefaultSingletonTraits<UserSessionManager>; @@ -611,6 +615,8 @@ std::unique_ptr<ChildPolicyObserver> child_policy_observer_; + std::unique_ptr<U2FNotification> u2f_notification_; + base::WeakPtrFactory<UserSessionManager> weak_factory_; DISALLOW_COPY_AND_ASSIGN(UserSessionManager);
diff --git a/chrome/browser/chromeos/login/sync_consent_interactive_ui_test.cc b/chrome/browser/chromeos/login/sync_consent_interactive_ui_test.cc index 54ee52b..aaf53eac 100644 --- a/chrome/browser/chromeos/login/sync_consent_interactive_ui_test.cc +++ b/chrome/browser/chromeos/login/sync_consent_interactive_ui_test.cc
@@ -7,6 +7,7 @@ #include "base/macros.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "base/test/scoped_feature_list.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/login/screens/sync_consent_screen.h" @@ -20,6 +21,7 @@ #include "chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" #include "chrome/grit/generated_resources.h" +#include "chromeos/constants/chromeos_switches.h" #include "content/public/browser/notification_service.h" #include "content/public/test/test_utils.h" #include "ui/base/l10n/l10n_util.h" @@ -261,6 +263,17 @@ // we use WithParamInterface<bool> here. class SyncConsentPolicyDisabledTest : public SyncConsentTest, public testing::WithParamInterface<bool> { + public: + SyncConsentPolicyDisabledTest() { + // Assistant feature contains an OOBE page which is irrelevant for this + // test. + feature_list_.InitAndDisableFeature(switches::kAssistantFeature); + } + ~SyncConsentPolicyDisabledTest() = default; + + private: + base::test::ScopedFeatureList feature_list_; + DISALLOW_COPY_AND_ASSIGN(SyncConsentPolicyDisabledTest); }; IN_PROC_BROWSER_TEST_P(SyncConsentPolicyDisabledTest,
diff --git a/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc b/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc index 661c61a0..e4d20da 100644 --- a/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc +++ b/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc
@@ -64,7 +64,7 @@ views::View* forward, views::View* reload, views::View* location_bar) { - GridLayout* layout = SetLayoutManager(std::make_unique<GridLayout>(this)); + GridLayout* layout = SetLayoutManager(std::make_unique<GridLayout>()); const int related_horizontal_spacing = ChromeLayoutProvider::Get()->GetDistanceMetric( @@ -200,7 +200,7 @@ toolbar_row->Init(back_, forward_, reload_, location_bar_); // Layout. - GridLayout* layout = SetLayoutManager(std::make_unique<GridLayout>(this)); + GridLayout* layout = SetLayoutManager(std::make_unique<GridLayout>()); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
diff --git a/chrome/browser/chromeos/settings/device_oauth2_token_service_delegate.cc b/chrome/browser/chromeos/settings/device_oauth2_token_service_delegate.cc index f580516..e62e7df 100644 --- a/chrome/browser/chromeos/settings/device_oauth2_token_service_delegate.cc +++ b/chrome/browser/chromeos/settings/device_oauth2_token_service_delegate.cc
@@ -88,13 +88,9 @@ accounts.end(); } -std::vector<std::string> DeviceOAuth2TokenServiceDelegate::GetAccounts() { - return static_cast<const DeviceOAuth2TokenServiceDelegate&>(*this) - .GetAccounts(); -} - -std::vector<std::string> DeviceOAuth2TokenServiceDelegate::GetAccounts() const { - std::vector<std::string> accounts; +std::vector<CoreAccountId> DeviceOAuth2TokenServiceDelegate::GetAccounts() + const { + std::vector<CoreAccountId> accounts; switch (state_) { case STATE_NO_TOKEN: case STATE_TOKEN_INVALID:
diff --git a/chrome/browser/chromeos/settings/device_oauth2_token_service_delegate.h b/chrome/browser/chromeos/settings/device_oauth2_token_service_delegate.h index 56e70a5..7015ab8 100644 --- a/chrome/browser/chromeos/settings/device_oauth2_token_service_delegate.h +++ b/chrome/browser/chromeos/settings/device_oauth2_token_service_delegate.h
@@ -61,7 +61,7 @@ scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, OAuth2AccessTokenConsumer* consumer) override; - std::vector<std::string> GetAccounts() override; + std::vector<CoreAccountId> GetAccounts() const override; // gaia::GaiaOAuthClient::Delegate implementation. void OnRefreshTokenResponse(const std::string& access_token, @@ -96,8 +96,6 @@ STATE_TOKEN_VALID, }; - std::vector<std::string> GetAccounts() const; - // Invoked by CrosSettings when the robot account ID becomes available. void OnServiceAccountIdentityChanged();
diff --git a/chrome/browser/chromeos/settings/device_settings_provider.cc b/chrome/browser/chromeos/settings/device_settings_provider.cc index 66a3a6c7..dd152f6 100644 --- a/chrome/browser/chromeos/settings/device_settings_provider.cc +++ b/chrome/browser/chromeos/settings/device_settings_provider.cc
@@ -88,6 +88,7 @@ kDeviceQuirksDownloadEnabled, kDeviceRebootOnUserSignout, kDeviceScheduledUpdateCheck, + kDeviceSecondFactorAuthenticationMode, kDeviceUnaffiliatedCrostiniAllowed, kDeviceWiFiAllowed, kDeviceWilcoDtcAllowed, @@ -801,6 +802,13 @@ kDeviceDockMacAddressSource, policy.device_dock_mac_address_source().source()); } + + if (policy.has_device_second_factor_authentication() && + policy.device_second_factor_authentication().has_mode()) { + new_values_cache->SetInteger( + kDeviceSecondFactorAuthenticationMode, + policy.device_second_factor_authentication().mode()); + } } void DecodeLogUploadPolicies(const em::ChromeDeviceSettingsProto& policy,
diff --git a/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc b/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc index 4372e66..93985de 100644 --- a/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc +++ b/chrome/browser/chromeos/settings/device_settings_provider_unittest.cc
@@ -194,7 +194,7 @@ } void VerifyPolicyValue(const char* policy_key, - const base::Value* const ptr_to_expected_value) { + const base::Value* ptr_to_expected_value) { // The pointer might be null, so check before dereferencing. if (ptr_to_expected_value) EXPECT_EQ(*ptr_to_expected_value, *provider_->Get(policy_key)); @@ -211,8 +211,7 @@ } // Helper routine to check value of the LoginScreenDomainAutoComplete policy. - void VerifyDomainAutoComplete( - const base::Value* const ptr_to_expected_value) { + void VerifyDomainAutoComplete(const base::Value* ptr_to_expected_value) { VerifyPolicyValue(kAccountsPrefLoginScreenDomainAutoComplete, ptr_to_expected_value); } @@ -289,7 +288,7 @@ // Helper routine that sets the device DeviceWilcoDtcAllowed policy. void SetDeviceWilcoDtcAllowedSetting(bool device_wilco_dtc_allowed) { - em::DeviceWilcoDtcAllowedProto* const proto = + em::DeviceWilcoDtcAllowedProto* proto = device_policy_->payload().mutable_device_wilco_dtc_allowed(); proto->set_device_wilco_dtc_allowed(device_wilco_dtc_allowed); BuildAndInstallDevicePolicy(); @@ -298,12 +297,20 @@ void SetDeviceDockMacAddressSourceSetting( em::DeviceDockMacAddressSourceProto::Source device_dock_mac_address_source) { - em::DeviceDockMacAddressSourceProto* const proto = + em::DeviceDockMacAddressSourceProto* proto = device_policy_->payload().mutable_device_dock_mac_address_source(); proto->set_source(device_dock_mac_address_source); BuildAndInstallDevicePolicy(); } + void SetDeviceSecondFactorAuthenticationModeSetting( + em::DeviceSecondFactorAuthenticationProto::U2fMode mode) { + em::DeviceSecondFactorAuthenticationProto* proto = + device_policy_->payload().mutable_device_second_factor_authentication(); + proto->set_mode(mode); + BuildAndInstallDevicePolicy(); + } + ScopedTestingLocalState local_state_; std::unique_ptr<DeviceSettingsProvider> provider_; @@ -793,4 +800,29 @@ EXPECT_EQ(base::Value(3), *provider_->Get(kDeviceDockMacAddressSource)); } +TEST_F(DeviceSettingsProviderTest, + DeviceSecondFactorAuthenticationModeSetting) { + VerifyPolicyValue(kDeviceSecondFactorAuthenticationMode, nullptr); + + SetDeviceSecondFactorAuthenticationModeSetting( + em::DeviceSecondFactorAuthenticationProto::UNSET); + EXPECT_EQ(base::Value(0), + *provider_->Get(kDeviceSecondFactorAuthenticationMode)); + + SetDeviceSecondFactorAuthenticationModeSetting( + em::DeviceSecondFactorAuthenticationProto::DISABLED); + EXPECT_EQ(base::Value(1), + *provider_->Get(kDeviceSecondFactorAuthenticationMode)); + + SetDeviceSecondFactorAuthenticationModeSetting( + em::DeviceSecondFactorAuthenticationProto::U2F); + EXPECT_EQ(base::Value(2), + *provider_->Get(kDeviceSecondFactorAuthenticationMode)); + + SetDeviceSecondFactorAuthenticationModeSetting( + em::DeviceSecondFactorAuthenticationProto::U2F_EXTENDED); + EXPECT_EQ(base::Value(3), + *provider_->Get(kDeviceSecondFactorAuthenticationMode)); +} + } // namespace chromeos
diff --git a/chrome/browser/chromeos/supervision/mojom/onboarding_controller.mojom b/chrome/browser/chromeos/supervision/mojom/onboarding_controller.mojom index e81638a..5de9f7a 100644 --- a/chrome/browser/chromeos/supervision/mojom/onboarding_controller.mojom +++ b/chrome/browser/chromeos/supervision/mojom/onboarding_controller.mojom
@@ -16,6 +16,9 @@ // The user wants to go back/forward in the flow. kShowNextPage, kShowPreviousPage, + + // Tries to execute the page load again. + kRetryPageLoad, }; struct OnboardingPage { @@ -45,9 +48,9 @@ // The flow is ready, the webview can be shown. kReady, - // TODO(crbug.com/958995): Add an error state, where we can show retry - // actions and stop showing the webview. At the moment we simply end the flow - // when we find errors. + // The page load failed, so we present a screen that tells that something + // went wrong and display a retry button. + kPageLoadFailed, }; // Describes how the flow should be presented at a given point. @@ -58,6 +61,7 @@ bool can_show_next_page; bool can_show_previous_page; bool can_skip_flow; + bool can_retry_page_load; }; // Represents a webview host, responsible for displaying supervision
diff --git a/chrome/browser/chromeos/supervision/onboarding_controller_impl_unittest.cc b/chrome/browser/chromeos/supervision/onboarding_controller_impl_unittest.cc index bf63440..1e49684 100644 --- a/chrome/browser/chromeos/supervision/onboarding_controller_impl_unittest.cc +++ b/chrome/browser/chromeos/supervision/onboarding_controller_impl_unittest.cc
@@ -306,7 +306,6 @@ mojom::OnboardingLoadPageResult result; result.net_error = return_error ? net::Error::ERR_FAILED : net::Error::OK; - result.custom_header_value = kDeviceOnboardingExperimentName; SetUpPageLoad(result); } @@ -323,7 +322,6 @@ HandleAction(mojom::OnboardingAction::kShowNextPage); mojom::OnboardingLoadPageResult result; result.net_error = return_error ? net::Error::ERR_FAILED : net::Error::OK; - result.custom_header_value = kDeviceOnboardingExperimentName; SetUpPageLoad(result); } @@ -389,19 +387,23 @@ profile()->GetPrefs()->GetBoolean(ash::prefs::kKioskNextShellEligible)); } -TEST_F(OnboardingControllerTest, ExitFlowOnAuthError) { +TEST_F(OnboardingControllerTest, StayInFlowOnAuthError) { BindHostAndSetupFailedAuth(); EXPECT_FALSE(webview_host()->page_loaded().has_value()); - EXPECT_TRUE(delegate()->skipped_onboarding()); + EXPECT_FALSE(delegate()->skipped_onboarding()); } -TEST_F(OnboardingControllerTest, PresentOnlyLoadingStateOnAuthError) { +TEST_F(OnboardingControllerTest, PresentRetryStateOnAuthError) { BindHostAndSetupFailedAuth(); mojom::OnboardingPresentation loading; loading.state = mojom::OnboardingPresentationState::kLoading; - webview_host()->ExpectPresentations({loading}); + + mojom::OnboardingPresentation retry; + retry.state = mojom::OnboardingPresentationState::kPageLoadFailed; + retry.can_retry_page_load = true; + webview_host()->ExpectPresentations({loading, retry}); } TEST_F(OnboardingControllerTest, SetNotEligibleForKioskNextOnAuthError) { @@ -411,18 +413,58 @@ profile()->GetPrefs()->GetBoolean(ash::prefs::kKioskNextShellEligible)); } -TEST_F(OnboardingControllerTest, ExitFlowOnLoadPageError) { +TEST_F(OnboardingControllerTest, StayInFlowOnLoadPageError) { BindHostAndReturnLoadPageError(); - EXPECT_TRUE(delegate()->skipped_onboarding()); + EXPECT_FALSE(delegate()->skipped_onboarding()); + EXPECT_FALSE(delegate()->finished_onboarding()); } -TEST_F(OnboardingControllerTest, PresentOnlyLoadingStateOnLoadPageError) { +TEST_F(OnboardingControllerTest, PresentRetryStateOnLoadPageError) { BindHostAndReturnLoadPageError(); mojom::OnboardingPresentation loading; loading.state = mojom::OnboardingPresentationState::kLoading; - webview_host()->ExpectPresentations({loading}); + + mojom::OnboardingPresentation retry; + retry.state = mojom::OnboardingPresentationState::kPageLoadFailed; + retry.can_retry_page_load = true; + webview_host()->ExpectPresentations({loading, retry}); +} + +TEST_F(OnboardingControllerTest, PresentSkipButtonIfLoadFailsTooManyTimes) { + BindHostAndReturnLoadPageError(); + + mojom::OnboardingLoadPageResult result; + result.net_error = net::Error::ERR_FAILED; + HandleAction(mojom::OnboardingAction::kRetryPageLoad); + SetUpPageLoad(result); + HandleAction(mojom::OnboardingAction::kRetryPageLoad); + SetUpPageLoad(result); + + mojom::OnboardingPresentation loading; + loading.state = mojom::OnboardingPresentationState::kLoading; + + mojom::OnboardingPresentation retry; + retry.state = mojom::OnboardingPresentationState::kPageLoadFailed; + retry.can_retry_page_load = true; + + mojom::OnboardingPresentation retry_with_skip; + retry_with_skip.state = mojom::OnboardingPresentationState::kPageLoadFailed; + retry_with_skip.can_retry_page_load = true; + retry_with_skip.can_skip_flow = true; + + webview_host()->ExpectPresentations({ + // First try. + loading, + retry, + // Second try. + loading, + retry, + // On the third try we now show the skip button. + loading, + retry_with_skip, + }); } TEST_F(OnboardingControllerTest, SetNotEligibleForKioskNextOnLoadPageError) { @@ -480,6 +522,14 @@ profile()->GetPrefs()->GetBoolean(ash::prefs::kKioskNextShellEligible)); } +TEST_F(OnboardingControllerTest, ExitFlowWhenHandlingSkipAction) { + BindHostAndReturnLoadPageSuccess(); + + HandleAction(mojom::OnboardingAction::kSkipFlow); + + EXPECT_TRUE(delegate()->skipped_onboarding()); +} + TEST_F(OnboardingControllerTest, StayInFlowWhenNavigatingToDetailsPage) { NavigateToDetailsPage(); @@ -487,10 +537,11 @@ EXPECT_FALSE(delegate()->finished_onboarding()); } -TEST_F(OnboardingControllerTest, DetailsPageExitsFlowOnFailedPageLoad) { +TEST_F(OnboardingControllerTest, DetailsPageStaysInFlowOnFailedPageLoad) { NavigateToDetailsPage(/*return_error=*/true); - EXPECT_TRUE(delegate()->skipped_onboarding()); + EXPECT_FALSE(delegate()->skipped_onboarding()); + EXPECT_FALSE(delegate()->finished_onboarding()); } TEST_F(OnboardingControllerTest, DetailsPageIsPresentedCorrectly) { @@ -526,10 +577,11 @@ EXPECT_FALSE(delegate()->finished_onboarding()); } -TEST_F(OnboardingControllerTest, AllSetPageExitsFlowOnFailedPageLoad) { +TEST_F(OnboardingControllerTest, AllSetPageStaysInFlowOnFailedPageLoad) { NavigateToAllSetPage(/*return_error=*/true); - EXPECT_TRUE(delegate()->skipped_onboarding()); + EXPECT_FALSE(delegate()->skipped_onboarding()); + EXPECT_FALSE(delegate()->finished_onboarding()); } TEST_F(OnboardingControllerTest, AllSetPageIsPresentedCorrectly) {
diff --git a/chrome/browser/chromeos/supervision/onboarding_flow_model.cc b/chrome/browser/chromeos/supervision/onboarding_flow_model.cc index c4f8902..e7f072a 100644 --- a/chrome/browser/chromeos/supervision/onboarding_flow_model.cc +++ b/chrome/browser/chromeos/supervision/onboarding_flow_model.cc
@@ -72,7 +72,10 @@ ShowPreviousPage(); return; case mojom::OnboardingAction::kSkipFlow: - SkipFlow(); + ExitFlow(ExitReason::kFlowSkipped); + return; + case mojom::OnboardingAction::kRetryPageLoad: + LoadStep(current_step_); return; } } @@ -154,18 +157,6 @@ } } -void OnboardingFlowModel::SkipFlow() { - switch (current_step_) { - case Step::kStart: - ExitFlow(ExitReason::kFlowSkipped); - return; - case Step::kDetails: - case Step::kAllSet: - NOTREACHED(); - return; - } -} - void OnboardingFlowModel::LoadStep(Step step) { current_step_ = step; @@ -191,7 +182,9 @@ identity::AccessTokenInfo access_token_info) { DCHECK(webview_host_); if (error.state() != GoogleServiceAuthError::NONE) { - ExitFlow(ExitReason::kAuthError); + for (auto& observer : observer_list_) { + observer.StepFailedToLoadDueToAuthError(current_step_, error); + } return; } @@ -205,9 +198,10 @@ DCHECK(webview_host_); if (result->net_error != net::Error::OK) { - // TODO(crbug.com/958995): Fail here more gracefully. We should provide a - // way to retry the fetch if the error is recoverable. - ExitFlow(ExitReason::kWebviewNetworkError); + for (auto& observer : observer_list_) { + observer.StepFailedToLoadDueToNetworkError( + current_step_, static_cast<net::Error>(result->net_error)); + } return; }
diff --git a/chrome/browser/chromeos/supervision/onboarding_flow_model.h b/chrome/browser/chromeos/supervision/onboarding_flow_model.h index fc7113f99..e5105e7 100644 --- a/chrome/browser/chromeos/supervision/onboarding_flow_model.h +++ b/chrome/browser/chromeos/supervision/onboarding_flow_model.h
@@ -11,6 +11,7 @@ #include "base/macros.h" #include "base/observer_list.h" #include "chrome/browser/chromeos/supervision/mojom/onboarding_controller.mojom.h" +#include "net/base/net_errors.h" #include "services/identity/public/cpp/identity_manager.h" class Profile; @@ -47,13 +48,8 @@ enum class ExitReason { // The user navigated through the whole flow and exited successfully. kUserReachedEnd, - // User chose to skip the flow during its introduction. + // User chose to skip the flow. kFlowSkipped, - // We found an authentication error before we attempted to load the first - // onboarding page. - kAuthError, - // The webview that presents the pages found a network problem. - kWebviewNetworkError, // The user is not eligible to see the flow. kUserNotEligible, // The onboarding flow screens should not be shown since their feature is @@ -70,6 +66,11 @@ virtual void StepStartedLoading(Step step) {} virtual void StepFinishedLoading(Step step) {} + virtual void StepFailedToLoadDueToAuthError(Step step, + GoogleServiceAuthError error) {} + virtual void StepFailedToLoadDueToNetworkError(Step step, + net::Error error) {} + // If we are exiting the flow for any reason, we first notify our observers // through this method. Observers should *NOT* call other methods in the // flow model while receiving this notification. @@ -89,7 +90,6 @@ mojom::OnboardingPagePtr MakePage(Step step, const std::string& access_token); void ShowNextPage(); void ShowPreviousPage(); - void SkipFlow(); void LoadStep(Step step);
diff --git a/chrome/browser/chromeos/supervision/onboarding_logger.cc b/chrome/browser/chromeos/supervision/onboarding_logger.cc index 729d08d..2b335ee 100644 --- a/chrome/browser/chromeos/supervision/onboarding_logger.cc +++ b/chrome/browser/chromeos/supervision/onboarding_logger.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/chromeos/supervision/onboarding_logger.h" #include "base/logging.h" +#include "google_apis/gaia/google_service_auth_error.h" namespace chromeos { namespace supervision { @@ -27,10 +28,6 @@ return "User reached the end of the flow successfuly."; case OnboardingFlowModel::ExitReason::kFlowSkipped: return "User chose to skip the flow."; - case OnboardingFlowModel::ExitReason::kAuthError: - return "Found an error getting an access token."; - case OnboardingFlowModel::ExitReason::kWebviewNetworkError: - return "Webview found a network error."; case OnboardingFlowModel::ExitReason::kUserNotEligible: return "User is not eligible to go through the flow."; case OnboardingFlowModel::ExitReason::kFeatureDisabled: @@ -38,19 +35,6 @@ } } -bool ExitedDueToError(OnboardingFlowModel::ExitReason reason) { - switch (reason) { - case OnboardingFlowModel::ExitReason::kUserReachedEnd: - case OnboardingFlowModel::ExitReason::kFlowSkipped: - case OnboardingFlowModel::ExitReason::kUserNotEligible: - case OnboardingFlowModel::ExitReason::kFeatureDisabled: - return false; - case OnboardingFlowModel::ExitReason::kAuthError: - case OnboardingFlowModel::ExitReason::kWebviewNetworkError: - return true; - } -} - } // namespace OnboardingLogger::OnboardingLogger(OnboardingFlowModel* flow_model) @@ -72,15 +56,25 @@ << StepDescription(step); } +void OnboardingLogger::StepFailedToLoadDueToAuthError( + OnboardingFlowModel::Step step, + GoogleServiceAuthError error) { + LOG(WARNING) + << "Supervision Onboarding step failed to load due to auth error. " + << "Step: " << StepDescription(step) + << " Error: " << error.error_message(); +} + +void OnboardingLogger::StepFailedToLoadDueToNetworkError( + OnboardingFlowModel::Step step, + net::Error error) { + LOG(WARNING) << "Supervision Onboarding step failed to load due to a network " + << "error. Step: " << StepDescription(step) + << " Error: " << net::ErrorToString(error); +} + void OnboardingLogger::WillExitFlow(OnboardingFlowModel::Step step, OnboardingFlowModel::ExitReason reason) { - if (ExitedDueToError(reason)) { - LOG(ERROR) - << "Supervision Onboarding is exiting because it found an error: " - << ExitReasonDescription(reason); - return; - } - DVLOG(1) << "Supervision Onboarding exiting. " << ExitReasonDescription(reason); }
diff --git a/chrome/browser/chromeos/supervision/onboarding_logger.h b/chrome/browser/chromeos/supervision/onboarding_logger.h index cfda6692..4c7331c 100644 --- a/chrome/browser/chromeos/supervision/onboarding_logger.h +++ b/chrome/browser/chromeos/supervision/onboarding_logger.h
@@ -26,6 +26,10 @@ // OnboardingFlowModel::Observer: void StepStartedLoading(OnboardingFlowModel::Step step) override; void StepFinishedLoading(OnboardingFlowModel::Step step) override; + void StepFailedToLoadDueToAuthError(OnboardingFlowModel::Step step, + GoogleServiceAuthError error) override; + void StepFailedToLoadDueToNetworkError(OnboardingFlowModel::Step step, + net::Error error) override; void WillExitFlow(OnboardingFlowModel::Step step, OnboardingFlowModel::ExitReason reason) override;
diff --git a/chrome/browser/chromeos/supervision/onboarding_presenter.cc b/chrome/browser/chromeos/supervision/onboarding_presenter.cc index e2a0bb1..e1160e8 100644 --- a/chrome/browser/chromeos/supervision/onboarding_presenter.cc +++ b/chrome/browser/chromeos/supervision/onboarding_presenter.cc
@@ -10,6 +10,12 @@ namespace chromeos { namespace supervision { +namespace { + +// Minimum number of failed page loads before we show the Skip flow button. +constexpr int kMinFailedLoadCountForSkipAction = 3; + +} // namespace OnboardingPresenter::OnboardingPresenter(OnboardingFlowModel* flow_model) : flow_model_(flow_model) { @@ -28,6 +34,8 @@ } void OnboardingPresenter::StepFinishedLoading(OnboardingFlowModel::Step step) { + failed_loads_count_ = 0; + if (!base::FeatureList::IsEnabled(features::kSupervisionOnboardingScreens)) { flow_model_->ExitFlow(OnboardingFlowModel::ExitReason::kFeatureDisabled); return; @@ -49,5 +57,29 @@ flow_model_->GetWebviewHost().SetPresentation(std::move(presentation)); } +void OnboardingPresenter::StepFailedToLoadDueToAuthError( + OnboardingFlowModel::Step step, + GoogleServiceAuthError error) { + PresentErrorState(); +} + +void OnboardingPresenter::StepFailedToLoadDueToNetworkError( + OnboardingFlowModel::Step step, + net::Error error) { + PresentErrorState(); +} + +void OnboardingPresenter::PresentErrorState() { + failed_loads_count_++; + + auto presentation = mojom::OnboardingPresentation::New(); + presentation->state = mojom::OnboardingPresentationState::kPageLoadFailed; + presentation->can_retry_page_load = true; + if (failed_loads_count_ >= kMinFailedLoadCountForSkipAction) + presentation->can_skip_flow = true; + + flow_model_->GetWebviewHost().SetPresentation(std::move(presentation)); +} + } // namespace supervision } // namespace chromeos
diff --git a/chrome/browser/chromeos/supervision/onboarding_presenter.h b/chrome/browser/chromeos/supervision/onboarding_presenter.h index f795a5b8..f912aa9c 100644 --- a/chrome/browser/chromeos/supervision/onboarding_presenter.h +++ b/chrome/browser/chromeos/supervision/onboarding_presenter.h
@@ -8,6 +8,9 @@ #include "base/macros.h" #include "chrome/browser/chromeos/supervision/mojom/onboarding_controller.mojom.h" #include "chrome/browser/chromeos/supervision/onboarding_flow_model.h" +#include "net/base/net_errors.h" + +class GoogleServiceAuthError; namespace chromeos { namespace supervision { @@ -22,8 +25,15 @@ // OnboardingFlowModel::Observer: void StepStartedLoading(OnboardingFlowModel::Step step) override; void StepFinishedLoading(OnboardingFlowModel::Step step) override; + void StepFailedToLoadDueToAuthError(OnboardingFlowModel::Step step, + GoogleServiceAuthError error) override; + void StepFailedToLoadDueToNetworkError(OnboardingFlowModel::Step step, + net::Error error) override; + + void PresentErrorState(); OnboardingFlowModel* flow_model_; + int failed_loads_count_ = 0; DISALLOW_COPY_AND_ASSIGN(OnboardingPresenter); };
diff --git a/chrome/browser/chromeos/u2f_notification.cc b/chrome/browser/chromeos/u2f_notification.cc new file mode 100644 index 0000000..7c5a0fd --- /dev/null +++ b/chrome/browser/chromeos/u2f_notification.cc
@@ -0,0 +1,172 @@ +// Copyright 2019 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/chromeos/u2f_notification.h" + +#include <memory> + +#include "ash/public/cpp/notification_utils.h" +#include "base/bind.h" +#include "base/files/file_enumerator.h" +#include "base/files/file_path.h" +#include "base/stl_util.h" +#include "base/strings/string16.h" +#include "base/task/post_task.h" +#include "chrome/browser/chromeos/settings/cros_settings.h" +#include "chrome/browser/notifications/notification_display_service.h" +#include "chrome/browser/notifications/notification_display_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/ui/browser_navigator.h" +#include "chrome/browser/ui/browser_navigator_params.h" +#include "chrome/grit/generated_resources.h" +#include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/debug_daemon_client.h" +#include "components/policy/proto/chrome_device_policy.pb.h" +#include "components/strings/grit/components_strings.h" +#include "third_party/cros_system_api/dbus/debugd/dbus-constants.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/message_center/public/cpp/notification.h" + +namespace chromeos { +namespace { + +constexpr char kU2FNotificationId[] = "chrome://u2f_notification"; +constexpr char kU2FAdvisoryURL[] = + "https://sites.google.com/a/chromium.org/dev/chromium-os/" + "u2f-ecdsa-vulnerability"; + +// Notification button identifiers. +enum class ButtonIndex : int { + kLearnMore = 0, + kReset = 1, +}; + +} // namespace + +U2FNotification::U2FNotification() {} + +U2FNotification::~U2FNotification() {} + +void U2FNotification::Check() { + DBusThreadManager::Get()->GetDebugDaemonClient()->GetU2fFlags(base::BindOnce( + &U2FNotification::CheckStatus, weak_factory_.GetWeakPtr())); +} + +void U2FNotification::CheckStatus(base::Optional<std::set<std::string>> flags) { + if (!flags) { + LOG(ERROR) << "Failed to get U2F flags."; + return; + } + + // The legacy implementation is only enabled if either the U2F or G2F flags + // are present and the user_keys flag is off (the latter enables the improved + // implementation). + if (!(base::Contains(*flags, debugd::u2f_flags::kU2f) || + base::Contains(*flags, debugd::u2f_flags::kG2f)) || + base::Contains(*flags, debugd::u2f_flags::kUserKeys)) { + return; + } + + CrosSettings* settings = CrosSettings::Get(); + switch (settings->PrepareTrustedValues(base::BindRepeating( + &U2FNotification::CheckStatus, weak_factory_.GetWeakPtr(), flags))) { + case CrosSettingsProvider::TEMPORARILY_UNTRUSTED: + // Retry happens via the callback registered above. + return; + case CrosSettingsProvider::PERMANENTLY_UNTRUSTED: + // No device settings, so they won't take effect. + break; + case CrosSettingsProvider::TRUSTED: + // If the 2FA setting is present and not set to "unset", it disables the + // legacy implementation, so bail if that is the case. This corresponds + // with behavior in u2fd and should be kept in sync. + constexpr auto kU2fModeUnset = + enterprise_management::DeviceSecondFactorAuthenticationProto::UNSET; + int mode; + if (settings->GetInteger(kDeviceSecondFactorAuthenticationMode, &mode) && + mode != kU2fModeUnset) { + return; + } + break; + } + + // Legacy implementation is on, notify. + ShowNotification(); +} + +void U2FNotification::ShowNotification() { + Profile* profile = ProfileManager::GetPrimaryUserProfile(); + + message_center::RichNotificationData data; + data.buttons.emplace_back(l10n_util::GetStringUTF16(IDS_LEARN_MORE)); + data.buttons.emplace_back( + l10n_util::GetStringUTF16(IDS_U2F_INSECURE_NOTIFICATION_RESET)); + std::unique_ptr<message_center::Notification> notification = + ash::CreateSystemNotification( + message_center::NOTIFICATION_TYPE_SIMPLE, kU2FNotificationId, + l10n_util::GetStringUTF16(IDS_U2F_INSECURE_NOTIFICATION_TITLE), + l10n_util::GetStringUTF16(IDS_U2F_INSECURE_NOTIFICATION_MESSAGE), + base::string16(), GURL(kU2FNotificationId), + message_center::NotifierId( + message_center::NotifierType::SYSTEM_COMPONENT, + kU2FNotificationId), + data, + base::MakeRefCounted<message_center::HandleNotificationClickDelegate>( + base::BindRepeating(&U2FNotification::OnNotificationClick, + weak_factory_.GetWeakPtr())), + gfx::kNoneIcon, + message_center::SystemNotificationWarningLevel::WARNING); + notification->SetSystemPriority(); + notification->set_pinned(false); + + NotificationDisplayServiceFactory::GetForProfile(profile)->Display( + NotificationHandler::Type::TRANSIENT, *notification, + nullptr /* metadata */); +} + +void U2FNotification::OnNotificationClick( + const base::Optional<int> button_index) { + Profile* profile = ProfileManager::GetPrimaryUserProfile(); + if (!button_index || !profile) { + return; + } + + switch (static_cast<ButtonIndex>(*button_index)) { + case ButtonIndex::kLearnMore: { + // Load the chromium.org advisory page in a new tab. + NavigateParams params(profile, GURL(kU2FAdvisoryURL), + ui::PAGE_TRANSITION_LINK); + params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; + params.window_action = NavigateParams::SHOW_WINDOW; + Navigate(¶ms); + break; + } + case ButtonIndex::kReset: { + // Add the user_keys flag. + DBusThreadManager::Get()->GetDebugDaemonClient()->GetU2fFlags( + base::BindOnce([](base::Optional<std::set<std::string>> flags) { + if (!flags) { + LOG(ERROR) << "Failed to get U2F flags."; + return; + } + flags->insert(debugd::u2f_flags::kUserKeys); + DBusThreadManager::Get()->GetDebugDaemonClient()->SetU2fFlags( + *flags, base::BindOnce([](bool result) { + if (!result) { + LOG(ERROR) << "Failed to set U2F flags."; + return; + } + })); + })); + + // TODO: Should we close in all cases? + NotificationDisplayServiceFactory::GetForProfile(profile)->Close( + NotificationHandler::Type::TRANSIENT, kU2FNotificationId); + break; + } + } +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/u2f_notification.h b/chrome/browser/chromeos/u2f_notification.h new file mode 100644 index 0000000..03ea6ddd --- /dev/null +++ b/chrome/browser/chromeos/u2f_notification.h
@@ -0,0 +1,45 @@ +// Copyright 2019 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_CHROMEOS_U2F_NOTIFICATION_H_ +#define CHROME_BROWSER_CHROMEOS_U2F_NOTIFICATION_H_ + +#include <set> +#include <string> + +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "base/optional.h" + +namespace chromeos { + +// Detects whether the legacy, never-officially-launched built-in U2F feature is +// enabled. If so, shows a notification to tell the user about a security issue. +class U2FNotification { + public: + U2FNotification(); + ~U2FNotification(); + + // Asynchronously checks whether the legacy implementation is enabled and if + // so, displays a notification. + void Check(); + + private: + // Checks status given the current U2F flags. + void CheckStatus(base::Optional<std::set<std::string>> flags); + + // Shows the notification. + void ShowNotification(); + + // Handles clicks on the notification. + void OnNotificationClick(const base::Optional<int> button_index); + + base::WeakPtrFactory<U2FNotification> weak_factory_{this}; + + DISALLOW_COPY_AND_ASSIGN(U2FNotification); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_U2F_NOTIFICATION_H_
diff --git a/chrome/browser/chromeos/ui/request_pin_view.cc b/chrome/browser/chromeos/ui/request_pin_view.cc index 6d8b130..2a8d5b4 100644 --- a/chrome/browser/chromeos/ui/request_pin_view.cc +++ b/chrome/browser/chromeos/ui/request_pin_view.cc
@@ -185,7 +185,7 @@ provider->GetDialogInsetsForContentType(views::TEXT, views::TEXT))); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); int column_view_set_id = 0; views::ColumnSet* column_set = layout->AddColumnSet(column_view_set_id);
diff --git a/chrome/browser/enterprise_reporting/profile_report_generator.cc b/chrome/browser/enterprise_reporting/profile_report_generator.cc new file mode 100644 index 0000000..5c1e14b5 --- /dev/null +++ b/chrome/browser/enterprise_reporting/profile_report_generator.cc
@@ -0,0 +1,56 @@ +// Copyright 2019 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/enterprise_reporting/profile_report_generator.h" + +#include "base/files/file_path.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/signin/identity_manager_factory.h" +#include "components/signin/core/browser/account_info.h" +#include "services/identity/public/cpp/identity_manager.h" + +namespace enterprise_reporting { + +ProfileReportGenerator::ProfileReportGenerator() = default; + +ProfileReportGenerator::~ProfileReportGenerator() = default; + +void ProfileReportGenerator::set_extensions_and_plugins_enabled(bool enabled) { + extensions_and_plugins_enabled_ = enabled; +} + +void ProfileReportGenerator::set_policies_enabled(bool enabled) { + policies_enabled_ = enabled; +} + +std::unique_ptr<em::ChromeUserProfileInfo> +ProfileReportGenerator::MaybeGenerate(const base::FilePath& path, + const std::string& name) { + profile_ = g_browser_process->profile_manager()->GetProfileByPath(path); + if (!profile_) + return nullptr; + + report_ = std::make_unique<em::ChromeUserProfileInfo>(); + report_->set_id(path.AsUTF8Unsafe()); + report_->set_name(name); + report_->set_is_full_report(true); + + GetSigninUserInfo(); + + return std::move(report_); +} + +void ProfileReportGenerator::GetSigninUserInfo() { + auto account_info = + IdentityManagerFactory::GetForProfile(profile_)->GetPrimaryAccountInfo(); + if (account_info.IsEmpty()) + return; + auto* signed_in_user_info = report_->mutable_chrome_signed_in_user(); + signed_in_user_info->set_email(account_info.email); + signed_in_user_info->set_obfudscated_gaiaid(account_info.gaia); +} + +} // namespace enterprise_reporting
diff --git a/chrome/browser/enterprise_reporting/profile_report_generator.h b/chrome/browser/enterprise_reporting/profile_report_generator.h new file mode 100644 index 0000000..04b2292 --- /dev/null +++ b/chrome/browser/enterprise_reporting/profile_report_generator.h
@@ -0,0 +1,61 @@ +// Copyright 2019 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_ENTERPRISE_REPORTING_PROFILE_REPORT_GENERATOR_H_ +#define CHROME_BROWSER_ENTERPRISE_REPORTING_PROFILE_REPORT_GENERATOR_H_ + +#include "base/macros.h" +#include "components/policy/proto/device_management_backend.pb.h" + +namespace em = enterprise_management; + +namespace base { +class FilePath; +} + +class Profile; + +namespace enterprise_reporting { + +/** + * A report generator that collects Profile related information that is selected + * by policies. + */ +class ProfileReportGenerator { + public: + ProfileReportGenerator(); + ~ProfileReportGenerator(); + + void set_extensions_and_plugins_enabled(bool enabled); + void set_policies_enabled(bool enabled); + + // Generates report for Profile if it's activated. Otherwise, returns null. + std::unique_ptr<em::ChromeUserProfileInfo> MaybeGenerate( + const base::FilePath& path, + const std::string& name); + + protected: + // Get Signin information includes email and gaia id. + virtual void GetSigninUserInfo(); + + // TODO(zmin): void GetExtensionInfo(); + // TODO(zmin): void GetPluginInfo(); + // TODO(zmin): void GetChromePolicyInfo(); + // TODO(zmin): void GetExtensionPolicyInfo(); + // TODO(zmin): void GetPolicyFetchTimestampInfo(); + + private: + Profile* profile_; + + bool extensions_and_plugins_enabled_ = true; + bool policies_enabled_ = true; + + std::unique_ptr<em::ChromeUserProfileInfo> report_; + + DISALLOW_COPY_AND_ASSIGN(ProfileReportGenerator); +}; + +} // namespace enterprise_reporting + +#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_PROFILE_REPORT_GENERATOR_H_
diff --git a/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc b/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc new file mode 100644 index 0000000..ecd5c4d --- /dev/null +++ b/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc
@@ -0,0 +1,86 @@ +// Copyright 2019 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/enterprise_reporting/profile_report_generator.h" + +#include "base/logging.h" +#include "base/strings/string16.h" +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/profiles/profile_attributes_storage.h" +#include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" +#include "chrome/test/base/testing_browser_process.h" +#include "chrome/test/base/testing_profile_manager.h" +#include "components/account_id/account_id.h" +#include "content/public/test/test_browser_thread_bundle.h" +#include "services/identity/public/cpp/identity_test_environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace enterprise_reporting { +namespace { +const char kProfile[] = "Profile"; +const char kIdleProfile[] = "IdleProfile"; +} // namespace +class ProfileReportGeneratorTest : public ::testing::Test { + public: + ProfileReportGeneratorTest() + : profile_manager_(TestingBrowserProcess::GetGlobal()) {} + ~ProfileReportGeneratorTest() override = default; + + void SetUp() override { + ASSERT_TRUE(profile_manager_.SetUp()); + profile_ = profile_manager_.CreateTestingProfile(kProfile); + } + + std::unique_ptr<em::ChromeUserProfileInfo> GenerateReport() { + auto report = generator_.MaybeGenerate(profile()->GetPath(), + profile()->GetProfileUserName()); + + EXPECT_TRUE(report); + EXPECT_EQ(profile()->GetProfileUserName(), report->name()); + EXPECT_EQ(profile()->GetPath().AsUTF8Unsafe(), report->id()); + EXPECT_TRUE(report->is_full_report()); + + return report; + } + + TestingProfile* profile() { return profile_; } + TestingProfileManager* profile_manager() { return &profile_manager_; } + + ProfileReportGenerator generator_; + + private: + content::TestBrowserThreadBundle thread_bundle_; + TestingProfileManager profile_manager_; + TestingProfile* profile_; + + DISALLOW_COPY_AND_ASSIGN(ProfileReportGeneratorTest); +}; + +TEST_F(ProfileReportGeneratorTest, ProfileNotActivated) { + const base::FilePath profile_path = + profile_manager()->profiles_dir().AppendASCII(kIdleProfile); + profile_manager()->profile_attributes_storage()->AddProfile( + profile_path, base::ASCIIToUTF16(kIdleProfile), std::string(), + base::string16(), 0, std::string(), EmptyAccountId()); + EXPECT_FALSE(generator_.MaybeGenerate(profile_path, kIdleProfile)); +} + +TEST_F(ProfileReportGeneratorTest, UnsignedInProfile) { + auto report = GenerateReport(); + EXPECT_FALSE(report->has_chrome_signed_in_user()); +} + +TEST_F(ProfileReportGeneratorTest, SignedInProfile) { + IdentityTestEnvironmentProfileAdaptor identity_test_env_adaptor(profile()); + auto expected_info = + identity_test_env_adaptor.identity_test_env()->SetPrimaryAccount( + "test@mail.com"); + auto report = GenerateReport(); + EXPECT_TRUE(report->has_chrome_signed_in_user()); + EXPECT_EQ(expected_info.email, report->chrome_signed_in_user().email()); + EXPECT_EQ(expected_info.gaia, + report->chrome_signed_in_user().obfudscated_gaiaid()); +} + +} // namespace enterprise_reporting
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc b/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc index 4a80425e..c09ec777f 100644 --- a/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc +++ b/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc
@@ -23,22 +23,15 @@ SettingsPrivateEventRouter::SettingsPrivateEventRouter( content::BrowserContext* context) - : context_(context), listening_(false), weak_ptr_factory_(this) { + : context_(context) { Profile* profile = Profile::FromBrowserContext(context_); prefs_util_ = std::make_unique<PrefsUtil>(profile); user_prefs_registrar_.Init(profile->GetPrefs()); local_state_registrar_.Init(g_browser_process->local_state()); - // Register with the event router so we know when renderers are listening to - // our events. We first check and see if there *is* an event router, because - // some unit tests try to create all context services, but don't initialize - // the event router first. - EventRouter* event_router = EventRouter::Get(context_); - if (event_router) { - event_router->RegisterObserver( - this, api::settings_private::OnPrefsChanged::kEventName); - StartOrStopListeningForPrefsChanges(); - } + EventRouter::Get(context_)->RegisterObserver( + this, api::settings_private::OnPrefsChanged::kEventName); + StartOrStopListeningForPrefsChanges(); } SettingsPrivateEventRouter::~SettingsPrivateEventRouter() { @@ -51,12 +44,7 @@ } void SettingsPrivateEventRouter::Shutdown() { - // Unregister with the event router. We first check and see if there *is* an - // event router, because some unit tests try to shutdown all context services, - // but didn't initialize the event router first. - EventRouter* event_router = EventRouter::Get(context_); - if (event_router) - event_router->UnregisterObserver(this); + EventRouter::Get(context_)->UnregisterObserver(this); if (listening_) { #if defined(OS_CHROMEOS)
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_event_router.h b/chrome/browser/extensions/api/settings_private/settings_private_event_router.h index ddad6b08..3471e74 100644 --- a/chrome/browser/extensions/api/settings_private/settings_private_event_router.h +++ b/chrome/browser/extensions/api/settings_private/settings_private_event_router.h
@@ -80,12 +80,12 @@ SubscriptionMap cros_settings_subscription_map_; #endif - content::BrowserContext* context_; - bool listening_; + content::BrowserContext* const context_; + bool listening_ = false; std::unique_ptr<PrefsUtil> prefs_util_; - base::WeakPtrFactory<SettingsPrivateEventRouter> weak_ptr_factory_; + base::WeakPtrFactory<SettingsPrivateEventRouter> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(SettingsPrivateEventRouter); };
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.cc b/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.cc index b491f73a..fd9b77db 100644 --- a/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.cc +++ b/chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.cc
@@ -2,11 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.h" + #include "chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.h" #include "chrome/browser/extensions/api/settings_private/settings_private_event_router.h" -#include "chrome/browser/extensions/api/settings_private/settings_private_event_router_factory.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" +#include "extensions/browser/event_router_factory.h" #include "extensions/browser/extension_system_provider.h" #include "extensions/browser/extensions_browser_client.h" @@ -30,6 +32,7 @@ "SettingsPrivateEventRouter", BrowserContextDependencyManager::GetInstance()) { DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); + DependsOn(EventRouterFactory::GetInstance()); DependsOn(SettingsPrivateDelegateFactory::GetInstance()); }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 528296d..7dcbf9ec 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -2665,6 +2665,11 @@ "expiry_milestone": 77 }, { + "name": "security-interstitials-dark-mode", + "owners": ["estark"], + "expiry_milestone": 79 + }, + { "name": "session-restore-prioritizes-background-use-cases", "owners": [ "chrisha" ], "expiry_milestone": 76
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index cc7bfca..c6b89da 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1584,6 +1584,12 @@ "Allows users to access tabs by scrolling when they no longer fit in the " "tabstrip."; +const char kSecurityInterstitialsDarkModeName[] = + "Security interstitials dark mode"; +const char kSecurityInterstitialsDarkModeDescription[] = + "Allows security intersitials to take on a dark theme when the OS is " + "switched to dark mode."; + const char kSendTabToSelfName[] = "Send tab to self"; const char kSendTabToSelfDescription[] = "Allows users to receive tabs from other synced devices, in order to "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index c9bd734..5c160602 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -946,6 +946,9 @@ extern const char kScrollableTabStripName[]; extern const char kScrollableTabStripDescription[]; +extern const char kSecurityInterstitialsDarkModeName[]; +extern const char kSecurityInterstitialsDarkModeDescription[]; + extern const char kSendTabToSelfName[]; extern const char kSendTabToSelfDescription[];
diff --git a/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc b/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc index f8f59365..e2558136 100644 --- a/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc +++ b/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc
@@ -46,9 +46,7 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/network_service_instance.h" -#include "services/network/public/cpp/features.h" #include "services/network/public/cpp/shared_url_loader_factory.h" -#include "services/service_manager/public/cpp/connector.h" namespace offline_pages { @@ -113,11 +111,7 @@ // Starts the network service if it hasn't yet. This is because when network // service is enabled in the reduced mode, it only starts upon request. - if (base::FeatureList::IsEnabled(network::features::kNetworkService)) { - service_manager::Connector* connector = - content::ServiceManagerConnection::GetForProcess()->GetConnector(); - content::GetNetworkServiceFromConnector(connector); - } + content::GetNetworkService(); auto* system_network_context_manager = SystemNetworkContextManager::GetInstance();
diff --git a/chrome/browser/performance_manager/graph/frame_node_impl.cc b/chrome/browser/performance_manager/graph/frame_node_impl.cc index 0e0e18b..336bfdf 100644 --- a/chrome/browser/performance_manager/graph/frame_node_impl.cc +++ b/chrome/browser/performance_manager/graph/frame_node_impl.cc
@@ -105,6 +105,36 @@ observer->OnNonPersistentNotificationCreated(this); } +bool FrameNodeImpl::IsMainFrame() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return !parent_frame_node_; +} + +bool FrameNodeImpl::AreAllInterventionPoliciesSet() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // The convention is that policies are first set en masse, in order. So if + // the last policy is set then they are all considered to be set. Check this + // in DEBUG builds. +#if DCHECK_IS_ON() + bool seen_unset_policy = false; + for (size_t i = 0; i < base::size(intervention_policy_); ++i) { + if (!seen_unset_policy) { + seen_unset_policy = + intervention_policy_[i] != + resource_coordinator::mojom::InterventionPolicy::kUnknown; + } else { + // Once a first unset policy is seen, all subsequent policies must be + // unset. + DCHECK_NE(resource_coordinator::mojom::InterventionPolicy::kUnknown, + intervention_policy_[i]); + } + } +#endif + + return intervention_policy_[base::size(intervention_policy_) - 1] != + resource_coordinator::mojom::InterventionPolicy::kUnknown; +} + FrameNodeImpl* FrameNodeImpl::parent_frame_node() const { return parent_frame_node_; } @@ -195,10 +225,6 @@ #endif } -bool FrameNodeImpl::IsMainFrame() const { - return !parent_frame_node_; -} - void FrameNodeImpl::OnNavigationCommitted(const GURL& url, bool same_document) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -234,31 +260,6 @@ document_.Reset(this, url); } -bool FrameNodeImpl::AreAllInterventionPoliciesSet() const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // The convention is that policies are first set en masse, in order. So if - // the last policy is set then they are all considered to be set. Check this - // in DEBUG builds. -#if DCHECK_IS_ON() - bool seen_unset_policy = false; - for (size_t i = 0; i < base::size(intervention_policy_); ++i) { - if (!seen_unset_policy) { - seen_unset_policy = - intervention_policy_[i] != - resource_coordinator::mojom::InterventionPolicy::kUnknown; - } else { - // Once a first unset policy is seen, all subsequent policies must be - // unset. - DCHECK_NE(resource_coordinator::mojom::InterventionPolicy::kUnknown, - intervention_policy_[i]); - } - } -#endif - - return intervention_policy_[base::size(intervention_policy_) - 1] != - resource_coordinator::mojom::InterventionPolicy::kUnknown; -} // namespace performance_manager - void FrameNodeImpl::SetAllInterventionPoliciesForTesting( resource_coordinator::mojom::InterventionPolicy policy) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -270,6 +271,81 @@ } } +const FrameNode* FrameNodeImpl::GetParentFrameNode() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return parent_frame_node(); +} + +const PageNode* FrameNodeImpl::GetPageNode() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return page_node(); +} + +const ProcessNode* FrameNodeImpl::GetProcessNode() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return process_node(); +} + +int FrameNodeImpl::GetFrameTreeNodeId() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return frame_tree_node_id(); +} + +const base::UnguessableToken& FrameNodeImpl::GetDevToolsToken() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return dev_tools_token(); +} + +int32_t FrameNodeImpl::GetBrowsingInstanceId() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return browsing_instance_id(); +} + +int32_t FrameNodeImpl::GetSiteInstanceId() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return site_instance_id(); +} + +const base::flat_set<const FrameNode*> FrameNodeImpl::GetChildFrameNodes() + const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + base::flat_set<const FrameNode*> children; + for (auto* child : child_frame_nodes()) + children.insert(static_cast<const FrameNode*>(child)); + DCHECK_EQ(children.size(), child_frame_nodes().size()); + return children; +} + +FrameNodeImpl::LifecycleState FrameNodeImpl::GetLifecycleState() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return lifecycle_state(); +} + +bool FrameNodeImpl::HasNonemptyBeforeUnload() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return has_nonempty_beforeunload(); +} + +const GURL& FrameNodeImpl::GetURL() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return url(); +} + +bool FrameNodeImpl::IsCurrent() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return is_current(); +} + +bool FrameNodeImpl::GetNetworkAlmostIdle() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return network_almost_idle(); +} + +bool FrameNodeImpl::IsAdFrame() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return is_ad_frame(); +} + void FrameNodeImpl::AddChildFrame(FrameNodeImpl* child_frame_node) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(child_frame_node);
diff --git a/chrome/browser/performance_manager/graph/frame_node_impl.h b/chrome/browser/performance_manager/graph/frame_node_impl.h index 0c8c628..57d10f8 100644 --- a/chrome/browser/performance_manager/graph/frame_node_impl.h +++ b/chrome/browser/performance_manager/graph/frame_node_impl.h
@@ -71,8 +71,7 @@ // resource_coordinator::mojom::DocumentCoordinationUnit implementation. void SetNetworkAlmostIdle() override; - void SetLifecycleState( - resource_coordinator::mojom::LifecycleState state) override; + void SetLifecycleState(LifecycleState state) override; void SetHasNonEmptyBeforeUnload(bool has_nonempty_beforeunload) override; void SetInterventionPolicy( resource_coordinator::mojom::PolicyControlledIntervention intervention, @@ -80,6 +79,10 @@ void SetIsAdFrame() override; void OnNonPersistentNotificationCreated() override; + // Partial FrameNode implementation: + bool IsMainFrame() const override; + bool AreAllInterventionPoliciesSet() const override; + // Getters for const properties. These can be called from any thread. FrameNodeImpl* parent_frame_node() const; PageNodeImpl* page_node() const; @@ -91,7 +94,7 @@ // Getters for non-const properties. These are not thread safe. const base::flat_set<FrameNodeImpl*>& child_frame_nodes() const; - resource_coordinator::mojom::LifecycleState lifecycle_state() const; + LifecycleState lifecycle_state() const; bool has_nonempty_beforeunload() const; const GURL& url() const; bool is_current() const; @@ -101,16 +104,9 @@ // Setters are not thread safe. void SetIsCurrent(bool is_current); - // A frame is a main frame if it has no |parent_frame_node|. This can be - // called from any thread. - bool IsMainFrame() const; - // Invoked when a navigation is committed in the frame. void OnNavigationCommitted(const GURL& url, bool same_document); - // Returns true if all intervention policies have been set for this frame. - bool AreAllInterventionPoliciesSet() const; - // Sets the same policy for all intervention types in this frame. Causes // Page::OnFrameInterventionPolicyChanged to be invoked. void SetAllInterventionPoliciesForTesting( @@ -120,6 +116,23 @@ friend class PageNodeImpl; friend class ProcessNodeImpl; + // Rest of FrameNode implementation. These are private so that users of the + // impl use the private getters rather than the public interface. + const FrameNode* GetParentFrameNode() const override; + const PageNode* GetPageNode() const override; + const ProcessNode* GetProcessNode() const override; + int GetFrameTreeNodeId() const override; + const base::UnguessableToken& GetDevToolsToken() const override; + int32_t GetBrowsingInstanceId() const override; + int32_t GetSiteInstanceId() const override; + const base::flat_set<const FrameNode*> GetChildFrameNodes() const override; + LifecycleState GetLifecycleState() const override; + bool HasNonemptyBeforeUnload() const override; + const GURL& GetURL() const override; + bool IsCurrent() const override; + bool GetNetworkAlmostIdle() const override; + bool IsAdFrame() const override; + // Properties associated with a Document, which are reset when a // different-document navigation is committed in the frame. struct DocumentProperties { @@ -180,10 +193,10 @@ // Does *not* change when a navigation is committed. ObservedProperty::NotifiesOnlyOnChanges< - resource_coordinator::mojom::LifecycleState, + LifecycleState, &GraphImplObserver::OnLifecycleStateChanged, &FrameNodeObserver::OnLifecycleStateChanged> - lifecycle_state_{resource_coordinator::mojom::LifecycleState::kRunning}; + lifecycle_state_{LifecycleState::kRunning}; // This is a one way switch. Once marked an ad-frame, always an ad-frame. bool is_ad_frame_ = false;
diff --git a/chrome/browser/performance_manager/graph/frame_node_impl_unittest.cc b/chrome/browser/performance_manager/graph/frame_node_impl_unittest.cc index cc3ce6ac..65008e6 100644 --- a/chrome/browser/performance_manager/graph/frame_node_impl_unittest.cc +++ b/chrome/browser/performance_manager/graph/frame_node_impl_unittest.cc
@@ -207,4 +207,46 @@ graph()->RemoveFrameNodeObserver(&obs); } +TEST_F(FrameNodeImplTest, PublicInterface) { + auto process = CreateNode<ProcessNodeImpl>(); + auto page = CreateNode<PageNodeImpl>(); + auto frame_node = CreateNode<FrameNodeImpl>(process.get(), page.get()); + const FrameNode* public_frame_node = frame_node.get(); + + // Simply test that the public interface impls yield the same result as their + // private counterpart. + + EXPECT_EQ(static_cast<const FrameNode*>(frame_node->parent_frame_node()), + public_frame_node->GetParentFrameNode()); + EXPECT_EQ(static_cast<const PageNode*>(frame_node->page_node()), + public_frame_node->GetPageNode()); + EXPECT_EQ(static_cast<const ProcessNode*>(frame_node->process_node()), + public_frame_node->GetProcessNode()); + EXPECT_EQ(frame_node->frame_tree_node_id(), + public_frame_node->GetFrameTreeNodeId()); + EXPECT_EQ(frame_node->dev_tools_token(), + public_frame_node->GetDevToolsToken()); + EXPECT_EQ(frame_node->browsing_instance_id(), + public_frame_node->GetBrowsingInstanceId()); + EXPECT_EQ(frame_node->site_instance_id(), + public_frame_node->GetSiteInstanceId()); + + auto child_frame_nodes = public_frame_node->GetChildFrameNodes(); + for (auto* child_frame_node : frame_node->child_frame_nodes()) { + const FrameNode* child = child_frame_node; + EXPECT_TRUE(base::Contains(child_frame_nodes, child)); + } + EXPECT_EQ(child_frame_nodes.size(), frame_node->child_frame_nodes().size()); + + EXPECT_EQ(frame_node->lifecycle_state(), + public_frame_node->GetLifecycleState()); + EXPECT_EQ(frame_node->has_nonempty_beforeunload(), + public_frame_node->HasNonemptyBeforeUnload()); + EXPECT_EQ(frame_node->url(), public_frame_node->GetURL()); + EXPECT_EQ(frame_node->is_current(), public_frame_node->IsCurrent()); + EXPECT_EQ(frame_node->network_almost_idle(), + public_frame_node->GetNetworkAlmostIdle()); + EXPECT_EQ(frame_node->is_ad_frame(), public_frame_node->IsAdFrame()); +} + } // namespace performance_manager
diff --git a/chrome/browser/performance_manager/public/graph/frame_node.h b/chrome/browser/performance_manager/public/graph/frame_node.h index 04194e2..23fe48b 100644 --- a/chrome/browser/performance_manager/public/graph/frame_node.h +++ b/chrome/browser/performance_manager/public/graph/frame_node.h
@@ -5,12 +5,22 @@ #ifndef CHROME_BROWSER_PERFORMANCE_MANAGER_PUBLIC_GRAPH_FRAME_NODE_H_ #define CHROME_BROWSER_PERFORMANCE_MANAGER_PUBLIC_GRAPH_FRAME_NODE_H_ +#include "base/containers/flat_set.h" #include "base/macros.h" #include "chrome/browser/performance_manager/public/graph/node.h" +#include "services/resource_coordinator/public/mojom/lifecycle.mojom.h" + +class GURL; + +namespace base { +class UnguessableToken; +} // namespace base namespace performance_manager { class FrameNodeObserver; +class PageNode; +class ProcessNode; // Frame nodes form a tree structure, each FrameNode at most has one parent that // is a FrameNode. Conceptually, a frame corresponds to a @@ -34,14 +44,86 @@ // origin meaning the frame has to be destroyed and another one created in // another process!) and commits, the frame will be swapped with the previously // active frame. +// +// It is only valid to access this object on the sequence of the graph that owns +// it. class FrameNode : public Node { public: + using LifecycleState = resource_coordinator::mojom::LifecycleState; using Observer = FrameNodeObserver; class ObserverDefaultImpl; FrameNode(); ~FrameNode() override; + // Returns the parent of this frame node. This may be null if this frame node + // is the main (root) node of a frame tree. This is a constant over the + // lifetime of the frame. + virtual const FrameNode* GetParentFrameNode() const = 0; + + // Returns the page node to which this frame belongs. This is a constant over + // the lifetime of the frame. + virtual const PageNode* GetPageNode() const = 0; + + // Returns the process node with which this frame belongs. This is a constant + // over the lifetime of the frame. + virtual const ProcessNode* GetProcessNode() const = 0; + + // Gets the FrameTree node ID associated with this node. There may be multiple + // sibling nodes with the same frame tree node ID, but at most 1 of them may + // be current at a time. This is a constant over the lifetime of the frame. + virtual int GetFrameTreeNodeId() const = 0; + + // Gets the devtools token associated with this frame. This is a constant over + // the lifetime of the frame. + virtual const base::UnguessableToken& GetDevToolsToken() const = 0; + + // Gets the ID of the browsing instance to which this frame belongs. This is a + // constant over the lifetime of the frame. + virtual int32_t GetBrowsingInstanceId() const = 0; + + // Gets the ID of the site instance to which this frame belongs. This is a + // constant over the lifetime of the frame. + virtual int32_t GetSiteInstanceId() const = 0; + + // A frame is a main frame if it has no parent FrameNode. This can be + // called from any thread. + virtual bool IsMainFrame() const = 0; + + // Returns the set of child frame associated with this frame. Note that this + // incurs a full container copy of all child nodes. Please use ForEach when + // that makes sense. + virtual const base::flat_set<const FrameNode*> GetChildFrameNodes() const = 0; + + // Returns the current lifecycle state of this frame. + virtual LifecycleState GetLifecycleState() const = 0; + + // Returns true if this frame had a non-empty before-unload handler at the + // time of its last transition to the frozen lifecycle state. This is only + // meaningful while the object is frozen. + virtual bool HasNonemptyBeforeUnload() const = 0; + + // Returns the URL associated with this frame. + // See FrameNodeObserver::OnURLChanged. + virtual const GURL& GetURL() const = 0; + + // Returns true if this frame is current (is part of a content::FrameTree). + // See FrameNodeObserver::OnIsCurrentChanged. + virtual bool IsCurrent() const = 0; + + // Returns true if this frames use of the network is "almost idle", indicating + // that it is not doing any heavy loading work. + virtual bool GetNetworkAlmostIdle() const = 0; + + // Returns true if this frame is ad frame. This can change from false to true + // over the lifetime of the frame, but once it is true it will always remain + // true. + // TODO(chrisha): Add a corresponding observer event for this. + virtual bool IsAdFrame() const = 0; + + // Returns true if all intervention policies have been set for this frame. + virtual bool AreAllInterventionPoliciesSet() const = 0; + private: DISALLOW_COPY_AND_ASSIGN(FrameNode); };
diff --git a/chrome/browser/resources/chromeos/login/supervision_onboarding.html b/chrome/browser/resources/chromeos/login/supervision_onboarding.html index 89c64009..4e9e289 100644 --- a/chrome/browser/resources/chromeos/login/supervision_onboarding.html +++ b/chrome/browser/resources/chromeos/login/supervision_onboarding.html
@@ -11,6 +11,38 @@ <script src="chrome://oobe/supervision/onboarding_controller.mojom-lite.js"> </script> +<iron-iconset-svg name="supervision-onboarding-retry-32" size="32"> + <svg> + <defs> + <g id="alert" fill-rule="evenodd"> + <defs> + <path id="a" d="M14.667 20h2.666v2.667h-2.666V20zm0-10.667h2.666v8h-2.666v-8zm1.32-6.666C8.627 2.667 2.667 8.64 2.667 16s5.96 13.333 13.32 13.333c7.373 0 13.346-5.973 13.346-13.333S23.36 2.667 15.987 2.667zm.013 24c-5.893 0-10.667-4.774-10.667-10.667S10.107 5.333 16 5.333 26.667 10.107 26.667 16 21.893 26.667 16 26.667z"></path> + </defs> + <g fill="none" fill-rule="evenodd"> + <path d="M0 0h32v32H0z"></path> + <use fill="#1A73E8" fill-rule="nonzero" xlink:href="#a"></use> + </g> + </g> + </defs> + </svg> +</iron-iconset-svg> + +<iron-iconset-svg name="supervision-onboarding-retry-64" size="64"> + <svg> + <defs> + <g id="alert" fill-rule="evenodd"> + <defs> + <path id="a" d="M29.333 40h5.334v5.333h-5.334V40zm0-21.333h5.334v16h-5.334v-16zm2.64-13.334C17.253 5.333 5.333 17.28 5.333 32c0 14.72 11.92 26.667 26.64 26.667C46.72 58.667 58.667 46.72 58.667 32c0-14.72-11.947-26.667-26.694-26.667zm.027 48c-11.787 0-21.333-9.546-21.333-21.333 0-11.787 9.546-21.333 21.333-21.333 11.787 0 21.333 9.546 21.333 21.333 0 11.787-9.546 21.333-21.333 21.333z"></path> + </defs> + <g fill="none" fill-rule="evenodd"> + <path d="M0 0h64v64H0z"></path> + <use fill="#1A73E8" fill-rule="nonzero" xlink:href="#a"></use> + </g> + </g> + </defs> + </svg> +</iron-iconset-svg> + <!-- UI for the Supervision Onboarding flow that's displayed for the first login or OOBE of supervised users. --> @@ -19,15 +51,55 @@ <link rel="stylesheet" href="oobe_flex_layout.css"> <link rel="stylesheet" href="supervision_onboarding.css"> <div id="supervision-onboarding-flow-container"> + + <!-- + Loading dialog. Shown while we load the onboarding page. + It just shows a spinner with a "Please wait" message. --> <oobe-dialog id="loading-dialog" role="dialog" no-header no-footer-padding - hidden="[[isReady_]]"> + hidden="[[hideLoadingDialog_]]"> <div slot="footer" class="flex layout vertical center center-justified"> <throbber-notice text="$i18n{supervisionOnboardingWaitMessage}"> </throbber-notice> </div> </oobe-dialog> + + <!-- + Retry dialog. Shown when we fail to load the onboarding page. + It shows a "Try again" button, but if the user keeps trying and we + keep failing, we add a button to skip the whole flow. --> + <oobe-dialog id="supervision-onboarding-retry-dialog" role="dialog" + aria-label$="$i18n{supervisionOnboardingRetryDialogTitle}" + has-buttons hidden="[[hideRetryDialog_]]"> + <hd-iron-icon slot="oobe-icon" aria-hidden="true" + icon1x="supervision-onboarding-retry-32:alert" + icon2x="supervision-onboarding-retry-64:alert"> + </hd-iron-icon> + <h1 slot="title"> + $i18n{supervisionOnboardingRetryDialogTitle} + </h1> + <div slot="subtitle"> + $i18n{supervisionOnboardingRetryDialogMessage} + </div> + <div slot="bottom-buttons" class="layout horizontal end-justified"> + <div class="flex"> + </div> + <oobe-text-button id="supervision-onboarding-bail-button" border + hidden="[[hideSkipButton_]]" on-tap="onSkip_"> + <div i18n-content="supervisionOnboardingSkipButtonLabel"></div> + </oobe-text-button> + <oobe-text-button id="supervision-onboarding-retry-button" inverse + hidden="[[hideRetryButton_]]" on-tap="onRetry_"> + <div i18n-content="supervisionOnboardingRetryButtonLabel"></div> + </oobe-text-button> + </div> + </oobe-dialog> + + <!-- + Content dialog. Shown when we successfully load an onboarding page. + It has up to three buttons to control the flow that depend on the + page.--> <oobe-dialog id="supervision-onboarding-content" role="dialog" no-header - no-footer-padding has-buttons hidden="[[!isReady_]]"> + no-footer-padding has-buttons hidden="[[hideContent_]]"> <webview id="supervisionOnboardingWebview" slot="footer"> </webview> <div id="supervision-onboarding-flow-buttons" slot="bottom-buttons"
diff --git a/chrome/browser/resources/chromeos/login/supervision_onboarding.js b/chrome/browser/resources/chromeos/login/supervision_onboarding.js index 95e8af7..559765c 100644 --- a/chrome/browser/resources/chromeos/login/supervision_onboarding.js +++ b/chrome/browser/resources/chromeos/login/supervision_onboarding.js
@@ -9,6 +9,22 @@ */ { + /** + * Codes for network errors. Should follow same numbers as + * net/base/net_errors.h + * @const + * @enum {number} + */ + const NetError = { + 'OK': 0, + 'ERR_FAILED': -2, + 'ERR_ABORTED': -3, + 'ERR_TIMED_OUT': -7, + }; + + /** @const {number} Timeout for page loads in milliseconds. */ + const PAGE_LOAD_TIMEOUT_MS = 10000; + class WebviewLoader { /** @param {!WebView} webview */ constructor(webview) { @@ -29,9 +45,13 @@ */ this.pendingLoadPageCallback_ = null; - /** @private {!chromeos.supervision.mojom.OnboardingLoadPageResult} */ - this.pendingLoadPageResult_ = {netError: 0}; - + /** + * Callers can optionally ask to extract the value from a custom HTTP + * header present in page loads. If they request it and we find the + * targeted header, we store it here. + * @private {?string} + */ + this.customHeaderValue_ = null; // We listen to all requests made to fetch the main frame, but note that // we end up blocking requests to URLs that don't start with the expected @@ -40,13 +60,28 @@ // load the page, but we add listeners at mojo setup time. const requestFilter = {urls: ['<all_urls>'], types: ['main_frame']}; - this.webviewListener_ = this.webviewFinishedLoading_.bind(this); this.webview_.request.onBeforeSendHeaders.addListener( this.onBeforeSendHeaders_.bind(this), requestFilter, ['blocking', 'requestHeaders']); this.webview_.request.onHeadersReceived.addListener( this.onHeadersReceived_.bind(this), requestFilter, ['responseHeaders', 'extraHeaders']); + + // These are for listeners that will be called when we finish loading the + // webview. We have their bound versions here so we can add and remove + // them as we try to load the page. This is necessary so we don't receive + // notifications from previous loads. + // For example, if we timeout and the user presses the retry button, the + // webview will send a loadabort event when we set a new src and start a + // new page load. We avoid this problem if we remove our listeners as soon + // as one of them fires. + this.loadStopListener_ = this.onLoadStop_.bind(this); + this.requestCompletedListener_ = this.onRequestCompleted_.bind(this); + this.loadAbortListener_ = this.onLoadAbort_.bind(this); + this.errorOccurredListener_ = this.onErrorOccurred_.bind(this); + this.timeoutListener_ = this.onTimeout_.bind(this); + + this.timerId_ = 0; } /** @@ -56,19 +91,25 @@ * }>} */ loadPage(page) { - // TODO(958995): Handle the case where we are still loading the previous - // page but the controller wants to load the next one. For now we just - // resolve the previous callback. if (this.pendingLoadPageCallback_) { - this.pendingLoadPageCallback_({result: {netError: 0}}); + this.finishLoading_({netError: NetError.ERR_ABORTED}); } this.page_ = page; this.pendingLoadPageCallback_ = null; - this.pendingLoadPageResult_ = {netError: 0}; + this.customHeaderValue_ = null; - this.webview_.addEventListener('loadstop', this.webviewListener_); - this.webview_.addEventListener('loadabort', this.webviewListener_); + this.webview_.addEventListener('loadstop', this.loadStopListener_); + this.webview_.addEventListener('loadabort', this.loadAbortListener_); + this.webview_.request.onCompleted.addListener( + this.requestCompletedListener_, + {urls: ['<all_urls>'], types: ['main_frame']}); + this.webview_.request.onErrorOccurred.addListener( + this.errorOccurredListener_, + {urls: ['<all_urls>'], types: ['main_frame']}); + this.timerId_ = + window.setTimeout(this.timeoutListener_, PAGE_LOAD_TIMEOUT_MS); + this.webview_.src = page.url.url; return new Promise(resolve => { @@ -112,26 +153,86 @@ h => h.name.toUpperCase() == this.page_.customHeaderName.toUpperCase()); if (header) { - this.pendingLoadPageResult_.customHeaderValue = header.value; + this.customHeaderValue_ = header.value; } return {}; } /** - * Called when the webview sends a loadstop or loadabort event. + * Called when the webview stops loading. * @param {!Event} e * @private */ - webviewFinishedLoading_(e) { - this.webview_.removeEventListener('loadstop', this.webviewListener_); - this.webview_.removeEventListener('loadabort', this.webviewListener_); + onLoadStop_(e) { + // If we got here, this means that all the error handling listeners did + // not fire, so just return a success result. + const result = {netError: NetError.OK}; + if (this.customHeaderValue_) { + result.customHeaderValue = this.customHeaderValue_; + } + this.finishLoading_(result); + } - if (e.type == 'loadabort') { - this.pendingLoadPageResult_.netError = e.code; + /** + * Called when the webview sends a loadabort event. + * @param {!Event} e + * @private + */ + onLoadAbort_(e) { + const netError = e.code ? e.code : NetError.ERR_FAILED; + this.finishLoading_({netError: netError}); + } + + /** + * Called when the webview completes a page request. + * @param {!Object} requestDetails + * @private + */ + onRequestCompleted_(requestDetails) { + if (!requestDetails.statusCode || requestDetails.statusCode == 200) { + // We don't finish loading with a success here because at this point the + // webview has finished the request, but it didn't render the results + // yet. If we call finishLoading and start showing the webview, we will + // flicker with the old results. + return; } - this.pendingLoadPageCallback_({result: this.pendingLoadPageResult_}); + // HTTP errors in the 4xx and 5xx range will hit here. + this.finishLoading_({netError: NetError.ERR_FAILED}); + } + + /** + * Called when the webview encounters an error. + * @private + */ + onErrorOccurred_() { + this.finishLoading_({netError: NetError.ERR_FAILED}); + } + + /** + * Called when the webview load times out. + * @private + */ + onTimeout_() { + this.finishLoading_({netError: NetError.ERR_TIMED_OUT}); + } + + /** + * Called to clean up the webview listeners and run the pending callback + * with the given result. + * @param {!chromeos.supervision.mojom.OnboardingLoadPageResult} result + */ + finishLoading_(result) { + this.webview_.removeEventListener('loadstop', this.loadStopListener_); + this.webview_.removeEventListener('loadabort', this.loadAbortListener_); + this.webview_.request.onCompleted.removeListener( + this.requestCompletedListener_); + this.webview_.request.onErrorOccurred.removeListener( + this.errorOccurredListener_); + window.clearTimeout(this.timerId_); + + this.pendingLoadPageCallback_({result: result}); } } @@ -141,12 +242,21 @@ behaviors: [LoginScreenBehavior, OobeDialogHostBehavior], properties: { - /** True if the webview loaded the page. */ - isReady_: {type: Boolean, value: false}, + /* + * Properties to hide the main dialogs used to present the flow. Only one + * of them can be shown at a time. + */ + hideContent_: {type: Boolean, value: true}, + hideLoadingDialog_: {type: Boolean, value: true}, + hideRetryDialog_: {type: Boolean, value: true}, + /* + * Properties to hide the buttons that can trigger flow actions. + */ hideBackButton_: {type: Boolean, value: true}, hideSkipButton_: {type: Boolean, value: true}, hideNextButton_: {type: Boolean, value: true}, + hideRetryButton_: {type: Boolean, value: true}, }, /** Overridden from LoginScreenBehavior. */ @@ -187,7 +297,6 @@ /** @override */ ready: function() { this.initializeLoginScreen('SupervisionOnboardingScreen', { - commonScreenSize: true, resetAllowed: true, }); }, @@ -197,12 +306,18 @@ * @private */ setPresentation_: function(presentation) { - this.isReady_ = presentation.state == + this.hideContent_ = presentation.state != chromeos.supervision.mojom.OnboardingPresentationState.kReady; + this.hideRetryDialog_ = presentation.state != + chromeos.supervision.mojom.OnboardingPresentationState + .kPageLoadFailed; + this.hideLoadingDialog_ = presentation.state != + chromeos.supervision.mojom.OnboardingPresentationState.kLoading; this.hideBackButton_ = !presentation.canShowPreviousPage; this.hideSkipButton_ = !presentation.canSkipFlow; this.hideNextButton_ = !presentation.canShowNextPage; + this.hideRetryButton_ = !presentation.canRetryPageLoad; }, /** @private */ @@ -222,5 +337,11 @@ this.controller_.handleAction( chromeos.supervision.mojom.OnboardingAction.kShowNextPage); }, + + /** @private */ + onRetry_: function() { + this.controller_.handleAction( + chromeos.supervision.mojom.OnboardingAction.kRetryPageLoad); + }, }); }
diff --git a/chrome/browser/resources/local_ntp/customize.js b/chrome/browser/resources/local_ntp/customize.js index ef250348..f5d3811 100644 --- a/chrome/browser/resources/local_ntp/customize.js +++ b/chrome/browser/resources/local_ntp/customize.js
@@ -92,6 +92,7 @@ BACKGROUNDS_UPLOAD_WRAPPER: 'backgrounds-upload-wrapper', CANCEL: 'bg-sel-footer-cancel', COLORS_BUTTON: 'colors-button', + COLORS_DEFAULT: 'colors-default', COLORS_MENU: 'colors-menu', CUSTOMIZATION_MENU: 'customization-menu', CUSTOM_LINKS_RESTORE_DEFAULT: 'custom-links-restore-default', @@ -369,8 +370,7 @@ customize.setBackground = function( url, attributionLine1, attributionLine2, attributionActionUrl) { if (configData.richerPicker) { - $(customize.IDS.CUSTOMIZATION_MENU).close(); - customize.richerPicker_resetImageMenu(false); + customize.richerPicker_closeCustomizationMenu(); } else { customize.closeCollectionDialog($(customize.IDS.MENU)); } @@ -1047,11 +1047,19 @@ }; /** + * Close customization menu. + */ +customize.richerPicker_closeCustomizationMenu = function() { + $(customize.IDS.CUSTOMIZATION_MENU).close(); + customize.richerPicker_resetCustomizationMenu(); +}; + +/** * Initialize the settings menu, custom backgrounds dialogs, and custom * links menu items. Set the text and event handlers for the various * elements. - * @param {!Function} showErrorNotification Called when the error notification - * should be displayed. + * @param {!Function} showErrorNotification Called when the error + * notification should be displayed. * @param {!Function} hideCustomLinkNotification Called when the custom link * notification should be hidden. */ @@ -1091,8 +1099,11 @@ }; $(customize.IDS.MENU_CANCEL).onclick = function(event) { - $(customize.IDS.CUSTOMIZATION_MENU).close(); - customize.richerPicker_resetCustomizationMenu(); + if (customize.richerPicker_selectedOption == + $(customize.IDS.COLORS_BUTTON)) { + customize.colorsCancel(); + } + customize.richerPicker_closeCustomizationMenu(); }; @@ -1428,11 +1439,18 @@ if (done.disabled) { return; } - customize.setBackground( - customize.selectedTile.dataset.url, - customize.selectedTile.dataset.attributionLine1, - customize.selectedTile.dataset.attributionLine2, - customize.selectedTile.dataset.attributionActionUrl); + + if (customize.richerPicker_selectedOption == + $(customize.IDS.COLORS_BUTTON)) { + customize.colorsDone(); + customize.richerPicker_closeCustomizationMenu(); + } else { + customize.setBackground( + customize.selectedTile.dataset.url, + customize.selectedTile.dataset.attributionLine1, + customize.selectedTile.dataset.attributionLine2, + customize.selectedTile.dataset.attributionActionUrl); + } }; $(customize.IDS.DONE).onclick = doneInteraction; $(customize.IDS.MENU_DONE).onclick = doneInteraction; @@ -1578,19 +1596,38 @@ }; /** + * Updates what is the selected tile of the Color menu and does necessary + * changes for displaying the selection. + * @param {Object} event The event attributes for the interaction. + */ +customize.updateColorMenuTileSelection = function(event) { + if (customize.selectedColorTile) { + customize.richerPicker_deselectTile(customize.selectedColorTile); + } + + customize.richerPicker_selectTile(event.target); + customize.selectedColorTile = event.target; +}; + +/** * Handles color tile selection. * @param {Object} event The event attributes for the interaction. */ customize.colorTileInteraction = function(event) { - if (customize.selectedColorTile) { - customize.richerPicker_deselectTile(customize.selectedColorTile); - } - customize.richerPicker_selectTile(event.target); - customize.selectedColorTile = event.target; + customize.updateColorMenuTileSelection(event); ntpApiHandle.applyAutogeneratedTheme(event.target.dataset.color.split(',')); }; /** + * Handles default theme tile selection. + * @param {Object} event The event attributes for the interaction. + */ +customize.defaultTileInteraction = function(event) { + customize.updateColorMenuTileSelection(event); + ntpApiHandle.applyDefaultTheme(); +}; + +/** * Loads tiles for colors menu. */ customize.loadColorTiles = function() { @@ -1610,5 +1647,26 @@ customize.colorTileInteraction); $(customize.IDS.COLORS_MENU).appendChild(tile); } + + // Configure the default tile. + $(customize.IDS.COLORS_DEFAULT).dataset.color = null; + $(customize.IDS.COLORS_DEFAULT).onclick = customize.defaultTileInteraction; + customize.colorMenuLoaded = true; }; + +/** + * Handles 'Done' button interaction when Colors is the current option in the + * customization menu. + */ +customize.colorsDone = function() { + ntpApiHandle.confirmThemeChanges(); +}; + +/** + * Handles 'Cancel' button interaction when Colors is the current option in the + * customization menu. + */ +customize.colorsCancel = function() { + ntpApiHandle.revertThemeChanges(); +};
diff --git a/chrome/browser/resources/local_ntp/externs.js b/chrome/browser/resources/local_ntp/externs.js index db5bcf7..d6632a10 100644 --- a/chrome/browser/resources/local_ntp/externs.js +++ b/chrome/browser/resources/local_ntp/externs.js
@@ -162,6 +162,11 @@ window.chrome.embeddedSearch.newTabPage.applyAutogeneratedTheme; /** + * No params. + */ +window.chrome.embeddedSearch.newTabPage.applyDefaultTheme; + +/** * @return {boolean} areShortcutsVisible */ window.chrome.embeddedSearch.newTabPage.areShortcutsVisible; @@ -180,6 +185,11 @@ window.chrome.embeddedSearch.newTabPage.blacklistSearchSuggestionWithHash; /** + * No params. + */ +window.chrome.embeddedSearch.newTabPage.confirmThemeChanges; + +/** * @param {number} rid */ window.chrome.embeddedSearch.newTabPage.deleteMostVisitedItem; @@ -264,6 +274,11 @@ window.chrome.embeddedSearch.newTabPage.resetCustomLinks; /** + * No params. + */ +window.chrome.embeddedSearch.newTabPage.revertThemeChanges; + +/** * @param {number} task_version * @param {number} task_id * @param {string} hash
diff --git a/chrome/browser/resources/local_ntp/icons/default-theme.svg b/chrome/browser/resources/local_ntp/icons/default-theme.svg new file mode 100644 index 0000000..e516d31 --- /dev/null +++ b/chrome/browser/resources/local_ntp/icons/default-theme.svg
@@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="176px" height="120px" viewBox="0 0 176 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 55.1 (78136) - https://sketchapp.com --> + <title>theme-default</title> + <desc>Created with Sketch.</desc> + <g id="theme-default" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <rect id="window-frame" fill="#DEE1E6" fill-rule="nonzero" x="0" y="0" width="176" height="120" rx="4"></rect> + <path d="M8.60546875,45 L8.60546875,27 C8.60546875,22.581722 12.1871908,19 16.6054688,19 L70.1908482,19 C74.6091262,19 78.1908482,22.581722 78.1908482,27 L78.1908482,45 L176,45 L176,80 L3.55271368e-13,80 L3.55271368e-13,45 L8.60546875,45 Z" id="toolbar" fill="#FFFFFF" fill-rule="nonzero"></path> + <rect id="omnibox" fill="#BDC1C6" fill-rule="nonzero" opacity="0.200000003" x="9" y="51" width="126" height="21" rx="10.5"></rect> + <path d="M153.428571,56 C156.977143,56 159.857143,58.88 159.857143,62.4285714 C159.857143,65.9771429 156.977143,68.8571429 153.428571,68.8571429 C149.88,68.8571429 147,65.9771429 147,62.4285714 C147,58.88 149.88,56 153.428571,56 Z M153.428571,57.9285714 C152.361429,57.9285714 151.5,58.79 151.5,59.8571429 C151.5,60.9242857 152.361429,61.7857143 153.428571,61.7857143 C154.495714,61.7857143 155.357143,60.9242857 155.357143,59.8571429 C155.357143,58.79 154.495714,57.9285714 153.428571,57.9285714 Z M153.428571,67.0571429 C155.035714,67.0571429 156.456429,66.2342857 157.285714,64.9871429 C157.266429,63.7078571 154.707857,63.0071429 153.428571,63.0071429 C152.142857,63.0071429 149.590714,63.7078571 149.571429,64.9871429 C150.400714,66.2342857 151.821429,67.0571429 153.428571,67.0571429 Z M154.833333,30.1666667 L158.166667,30.1666667 C158.626904,30.1666667 159,30.5397627 159,31 C159,31.4602373 158.626904,31.8333333 158.166667,31.8333333 L154.833333,31.8333333 L154.833333,35.1666667 C154.833333,35.626904 154.460237,36 154,36 C153.539763,36 153.166667,35.626904 153.166667,35.1666667 L153.166667,31.8333333 L149.833333,31.8333333 C149.373096,31.8333333 149,31.4602373 149,31 C149,30.5397627 149.373096,30.1666667 149.833333,30.1666667 L153.166667,30.1666667 L153.166667,26.8333333 C153.166667,26.373096 153.539763,26 154,26 C154.460237,26 154.833333,26.373096 154.833333,26.8333333 L154.833333,30.1666667 Z M23.2548828,36 L22.2929688,36 L18.8701172,30.5019531 L18.8408203,30.5117188 L18.8408203,36 L17.8789062,36 L17.8789062,28.890625 L18.8408203,28.890625 L22.2636719,34.3789062 L22.2929688,34.3691406 L22.2929688,28.890625 L23.2548828,28.890625 L23.2548828,36 Z M27.2295423,36.1025391 C26.4938615,36.1025391 25.9087437,35.8575871 25.4741712,35.3676758 C25.0395987,34.8777645 24.8223157,34.2421914 24.8223157,33.4609375 L24.8223157,33.2460938 C24.8223157,32.4941369 25.046109,31.8683293 25.4937024,31.3686523 C25.9412958,30.8689754 26.4710757,30.6191406 27.0830579,30.6191406 C27.7959521,30.6191406 28.3346837,30.8339822 28.6992688,31.2636719 C29.063854,31.6933615 29.2461438,32.2662725 29.2461438,32.9824219 L29.2461438,33.5830078 L25.8184095,33.5830078 L25.803761,33.6074219 C25.8135267,34.1152369 25.9421061,34.5327132 26.1895032,34.8598633 C26.4369003,35.1870134 26.7835765,35.3505859 27.2295423,35.3505859 C27.5550647,35.3505859 27.8407064,35.3041997 28.0864759,35.2114258 C28.3322453,35.1186519 28.5446455,34.9908862 28.7236829,34.828125 L29.0996595,35.453125 C28.9108564,35.6386728 28.6618355,35.7932937 28.3525891,35.9169922 C28.0433428,36.0406907 27.6689976,36.1025391 27.2295423,36.1025391 Z M27.0830579,31.3759766 C26.7607907,31.3759766 26.4857283,31.5118802 26.2578626,31.7836914 C26.0299969,32.0555027 25.8900243,32.3964823 25.8379407,32.8066406 L25.8477063,32.8310547 L28.2842298,32.8310547 L28.2842298,32.7041016 C28.2842298,32.3264955 28.1833193,32.0107435 27.9814954,31.7568359 C27.7796715,31.5029284 27.4801953,31.3759766 27.0830579,31.3759766 Z M31.8829127,34.0761719 L31.9952173,34.7158203 L32.0245142,34.7158203 L32.161233,34.0761719 L33.2159205,30.7167969 L33.9874048,30.7167969 L35.0469752,34.0761719 L35.1983423,34.7890625 L35.2276392,34.7890625 L35.3692408,34.0761719 L36.1993189,30.7167969 L37.1563502,30.7167969 L35.623147,36 L34.8467798,36 L33.826272,32.7822266 L33.6065455,31.8837891 L33.5772486,31.8886719 L33.3672877,32.7822266 L32.3614283,36 L31.5850611,36 L30.051858,30.7167969 L31.0088892,30.7167969 L31.8829127,34.0761719 Z M42.2638722,29.4423828 L42.2638722,30.7167969 L43.2648487,30.7167969 L43.2648487,31.4296875 L42.2638722,31.4296875 L42.2638722,34.6376953 C42.2638722,34.8850924 42.3151412,35.0592443 42.4176808,35.1601562 C42.5202203,35.2610682 42.6561239,35.3115234 42.8253956,35.3115234 C42.8807344,35.3115234 42.941769,35.3050131 43.0085011,35.2919922 C43.0752332,35.2789713 43.1346401,35.2626954 43.1867237,35.2431641 L43.3136769,35.9023438 C43.2420619,35.9609378 43.1370825,36.0089516 42.9987355,36.0463867 C42.8603884,36.0838218 42.7212296,36.1025391 42.581255,36.1025391 C42.190628,36.1025391 41.8797587,35.9845389 41.6486378,35.7485352 C41.4175169,35.5125314 41.3019581,35.1422551 41.3019581,34.6376953 L41.3019581,31.4296875 L40.4621144,31.4296875 L40.4621144,30.7167969 L41.3019581,30.7167969 L41.3019581,29.4423828 L42.2638722,29.4423828 Z M47.9035707,36 C47.8710184,35.840494 47.8457908,35.6997076 47.8278871,35.5776367 C47.8099834,35.4555658 47.799404,35.3326829 47.7961488,35.2089844 C47.6171115,35.4628919 47.3835526,35.6752921 47.0954652,35.8461914 C46.8073778,36.0170907 46.4973223,36.1025391 46.1652894,36.1025391 C45.6151565,36.1025391 45.1960526,35.9617527 44.9079652,35.6801758 C44.6198778,35.3985989 44.4758363,35.0104191 44.4758363,34.515625 C44.4758363,34.0110652 44.6800986,33.6163751 45.0886293,33.331543 C45.49716,33.0467108 46.0513536,32.9042969 46.7512269,32.9042969 L47.7961488,32.9042969 L47.7961488,32.3818359 C47.7961488,32.0725896 47.7017487,31.8276376 47.5129457,31.6469727 C47.3241427,31.4663077 47.0572182,31.3759766 46.7121644,31.3759766 C46.4029181,31.3759766 46.1514558,31.4549146 45.9577699,31.612793 C45.764084,31.7706714 45.6672426,31.9602854 45.6672426,32.1816406 L44.7492738,32.1816406 L44.7395082,32.1523438 C44.7199768,31.7682272 44.9014529,31.4166683 45.2839418,31.0976562 C45.6664307,30.7786442 46.1604036,30.6191406 46.7658754,30.6191406 C47.3648367,30.6191406 47.8466027,30.7713201 48.2111879,31.0756836 C48.575773,31.3800471 48.7580629,31.818682 48.7580629,32.3916016 L48.7580629,34.9355469 C48.7580629,35.1243499 48.7678284,35.3066397 48.7873598,35.4824219 C48.8068911,35.658204 48.842698,35.8307283 48.8947816,36 L47.9035707,36 Z M46.306891,35.296875 C46.6552,35.296875 46.9693245,35.2073577 47.2492738,35.0283203 C47.5292231,34.849283 47.711513,34.6442069 47.7961488,34.4130859 L47.7961488,33.5537109 L46.7170473,33.5537109 C46.3296755,33.5537109 46.01962,33.6513662 45.7868715,33.8466797 C45.5541229,34.0419932 45.4377504,34.2714831 45.4377504,34.5351562 C45.4377504,34.7695324 45.5109918,34.9550774 45.6574769,35.0917969 C45.803962,35.2285163 46.0204312,35.296875 46.306891,35.296875 Z M54.8713942,33.5585938 C54.8713942,34.3203163 54.6882906,34.9347307 54.3220778,35.4018555 C53.955865,35.8689802 53.4521266,36.1025391 52.8108473,36.1025391 C52.4625383,36.1025391 52.1598069,36.0349942 51.9026442,35.8999023 C51.6454815,35.7648105 51.4322674,35.565431 51.2629958,35.3017578 L51.1458083,36 L50.3596754,36 L50.3596754,28.3828125 L51.3215895,28.3828125 L51.3215895,31.3417969 C51.487606,31.1074207 51.6934958,30.928386 51.9392653,30.8046875 C52.1850348,30.680989 52.472304,30.6191406 52.8010817,30.6191406 C53.4521266,30.6191406 53.959934,30.8795547 54.3245192,31.4003906 C54.6891044,31.9212266 54.8713942,32.6064411 54.8713942,33.4560547 L54.8713942,33.5585938 Z M53.9094801,33.4560547 C53.9094801,32.8505829 53.7979904,32.35661 53.5750075,31.9741211 C53.3520246,31.5916322 53.0126725,31.4003906 52.5569411,31.4003906 C52.2607156,31.4003906 52.0108809,31.4728183 51.8074294,31.6176758 C51.6039778,31.7625333 51.4420328,31.95703 51.3215895,32.2011719 L51.3215895,34.4912109 C51.445288,34.7516289 51.607233,34.9550774 51.8074294,35.1015625 C52.0076257,35.2480476 52.2607156,35.3212891 52.5667067,35.3212891 C53.0191829,35.3212891 53.3560936,35.1601579 53.5774489,34.8378906 C53.7988042,34.5156234 53.9094801,34.0891954 53.9094801,33.5585938 L53.9094801,33.4560547 Z" id="icon-text" fill="#3C4043" fill-rule="nonzero"></path> + </g> +</svg> \ No newline at end of file
diff --git a/chrome/browser/resources/local_ntp/local_ntp.css b/chrome/browser/resources/local_ntp/local_ntp.css index 01672f3b..9cfeb66 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.css +++ b/chrome/browser/resources/local_ntp/local_ntp.css
@@ -1395,3 +1395,10 @@ margin-inline-end: 20px; margin-inline-start: auto; } + +#colors-default-icon { + background-image: url(icons/default-theme.svg); + background-repeat: no-repeat; + background-size: contain; + opacity: 1; +}
diff --git a/chrome/browser/resources/local_ntp/local_ntp.html b/chrome/browser/resources/local_ntp/local_ntp.html index adb3f36..7d38084 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.html +++ b/chrome/browser/resources/local_ntp/local_ntp.html
@@ -259,7 +259,13 @@ </div> </div> </div> - <div id="colors-menu" class="menu-panel"></div> + <div id="colors-menu" class="menu-panel"> + <div id="colors-default" class="bg-sel-tile-bg"> + <div id="colors-default-icon" class="bg-sel-tile"></div> + <div class="bg-sel-tile-title">$i18n{noBackground}</div> + </div> + </div> + </div> </div> <div id="menu-footer"> <button id="menu-cancel" class="bg-sel-footer-button paper secondary
diff --git a/chrome/browser/resources/settings/people_page/kerberos_add_account_dialog.html b/chrome/browser/resources/settings/people_page/kerberos_add_account_dialog.html index 86a6719..6955cdc0 100644 --- a/chrome/browser/resources/settings/people_page/kerberos_add_account_dialog.html +++ b/chrome/browser/resources/settings/people_page/kerberos_add_account_dialog.html
@@ -84,13 +84,13 @@ </settings-textarea> </div> <div slot="button-container"> - <paper-button class="cancel-button" + <cr-button class="cancel-button" on-click="onAdvancedConfigCancel_"> $i18n{cancel} - </paper-button> - <paper-button class="action-button" on-click="onAdvancedConfigSave_"> + </cr-button> + <cr-button class="action-button" on-click="onAdvancedConfigSave_"> $i18n{save} - </paper-button> + </cr-button> </div> </cr-dialog> </template>
diff --git a/chrome/browser/themes/browser_theme_pack.cc b/chrome/browser/themes/browser_theme_pack.cc index bb2bb13..9103e98f 100644 --- a/chrome/browser/themes/browser_theme_pack.cc +++ b/chrome/browser/themes/browser_theme_pack.cc
@@ -25,6 +25,7 @@ #include "chrome/browser/themes/theme_properties.h" #include "chrome/browser/ui/frame/window_frame_util.h" #include "chrome/common/extensions/manifest_handlers/theme_handler.h" +#include "chrome/common/themes/autogenerated_theme_util.h" #include "chrome/grit/theme_resources.h" #include "components/crx_file/id_util.h" #include "content/public/browser/browser_thread.h" @@ -371,50 +372,6 @@ return scaled_bitmap; } -// Decreases the lightness of the given color. -SkColor DarkenColor(SkColor color, float change) { - color_utils::HSL hsl; - SkColorToHSL(color, &hsl); - hsl.l -= change; - if (hsl.l >= 0.0f) - return HSLToSkColor(hsl, 255); - return color; -} - -// Increases the lightness of |source| until it reaches |contrast_ratio| with -// |base| or reaches |white_contrast| with white. This avoids decreasing -// saturation, as the alternative contrast-guaranteeing functions in color_utils -// would do. -SkColor LightenUntilContrast(SkColor source, - SkColor base, - float contrast_ratio, - float white_contrast) { - const float kBaseLuminance = color_utils::GetRelativeLuminance(base); - constexpr float kWhiteLuminance = 1.0f; - - color_utils::HSL hsl; - SkColorToHSL(source, &hsl); - float min_l = hsl.l; - float max_l = 1.0f; - - // Need only precision of 2 digits. - while (max_l - min_l > 0.01) { - hsl.l = min_l + (max_l - min_l) / 2; - float luminance = color_utils::GetRelativeLuminance(HSLToSkColor(hsl, 255)); - if (color_utils::GetContrastRatio(kBaseLuminance, luminance) >= - contrast_ratio || - (color_utils::GetContrastRatio(kWhiteLuminance, luminance) < - white_contrast)) { - max_l = hsl.l; - } else { - min_l = hsl.l; - } - } - - hsl.l = max_l; - return HSLToSkColor(hsl, 255); -} - // A ImageSkiaSource that scales 100P image to the target scale factor // if the ImageSkiaRep for the target scale factor isn't available. class ThemeImageSource: public gfx::ImageSkiaSource { @@ -796,78 +753,14 @@ // static void BrowserThemePack::GenerateFrameAndTabColors(SkColor color, BrowserThemePack* pack) { - SkColor frame_color = color; - SkColor frame_text_color; - SkColor active_tab_color = color; - SkColor tab_text_color; - constexpr float kDarkenStep = 0.03f; - constexpr float kMinWhiteContrast = 1.3f; - constexpr float kNoWhiteContrast = 0.0f; + AutogeneratedThemeColors colors = GetAutogeneratedThemeColors(color); - // Increasingly darken frame color and calculate the rest until colors with - // sufficient contrast are found. - while (true) { - // Calculate frame color to have sufficient contrast with white or dark grey - // text. - frame_text_color = color_utils::GetColorWithMaxContrast(frame_color); - SkColor blend_target = - color_utils::GetColorWithMaxContrast(frame_text_color); - frame_color = color_utils::BlendForMinContrast( - frame_color, frame_text_color, blend_target, - kPreferredReadableContrastRatio) - .color; + pack->SetColor(TP::COLOR_FRAME, colors.frame_color); + pack->SetColor(TP::COLOR_BACKGROUND_TAB, colors.frame_color); + pack->SetColor(TP::COLOR_BACKGROUND_TAB_TEXT, colors.frame_text_color); - // Generate active tab color so that it has enough contrast with the - // |frame_color| to avoid the isolation line in the tab strip. - active_tab_color = LightenUntilContrast( - frame_color, frame_color, kActiveTabMinContrast, kNoWhiteContrast); - // Try lightening the color to get more contrast with frame without getting - // too close to white. - active_tab_color = - LightenUntilContrast(active_tab_color, frame_color, - kActiveTabPreferredContrast, kMinWhiteContrast); - - // If we didn't succeed in generating active tab color with minimum - // contrast with frame, then darken the frame color and try again. - if (color_utils::GetContrastRatio(frame_color, active_tab_color) < - kActiveTabMinContrast) { - frame_color = DarkenColor(frame_color, kDarkenStep); - continue; - } - - // Select active tab text color, if possible. - tab_text_color = color_utils::GetColorWithMaxContrast(active_tab_color); - - if (!color_utils::IsDark(active_tab_color)) { - // If active tab is light color then continue lightening it until enough - // contrast with dark text is reached. - tab_text_color = color_utils::GetColorWithMaxContrast(active_tab_color); - active_tab_color = LightenUntilContrast(active_tab_color, tab_text_color, - kPreferredReadableContrastRatio, - kNoWhiteContrast); - break; - } - - // If the active tab color is dark and has enough contrast with white text. - // Then we are all set. - if (color_utils::GetContrastRatio(active_tab_color, SK_ColorWHITE) >= - kPreferredReadableContrastRatio) - break; - - // If the active tab color is a dark color but the contrast with white is - // not enough then we should darken the active tab color to reach the - // contrast with white. But to keep the contrast with the frame we should - // also darken the frame color. Therefore, just darken the frame color and - // try again. - frame_color = DarkenColor(frame_color, kDarkenStep); - } - - pack->SetColor(TP::COLOR_FRAME, frame_color); - pack->SetColor(TP::COLOR_BACKGROUND_TAB, frame_color); - pack->SetColor(TP::COLOR_BACKGROUND_TAB_TEXT, frame_text_color); - - pack->SetColor(TP::COLOR_TOOLBAR, active_tab_color); - pack->SetColor(TP::COLOR_TAB_TEXT, tab_text_color); + pack->SetColor(TP::COLOR_TOOLBAR, colors.active_tab_color); + pack->SetColor(TP::COLOR_TAB_TEXT, colors.active_tab_text_color); } BrowserThemePack::BrowserThemePack(ThemeType theme_type)
diff --git a/chrome/browser/themes/browser_theme_pack.h b/chrome/browser/themes/browser_theme_pack.h index a6aed68..4943e5e 100644 --- a/chrome/browser/themes/browser_theme_pack.h +++ b/chrome/browser/themes/browser_theme_pack.h
@@ -34,15 +34,6 @@ class DataPack; } -// Constants for autogenerated themes. -// Minimum contrast for active tab and frame color to avoid isolation line in -// the tab strip. -constexpr float kActiveTabMinContrast = 1.3f; -constexpr float kActiveTabPreferredContrast = 1.6f; - -// Contrast between foreground and background. -constexpr float kPreferredReadableContrastRatio = 7.0f; - // An optimized representation of a theme, backed by a mmapped DataPack. // // The idea is to pre-process all images (tinting, compositing, etc) at theme
diff --git a/chrome/browser/themes/browser_theme_pack_unittest.cc b/chrome/browser/themes/browser_theme_pack_unittest.cc index 6a749e8..7a7bc7d 100644 --- a/chrome/browser/themes/browser_theme_pack_unittest.cc +++ b/chrome/browser/themes/browser_theme_pack_unittest.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/themes/theme_properties.h" #include "chrome/browser/ui/frame/window_frame_util.h" #include "chrome/common/chrome_paths.h" +#include "chrome/common/themes/autogenerated_theme_util.h" #include "chrome/grit/theme_resources.h" #include "content/public/test/test_browser_thread_bundle.h" #include "testing/gtest/include/gtest/gtest.h" @@ -1103,7 +1104,7 @@ auto has_readable_contrast = [](SkColor foreground_color, SkColor background_color) { return color_utils::GetContrastRatio(foreground_color, background_color) >= - kPreferredReadableContrastRatio; + kAutogeneratedThemeTextPreferredContrast; }; for (SkColor color : backgrounds) { @@ -1135,7 +1136,7 @@ EXPECT_NE(frame_color, toolbar_color); EXPECT_GE(color_utils::GetContrastRatio(frame_color, toolbar_color), - kActiveTabMinContrast); + kAutogeneratedThemeActiveTabMinContrast); } } @@ -1189,7 +1190,7 @@ EXPECT_TRUE(pack->GetColor(TP::COLOR_FRAME, &frame_color)); EXPECT_TRUE(pack->GetColor(TP::COLOR_TOOLBAR, &toolbar_color)); EXPECT_GE(color_utils::GetContrastRatio(frame_color, toolbar_color), - kActiveTabPreferredContrast); + kAutogeneratedThemeActiveTabPreferredContrast); } for (SkColor color : light_backgrounds) { @@ -1201,7 +1202,7 @@ EXPECT_TRUE(pack->GetColor(TP::COLOR_FRAME, &frame_color)); EXPECT_TRUE(pack->GetColor(TP::COLOR_TOOLBAR, &toolbar_color)); EXPECT_GE(color_utils::GetContrastRatio(frame_color, toolbar_color), - kActiveTabMinContrast); + kAutogeneratedThemeActiveTabMinContrast); } }
diff --git a/chrome/browser/ui/ash/assistant/assistant_client.cc b/chrome/browser/ui/ash/assistant/assistant_client.cc index fb61ce8..0b3ace2 100644 --- a/chrome/browser/ui/ash/assistant/assistant_client.cc +++ b/chrome/browser/ui/ash/assistant/assistant_client.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/ui/ash/assistant/assistant_image_downloader.h" #include "chrome/browser/ui/ash/assistant/assistant_setup.h" #include "chromeos/services/assistant/public/mojom/constants.mojom.h" +#include "content/public/common/content_switches.h" #include "services/service_manager/public/cpp/connector.h" namespace { @@ -66,8 +67,10 @@ chromeos::assistant::mojom::ClientPtr client_ptr; client_binding_.Bind(mojo::MakeRequest(&client_ptr)); + bool is_test = base::CommandLine::ForCurrentProcess()->HasSwitch( + ::switches::kBrowserTest); assistant_connection_->Init(std::move(client_ptr), - device_actions_.AddBinding()); + device_actions_.AddBinding(), is_test); assistant_image_downloader_ = std::make_unique<AssistantImageDownloader>(); assistant_setup_ = std::make_unique<AssistantSetup>(connector);
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc index 1323b8e..f48d9fa0 100644 --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc
@@ -1900,8 +1900,6 @@ EXPECT_EQ(3, shelf_model()->item_count()); EXPECT_EQ(ash::kBackButtonId, shelf_model()->items()[0].id.app_id); EXPECT_EQ(ash::kAppListId, shelf_model()->items()[1].id.app_id); - EXPECT_TRUE( - shelf_model()->GetShelfItemDelegate(shelf_model()->items()[1].id)); EXPECT_EQ(extension_misc::kChromeAppId, shelf_model()->items()[2].id.app_id); EXPECT_TRUE( shelf_model()->GetShelfItemDelegate(shelf_model()->items()[2].id));
diff --git a/chrome/browser/ui/ash/network/enrollment_dialog_view.cc b/chrome/browser/ui/ash/network/enrollment_dialog_view.cc index bf44541..0f723cb 100644 --- a/chrome/browser/ui/ash/network/enrollment_dialog_view.cc +++ b/chrome/browser/ui/ash/network/enrollment_dialog_view.cc
@@ -163,7 +163,7 @@ label->SetAllowCharacterBreak(true); views::GridLayout* grid_layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = grid_layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::FILL, // Horizontal resize.
diff --git a/chrome/browser/ui/ash/session_controller_client_impl_unittest.cc b/chrome/browser/ui/ash/session_controller_client_impl_unittest.cc index f4fccdd9..0a389528 100644 --- a/chrome/browser/ui/ash/session_controller_client_impl_unittest.cc +++ b/chrome/browser/ui/ash/session_controller_client_impl_unittest.cc
@@ -23,6 +23,7 @@ #include "chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h" #include "chrome/browser/supervised_user/supervised_user_service.h" #include "chrome/browser/supervised_user/supervised_user_service_factory.h" +#include "chrome/browser/ui/ash/assistant/assistant_client.h" #include "chrome/browser/ui/ash/test_session_controller.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_browser_process.h" @@ -111,6 +112,8 @@ user_manager_ = new TestChromeUserManager; user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>( base::WrapUnique(user_manager_)); + // Initialize AssistantClient singleton. + assistant_client_ = std::make_unique<AssistantClient>(); profile_manager_.reset( new TestingProfileManager(TestingBrowserProcess::GetGlobal())); @@ -121,6 +124,7 @@ } void TearDown() override { + assistant_client_.reset(); user_manager_enabler_.reset(); user_manager_ = nullptr; profile_manager_.reset(); @@ -183,6 +187,7 @@ content::TestBrowserThreadBundle threads_; content::TestServiceManagerContext context_; std::unique_ptr<TestingProfileManager> profile_manager_; + std::unique_ptr<AssistantClient> assistant_client_; session_manager::SessionManager session_manager_; private:
diff --git a/chrome/browser/ui/tabs/tab_strip_model.cc b/chrome/browser/ui/tabs/tab_strip_model.cc index 7f9e769a..d868903 100644 --- a/chrome/browser/ui/tabs/tab_strip_model.cc +++ b/chrome/browser/ui/tabs/tab_strip_model.cc
@@ -455,8 +455,6 @@ void TabStripModel::SendDetachWebContentsNotifications( DetachNotifications* notifications) { - std::vector<TabStripModelChange::Delta> deltas; - // Sort the DetachedWebContents in decreasing order of // |index_before_any_removals|. This is because |index_before_any_removals| is // used by observers to update their own copy of TabStripModel state, and each
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc index 6e91367..b4f371b 100644 --- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc +++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc
@@ -91,7 +91,7 @@ class BulletedPermissionsList : public views::View { public: BulletedPermissionsList() { - layout_ = SetLayoutManager(std::make_unique<views::GridLayout>(this)); + layout_ = SetLayoutManager(std::make_unique<views::GridLayout>()); // Create 3 columns: the bullet, the bullet text, and the revoke button. views::ColumnSet* column_set = layout_->AddColumnSet(kBulletColumnSetId);
diff --git a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc index a03f4c3..2d00014b 100644 --- a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc +++ b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc
@@ -399,8 +399,8 @@ auto description_label = CreateDescriptionLabel(); std::unique_ptr<views::View> all_labels = std::make_unique<views::View>(); - views::GridLayout* grid_layout = all_labels->SetLayoutManager( - std::make_unique<views::GridLayout>(all_labels.get())); + views::GridLayout* grid_layout = + all_labels->SetLayoutManager(std::make_unique<views::GridLayout>()); BuildColumnSet(grid_layout); grid_layout->StartRow(0, 0); grid_layout->AddView(value_label.release());
diff --git a/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc b/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc index 5153eb8..1e3c8a0 100644 --- a/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc +++ b/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc
@@ -51,7 +51,7 @@ static views::GridLayout* ResetOverlayLayout(views::View* overlay) { views::GridLayout* overlay_layout = - overlay->SetLayoutManager(std::make_unique<views::GridLayout>(overlay)); + overlay->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = overlay_layout->AddColumnSet(0); // The throbber's checkmark is 18dp. columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER,
diff --git a/chrome/browser/ui/views/autofill/payments/payments_view_util.cc b/chrome/browser/ui/views/autofill/payments/payments_view_util.cc index 1c97543..2b432fd 100644 --- a/chrome/browser/ui/views/autofill/payments/payments_view_util.cc +++ b/chrome/browser/ui/views/autofill/payments/payments_view_util.cc
@@ -45,7 +45,7 @@ TitleWithIconAndSeparatorView::TitleWithIconAndSeparatorView( const base::string16& window_title) { views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = layout->AddColumnSet(0); // Add columns for the Google Pay icon, the separator, and the title label.
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc index e82ff63..67c21059 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
@@ -235,7 +235,7 @@ SetLayoutManager(std::make_unique<views::FillLayout>()); bookmark_contents_view_ = new views::View(); views::GridLayout* layout = bookmark_contents_view_->SetLayoutManager( - std::make_unique<views::GridLayout>(bookmark_contents_view_)); + std::make_unique<views::GridLayout>()); constexpr int kColumnId = 0; ConfigureTextfieldStack(layout, kColumnId);
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc index bea4e3a..f2186a8 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
@@ -327,7 +327,7 @@ } views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); const int labels_column_set_id = 0;
diff --git a/chrome/browser/ui/views/bulleted_label_list_view.cc b/chrome/browser/ui/views/bulleted_label_list_view.cc index 8731cad..f52c1855 100644 --- a/chrome/browser/ui/views/bulleted_label_list_view.cc +++ b/chrome/browser/ui/views/bulleted_label_list_view.cc
@@ -49,7 +49,7 @@ BulletedLabelListView::BulletedLabelListView( const std::vector<base::string16>& texts) { views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = layout->AddColumnSet(kColumnSetId); int width = ChromeLayoutProvider::Get()->GetDistanceMetric(
diff --git a/chrome/browser/ui/views/certificate_selector.cc b/chrome/browser/ui/views/certificate_selector.cc index 3c1723b..0f196d3 100644 --- a/chrome/browser/ui/views/certificate_selector.cc +++ b/chrome/browser/ui/views/certificate_selector.cc
@@ -202,7 +202,7 @@ void CertificateSelector::InitWithText( std::unique_ptr<views::View> text_label) { views::GridLayout* const layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); const int kColumnSetId = 0; views::ColumnSet* const column_set = layout->AddColumnSet(kColumnSetId);
diff --git a/chrome/browser/ui/views/collected_cookies_views.cc b/chrome/browser/ui/views/collected_cookies_views.cc index d39e8fe..c70d8d4 100644 --- a/chrome/browser/ui/views/collected_cookies_views.cc +++ b/chrome/browser/ui/views/collected_cookies_views.cc
@@ -393,7 +393,7 @@ void CollectedCookiesViews::Init() { views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); // Add margin above the content. The left, right, and bottom margins are added @@ -462,7 +462,7 @@ auto pane = std::make_unique<views::View>(); views::GridLayout* layout = - pane->SetLayoutManager(std::make_unique<views::GridLayout>(pane.get())); + pane->SetLayoutManager(std::make_unique<views::GridLayout>()); pane->SetBorder( views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric( @@ -529,7 +529,7 @@ auto pane = std::make_unique<views::View>(); views::GridLayout* layout = - pane->SetLayoutManager(std::make_unique<views::GridLayout>(pane.get())); + pane->SetLayoutManager(std::make_unique<views::GridLayout>()); pane->SetBorder( views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric( views::INSETS_DIALOG_SUBSECTION))); @@ -567,8 +567,8 @@ { auto allowed = std::make_unique<views::View>(); - views::GridLayout* layout = allowed->SetLayoutManager( - std::make_unique<views::GridLayout>(allowed.get())); + views::GridLayout* layout = + allowed->SetLayoutManager(std::make_unique<views::GridLayout>()); std::unique_ptr<views::LabelButton> block_allowed_button = views::MdTextButton::CreateSecondaryUiButton( @@ -586,8 +586,8 @@ { auto blocked = std::make_unique<views::View>(); - views::GridLayout* layout = blocked->SetLayoutManager( - std::make_unique<views::GridLayout>(blocked.get())); + views::GridLayout* layout = + blocked->SetLayoutManager(std::make_unique<views::GridLayout>()); blocked->SetVisible(false); std::unique_ptr<views::LabelButton> allow_blocked_button =
diff --git a/chrome/browser/ui/views/confirm_bubble_views.cc b/chrome/browser/ui/views/confirm_bubble_views.cc index 3696902..fb5f841 100644 --- a/chrome/browser/ui/views/confirm_bubble_views.cc +++ b/chrome/browser/ui/views/confirm_bubble_views.cc
@@ -29,7 +29,7 @@ set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType( views::TEXT, views::TEXT)); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); // Use a fixed maximum message width, so longer messages will wrap. const int kMaxMessageWidth = 400;
diff --git a/chrome/browser/ui/views/content_setting_bubble_contents.cc b/chrome/browser/ui/views/content_setting_bubble_contents.cc index 4aefdbd..f10f968 100644 --- a/chrome/browser/ui/views/content_setting_bubble_contents.cc +++ b/chrome/browser/ui/views/content_setting_bubble_contents.cc
@@ -94,7 +94,7 @@ const ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); constexpr int kColumnSetId = 0; views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId); column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, @@ -318,7 +318,7 @@ void ContentSettingBubbleContents::ListItemContainer::ResetLayout() { views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* item_list_column_set = layout->AddColumnSet(0); item_list_column_set->AddColumn( views::GridLayout::LEADING, views::GridLayout::FILL,
diff --git a/chrome/browser/ui/views/cookie_info_view.cc b/chrome/browser/ui/views/cookie_info_view.cc index 24c613d6..4d67a13 100644 --- a/chrome/browser/ui/views/cookie_info_view.cc +++ b/chrome/browser/ui/views/cookie_info_view.cc
@@ -117,7 +117,7 @@ DCHECK(!name_value_field_); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); const gfx::Insets& dialog_insets = provider->GetInsetsMetric(views::INSETS_DIALOG);
diff --git a/chrome/browser/ui/views/create_application_shortcut_view.cc b/chrome/browser/ui/views/create_application_shortcut_view.cc index 96a0aa5..5799a15 100644 --- a/chrome/browser/ui/views/create_application_shortcut_view.cc +++ b/chrome/browser/ui/views/create_application_shortcut_view.cc
@@ -104,7 +104,7 @@ // Layout controls views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); static const int kHeaderColumnSetId = 0; views::ColumnSet* column_set = layout->AddColumnSet(kHeaderColumnSetId);
diff --git a/chrome/browser/ui/views/crypto_module_password_dialog_view.cc b/chrome/browser/ui/views/crypto_module_password_dialog_view.cc index 4eb5fcc5..3ef8de71 100644 --- a/chrome/browser/ui/views/crypto_module_password_dialog_view.cc +++ b/chrome/browser/ui/views/crypto_module_password_dialog_view.cc
@@ -126,7 +126,7 @@ ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* reason_column_set = layout->AddColumnSet(0); reason_column_set->AddColumn(views::GridLayout::LEADING,
diff --git a/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc b/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc index 51d2b5b..dac952d 100644 --- a/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc +++ b/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc
@@ -50,7 +50,7 @@ set_margins(layout_provider->GetDialogInsetsForContentType(views::CONTROL, views::TEXT)); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); constexpr int kColumnSetId = 0; views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId);
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc index ee68846..2896ba45 100644 --- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc +++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
@@ -290,8 +290,8 @@ auto title_container = std::make_unique<views::View>(); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); - views::GridLayout* layout = title_container->SetLayoutManager( - std::make_unique<views::GridLayout>(title_container.get())); + views::GridLayout* layout = + title_container->SetLayoutManager(std::make_unique<views::GridLayout>()); constexpr int kTitleColumnSetId = 0; views::ColumnSet* column_set = layout->AddColumnSet(kTitleColumnSetId); constexpr int icon_size = extension_misc::EXTENSION_ICON_SMALL; @@ -604,7 +604,7 @@ DCHECK(!details.empty()); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); constexpr int kColumnSetId = 0; views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId);
diff --git a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc index 923c639..41d44bfd 100644 --- a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc +++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
@@ -105,8 +105,8 @@ const int dialog_content_width = views::Widget::GetLocalizedContentsWidth( IDS_MEDIA_GALLERIES_DIALOG_CONTENT_WIDTH_CHARS); - views::GridLayout* layout = contents_->SetLayoutManager( - std::make_unique<views::GridLayout>(contents_)); + views::GridLayout* layout = + contents_->SetLayoutManager(std::make_unique<views::GridLayout>()); int column_set_id = 0; views::ColumnSet* columns = layout->AddColumnSet(column_set_id);
diff --git a/chrome/browser/ui/views/first_run_dialog.cc b/chrome/browser/ui/views/first_run_dialog.cc index aadc3d90..a92b68b7 100644 --- a/chrome/browser/ui/views/first_run_dialog.cc +++ b/chrome/browser/ui/views/first_run_dialog.cc
@@ -68,7 +68,7 @@ set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType( views::TEXT, views::TEXT)); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER,
diff --git a/chrome/browser/ui/views/global_error_bubble_view.cc b/chrome/browser/ui/views/global_error_bubble_view.cc index c6f2525a..876b3a1 100644 --- a/chrome/browser/ui/views/global_error_bubble_view.cc +++ b/chrome/browser/ui/views/global_error_bubble_view.cc
@@ -126,7 +126,7 @@ } views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); // First row, message labels. views::ColumnSet* cs = layout->AddColumnSet(0);
diff --git a/chrome/browser/ui/views/hover_button.cc b/chrome/browser/ui/views/hover_button.cc index 1ae6618..bb90435 100644 --- a/chrome/browser/ui/views/hover_button.cc +++ b/chrome/browser/ui/views/hover_button.cc
@@ -125,7 +125,7 @@ remaining_vert_spacing = (total_height - combined_line_height) / 2; views::GridLayout* grid_layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); // Badging may make the icon slightly wider (but not taller). However, the // layout should be the same whether or not the icon is badged, so allow the // badged part of the icon to extend into the padding.
diff --git a/chrome/browser/ui/views/hung_renderer_view.cc b/chrome/browser/ui/views/hung_renderer_view.cc index e3f72c8..3e8866b 100644 --- a/chrome/browser/ui/views/hung_renderer_view.cc +++ b/chrome/browser/ui/views/hung_renderer_view.cc
@@ -460,7 +460,7 @@ hung_pages_table_ = hung_pages_table.get(); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); constexpr int kColumnSetId = 0;
diff --git a/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc b/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc index f909cab..6c1d9bb9 100644 --- a/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc +++ b/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc
@@ -160,7 +160,7 @@ // views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); int cs_id = 0;
diff --git a/chrome/browser/ui/views/intent_picker_bubble_view.cc b/chrome/browser/ui/views/intent_picker_bubble_view.cc index acb60dc..fdaf96e 100644 --- a/chrome/browser/ui/views/intent_picker_bubble_view.cc +++ b/chrome/browser/ui/views/intent_picker_bubble_view.cc
@@ -329,7 +329,7 @@ void IntentPickerBubbleView::Initialize(bool show_remember_selection) { views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); // Creates a view to hold the views for each app. auto scrollable_view = std::make_unique<views::View>();
diff --git a/chrome/browser/ui/views/login_view.cc b/chrome/browser/ui/views/login_view.cc index 7e446c3..6b0c11d 100644 --- a/chrome/browser/ui/views/login_view.cc +++ b/chrome/browser/ui/views/login_view.cc
@@ -52,7 +52,7 @@ // Initialize the Grid Layout Manager used for this dialog box. views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* column_set = layout->AddColumnSet(kHeaderColumnSetId); column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1.0, views::GridLayout::FIXED, kMessageWidth, 0);
diff --git a/chrome/browser/ui/views/page_info/chosen_object_view.cc b/chrome/browser/ui/views/page_info/chosen_object_view.cc index 29c19d9..eddac546 100644 --- a/chrome/browser/ui/views/page_info/chosen_object_view.cc +++ b/chrome/browser/ui/views/page_info/chosen_object_view.cc
@@ -35,7 +35,7 @@ // Where the icon and close button columns are fixed widths. views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); const int column_set_id = 0; const int related_label_padding =
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc index 1693ce0..f16f4a1f 100644 --- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
@@ -240,7 +240,7 @@ : button_listener_(button_listener), styled_label_listener_(styled_label_listener) { views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); const int label_column_status = 1; AddColumnWithSideMargin(layout, side_margin, label_column_status); @@ -532,7 +532,7 @@ set_margins(gfx::Insets(margins().top(), 0, bottom_margin, 0)); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); constexpr int kColumnId = 0; views::ColumnSet* column_set = layout->AddColumnSet(kColumnId); column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1.0, @@ -726,7 +726,7 @@ return; views::GridLayout* layout = permissions_view_->SetLayoutManager( - std::make_unique<views::GridLayout>(permissions_view_)); + std::make_unique<views::GridLayout>()); const bool is_list_empty = permission_info_list.empty() && chosen_object_info_list.empty(); LayoutPermissionsLikeUiRow(layout, is_list_empty, kPermissionColumnSetId);
diff --git a/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc b/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc index a3b78e4..906189ca 100644 --- a/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc +++ b/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc
@@ -46,7 +46,7 @@ const base::string16& suggestion, PasswordGenerationPopupController::GenerationUIState state) { views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); BuildColumnSet(layout); layout->StartRow(views::GridLayout::kFixedSize, 0);
diff --git a/chrome/browser/ui/views/passwords/password_items_view.cc b/chrome/browser/ui/views/passwords/password_items_view.cc index 34deb56..ea905336 100644 --- a/chrome/browser/ui/views/passwords/password_items_view.cc +++ b/chrome/browser/ui/views/passwords/password_items_view.cc
@@ -261,7 +261,7 @@ RemoveAllChildViews(true); views::GridLayout* grid_layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); const int vertical_padding = ChromeLayoutProvider::Get()->GetDistanceMetric( DISTANCE_CONTROL_LIST_VERTICAL);
diff --git a/chrome/browser/ui/views/passwords/password_pending_view.cc b/chrome/browser/ui/views/passwords/password_pending_view.cc index 03294d0..24b4227 100644 --- a/chrome/browser/ui/views/passwords/password_pending_view.cc +++ b/chrome/browser/ui/views/passwords/password_pending_view.cc
@@ -242,7 +242,7 @@ CreatePasswordViewButton(this, are_passwords_revealed_).release(); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); BuildCredentialRows(layout, username_dropdown_, password_dropdown_, password_view_button_);
diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc index ee7651ff..a3b7a1c 100644 --- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc +++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc
@@ -293,7 +293,7 @@ } else { // Two comboboxes, one for month and the other for year. views::GridLayout* combobox_layout = - view->SetLayoutManager(std::make_unique<views::GridLayout>(view.get())); + view->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = combobox_layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 1.0, views::GridLayout::USE_PREF, 0, 0);
diff --git a/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc b/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc index 697d0d30..628f3fe7 100644 --- a/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc +++ b/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc
@@ -130,8 +130,8 @@ } void CvcUnmaskViewController::FillContentView(views::View* content_view) { - views::GridLayout* layout = content_view->SetLayoutManager( - std::make_unique<views::GridLayout>(content_view)); + views::GridLayout* layout = + content_view->SetLayoutManager(std::make_unique<views::GridLayout>()); content_view->SetBorder(views::CreateEmptyBorder( kPaymentRequestRowVerticalInsets, kPaymentRequestRowHorizontalInsets, kPaymentRequestRowVerticalInsets, kPaymentRequestRowHorizontalInsets));
diff --git a/chrome/browser/ui/views/payments/editor_view_controller.cc b/chrome/browser/ui/views/payments/editor_view_controller.cc index 0ff3199..60100f8 100644 --- a/chrome/browser/ui/views/payments/editor_view_controller.cc +++ b/chrome/browser/ui/views/payments/editor_view_controller.cc
@@ -256,8 +256,8 @@ constexpr int kShortFieldMinimumWidth = 176; constexpr int kLongFieldMinimumWidth = 272; - views::GridLayout* editor_layout = editor_view->SetLayoutManager( - std::make_unique<views::GridLayout>(editor_view.get())); + views::GridLayout* editor_layout = + editor_view->SetLayoutManager(std::make_unique<views::GridLayout>()); // Column set for short fields. views::ColumnSet* columns_short = editor_layout->AddColumnSet(0); columns_short->AddColumn(
diff --git a/chrome/browser/ui/views/payments/order_summary_view_controller.cc b/chrome/browser/ui/views/payments/order_summary_view_controller.cc index 4caf6ef..b6149ea 100644 --- a/chrome/browser/ui/views/payments/order_summary_view_controller.cc +++ b/chrome/browser/ui/views/payments/order_summary_view_controller.cc
@@ -57,7 +57,7 @@ row_insets)); views::GridLayout* layout = - row->SetLayoutManager(std::make_unique<views::GridLayout>(row.get())); + row->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = layout->AddColumnSet(0); // The first column has resize_percent = 1 so that it stretches all the way @@ -94,8 +94,8 @@ amount_text->SetAllowCharacterBreak(true); std::unique_ptr<views::View> amount_wrapper = std::make_unique<views::View>(); - views::GridLayout* wrapper_layout = amount_wrapper->SetLayoutManager( - std::make_unique<views::GridLayout>(amount_wrapper.get())); + views::GridLayout* wrapper_layout = + amount_wrapper->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* wrapper_columns = wrapper_layout->AddColumnSet(0); wrapper_columns->AddColumn( views::GridLayout::LEADING, views::GridLayout::CENTER,
diff --git a/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc b/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc index dd9b73c..d4482ab 100644 --- a/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc +++ b/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc
@@ -63,7 +63,7 @@ SkColor foreground = color_utils::GetColorWithMaxContrast(background_color); views::GridLayout* title_origin_layout = title_origin_container->SetLayoutManager( - std::make_unique<views::GridLayout>(title_origin_container.get())); + std::make_unique<views::GridLayout>()); views::ColumnSet* columns = title_origin_layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 1.0, @@ -107,7 +107,7 @@ title_origin_layout->AddView(origin_label); views::GridLayout* top_level_layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* top_level_columns = top_level_layout->AddColumnSet(0); top_level_columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 1.0,
diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc index 9fb68d875..7e95aac8 100644 --- a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc +++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
@@ -451,8 +451,8 @@ throbber_overlay_.SetBackground(views::CreateThemedSolidBackground( &throbber_overlay_, ui::NativeTheme::kColorId_DialogBackground)); - views::GridLayout* layout = throbber_overlay_.SetLayoutManager( - std::make_unique<views::GridLayout>(&throbber_overlay_)); + views::GridLayout* layout = + throbber_overlay_.SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* throbber_columns = layout->AddColumnSet(0); throbber_columns->AddPaddingColumn(0.5, 0); throbber_columns->AddColumn(views::GridLayout::Alignment::CENTER,
diff --git a/chrome/browser/ui/views/payments/payment_request_item_list.cc b/chrome/browser/ui/views/payments/payment_request_item_list.cc index 4fb34f8..1aee1ac1 100644 --- a/chrome/browser/ui/views/payments/payment_request_item_list.cc +++ b/chrome/browser/ui/views/payments/payment_request_item_list.cc
@@ -65,7 +65,7 @@ CreateContentView(&accessible_item_description_); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); // Add a column for the item's content view. views::ColumnSet* columns = layout->AddColumnSet(0);
diff --git a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc index 041113a..29d09eb 100644 --- a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc +++ b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
@@ -225,7 +225,7 @@ view->SetPaintToLayer(); views::GridLayout* layout = - view->SetLayoutManager(std::make_unique<views::GridLayout>(view.get())); + view->SetLayoutManager(std::make_unique<views::GridLayout>()); // Note: each view is responsible for its own padding (insets). views::ColumnSet* columns = layout->AddColumnSet(0); @@ -253,7 +253,7 @@ auto pane = std::make_unique<views::View>(); pane_ = pane.get(); views::GridLayout* pane_layout = - pane->SetLayoutManager(std::make_unique<views::GridLayout>(pane.get())); + pane->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* pane_columns = pane_layout->AddColumnSet(0); pane_columns->AddColumn( views::GridLayout::Alignment::FILL, views::GridLayout::Alignment::LEADING, @@ -429,8 +429,8 @@ container->SetBorder( views::CreateEmptyBorder(kInset, kInset, kInset, kInset)); - views::GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container.get())); + views::GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER,
diff --git a/chrome/browser/ui/views/payments/payment_request_views_util.cc b/chrome/browser/ui/views/payments/payment_request_views_util.cc index 69dcbd3..2065ce9 100644 --- a/chrome/browser/ui/views/payments/payment_request_views_util.cc +++ b/chrome/browser/ui/views/payments/payment_request_views_util.cc
@@ -190,8 +190,8 @@ std::unique_ptr<views::Background> background) { SkColor background_color = background->get_color(); container->SetBackground(std::move(background)); - views::GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + views::GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); constexpr int kVerticalInset = 14; constexpr int kHeaderHorizontalInset = 16;
diff --git a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc index 4df767f0..519e860 100644 --- a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc +++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc
@@ -153,7 +153,7 @@ std::unique_ptr<PaymentRequestRowView> row = std::make_unique<PaymentRequestRowView>(listener, clickable, row_insets); views::GridLayout* layout = - row->SetLayoutManager(std::make_unique<views::GridLayout>(row.get())); + row->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = layout->AddColumnSet(0); // A column for the section name. @@ -217,8 +217,8 @@ bool bold) { std::unique_ptr<views::View> item_amount_line = std::make_unique<views::View>(); - views::GridLayout* item_amount_layout = item_amount_line->SetLayoutManager( - std::make_unique<views::GridLayout>(item_amount_line.get())); + views::GridLayout* item_amount_layout = + item_amount_line->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* item_amount_columns = item_amount_layout->AddColumnSet(0); item_amount_columns->AddColumn( views::GridLayout::LEADING, views::GridLayout::LEADING, @@ -418,8 +418,8 @@ } void PaymentSheetViewController::FillContentView(views::View* content_view) { - views::GridLayout* layout = content_view->SetLayoutManager( - std::make_unique<views::GridLayout>(content_view)); + views::GridLayout* layout = + content_view->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, 1.0, views::GridLayout::USE_PREF, 0, 0); @@ -589,8 +589,8 @@ std::unique_ptr<PaymentRequestRowView> PaymentSheetViewController::CreatePaymentSheetSummaryRow() { std::unique_ptr<views::View> inline_summary = std::make_unique<views::View>(); - views::GridLayout* layout = inline_summary->SetLayoutManager( - std::make_unique<views::GridLayout>(inline_summary.get())); + views::GridLayout* layout = + inline_summary->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, 1.0, views::GridLayout::USE_PREF, 0, 0); @@ -760,8 +760,8 @@ if (selected_instrument) { std::unique_ptr<views::View> content_view = std::make_unique<views::View>(); - views::GridLayout* layout = content_view->SetLayoutManager( - std::make_unique<views::GridLayout>(content_view.get())); + views::GridLayout* layout = + content_view->SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 1.0, views::GridLayout::USE_PREF, 0, 0);
diff --git a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc index 2961fa0..30b2e2f 100644 --- a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc +++ b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc
@@ -211,7 +211,7 @@ views::DISTANCE_TEXTFIELD_HORIZONTAL_TEXT_PADDING); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); auto* columnset = layout->AddColumnSet(0); // Horizontally centre the content. columnset->AddPaddingColumn(1.0, 0);
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc index 50f63ddb..14ffd0342 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
@@ -402,7 +402,7 @@ // Create a grid layout to set the menu width. views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, views::GridLayout::kFixedSize, views::GridLayout::FIXED,
diff --git a/chrome/browser/ui/views/sad_tab_view.cc b/chrome/browser/ui/views/sad_tab_view.cc index 2a81daf4..a8393ed 100644 --- a/chrome/browser/ui/views/sad_tab_view.cc +++ b/chrome/browser/ui/views/sad_tab_view.cc
@@ -63,7 +63,7 @@ this, ui::NativeTheme::kColorId_DialogBackground)); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); const int column_set_id = 0; views::ColumnSet* columns = layout->AddColumnSet(column_set_id);
diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.cc b/chrome/browser/ui/views/session_crashed_bubble_view.cc index 43cfe98..52f9340 100644 --- a/chrome/browser/ui/views/session_crashed_bubble_view.cc +++ b/chrome/browser/ui/views/session_crashed_bubble_view.cc
@@ -262,7 +262,7 @@ // Create a view to hold the checkbox and the text. views::View* uma_view = new views::View(); views::GridLayout* uma_layout = - uma_view->SetLayoutManager(std::make_unique<views::GridLayout>(uma_view)); + uma_view->SetLayoutManager(std::make_unique<views::GridLayout>()); const int kReportColumnSetId = 0; views::ColumnSet* cs = uma_layout->AddColumnSet(kReportColumnSetId);
diff --git a/chrome/browser/ui/views/sync/dice_signin_button_view.cc b/chrome/browser/ui/views/sync/dice_signin_button_view.cc index e57f72a6..5a0230d 100644 --- a/chrome/browser/ui/views/sync/dice_signin_button_view.cc +++ b/chrome/browser/ui/views/sync/dice_signin_button_view.cc
@@ -48,7 +48,7 @@ bool use_account_name_as_title) : account_(account) { views::GridLayout* grid_layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = grid_layout->AddColumnSet(0); grid_layout->StartRow(views::GridLayout::kFixedSize, 0);
diff --git a/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc b/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc index a2a2ac2..bc1f90a6 100644 --- a/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc +++ b/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc
@@ -87,7 +87,7 @@ void OneClickSigninDialogView::Init() { views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); // Column set for descriptive text and link. views::ColumnSet* cs = layout->AddColumnSet(0);
diff --git a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc index 805445c..476d819 100644 --- a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc +++ b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc
@@ -210,11 +210,11 @@ SetBorder(views::CreateEmptyBorder(content_insets.top(), 0, content_insets.bottom(), 0)); views::GridLayout* dialog_layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); // Use GridLayout inside the prompt bar because StyledLabel requires it. - views::GridLayout* prompt_layout = prompt_bar->SetLayoutManager( - std::make_unique<views::GridLayout>(prompt_bar)); + views::GridLayout* prompt_layout = + prompt_bar->SetLayoutManager(std::make_unique<views::GridLayout>()); prompt_bar->SetBorder( views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric( views::INSETS_DIALOG_SUBSECTION)));
diff --git a/chrome/browser/ui/views/translate/translate_bubble_view.cc b/chrome/browser/ui/views/translate/translate_bubble_view.cc index 1dddfae..761475b 100644 --- a/chrome/browser/ui/views/translate/translate_bubble_view.cc +++ b/chrome/browser/ui/views/translate/translate_bubble_view.cc
@@ -757,7 +757,7 @@ views::View* view = new views::View(); views::GridLayout* layout = - view->SetLayoutManager(std::make_unique<views::GridLayout>(view)); + view->SetLayoutManager(std::make_unique<views::GridLayout>()); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); @@ -842,7 +842,7 @@ ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); views::View* view = new views::View(); views::GridLayout* layout = - view->SetLayoutManager(std::make_unique<views::GridLayout>(view)); + view->SetLayoutManager(std::make_unique<views::GridLayout>()); // Language icon const int language_icon_id = IDR_TRANSLATE_BUBBLE_ICON; @@ -937,7 +937,7 @@ views::View* view = new views::View(); views::GridLayout* layout = - view->SetLayoutManager(std::make_unique<views::GridLayout>(view)); + view->SetLayoutManager(std::make_unique<views::GridLayout>()); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); @@ -973,7 +973,7 @@ views::View* TranslateBubbleView::CreateViewAfterTranslate() { views::View* view = new views::View(); views::GridLayout* layout = - view->SetLayoutManager(std::make_unique<views::GridLayout>(view)); + view->SetLayoutManager(std::make_unique<views::GridLayout>()); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); @@ -1015,7 +1015,7 @@ views::View* TranslateBubbleView::CreateViewError() { views::View* view = new views::View(); views::GridLayout* layout = - view->SetLayoutManager(std::make_unique<views::GridLayout>(view)); + view->SetLayoutManager(std::make_unique<views::GridLayout>()); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); @@ -1090,7 +1090,7 @@ views::View* view = new AdvancedViewContainer(); views::GridLayout* layout = - view->SetLayoutManager(std::make_unique<views::GridLayout>(view)); + view->SetLayoutManager(std::make_unique<views::GridLayout>()); enum { COLUMN_SET_ID_LANGUAGES, @@ -1255,7 +1255,7 @@ views::View* view = new AdvancedViewContainer(); views::GridLayout* layout = - view->SetLayoutManager(std::make_unique<views::GridLayout>(view)); + view->SetLayoutManager(std::make_unique<views::GridLayout>()); enum { COLUMN_SET_ID_TITLE,
diff --git a/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc b/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc index 2711c40..6d47ae8 100644 --- a/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc +++ b/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc
@@ -1042,8 +1042,8 @@ auto contents_view = std::make_unique<ClickableView>(); contents_view->SetBackground( views::CreateSolidBackground(kTryChromeBackgroundColor)); - views::GridLayout* layout = contents_view->SetLayoutManager( - std::make_unique<views::GridLayout>(contents_view.get())); + views::GridLayout* layout = + contents_view->SetLayoutManager(std::make_unique<views::GridLayout>()); layout->set_minimum_size(gfx::Size(kToastWidth, 0)); views::ColumnSet* columns;
diff --git a/chrome/browser/ui/views/uninstall_view.cc b/chrome/browser/ui/views/uninstall_view.cc index a48ef7b4..32f24ce 100644 --- a/chrome/browser/ui/views/uninstall_view.cc +++ b/chrome/browser/ui/views/uninstall_view.cc
@@ -45,7 +45,7 @@ using views::ColumnSet; views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); // Message to confirm uninstallation. int column_set_id = 0;
diff --git a/chrome/browser/ui/views/webauthn/authenticator_client_pin_entry_view.cc b/chrome/browser/ui/views/webauthn/authenticator_client_pin_entry_view.cc index 561eca35..d8f17a20 100644 --- a/chrome/browser/ui/views/webauthn/authenticator_client_pin_entry_view.cc +++ b/chrome/browser/ui/views/webauthn/authenticator_client_pin_entry_view.cc
@@ -47,7 +47,7 @@ : delegate_(delegate), show_confirmation_text_field_(show_confirmation_text_field) { views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING,
diff --git a/chrome/browser/ui/webui/chromeos/login/supervision_onboarding_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/supervision_onboarding_screen_handler.cc index a839eb14..9a9886b 100644 --- a/chrome/browser/ui/webui/chromeos/login/supervision_onboarding_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/supervision_onboarding_screen_handler.cc
@@ -37,6 +37,12 @@ IDS_SUPERVISION_ONBOARDING_SKIP_BUTTON); builder->Add("supervisionOnboardingBackButtonLabel", IDS_SUPERVISION_ONBOARDING_BACK_BUTTON); + builder->Add("supervisionOnboardingRetryButtonLabel", + IDS_SUPERVISION_ONBOARDING_RETRY_BUTTON); + builder->Add("supervisionOnboardingRetryDialogTitle", + IDS_SUPERVISION_ONBOARDING_RETRY_DIALOG_TITLE); + builder->Add("supervisionOnboardingRetryDialogMessage", + IDS_SUPERVISION_ONBOARDING_RETRY_DIALOG_MESSAGE); } void SupervisionOnboardingScreenHandler::Bind(
diff --git a/chrome/browser/web_applications/components/web_app_shortcut_mac.mm b/chrome/browser/web_applications/components/web_app_shortcut_mac.mm index 31e6cdc..79f0cdf 100644 --- a/chrome/browser/web_applications/components/web_app_shortcut_mac.mm +++ b/chrome/browser/web_applications/components/web_app_shortcut_mac.mm
@@ -211,7 +211,7 @@ return false; } -bool AppShimCreationDisabledForTest() { +bool AppShimsDisabledForTest() { // Disable app shims in tests because shims created in ~/Applications will not // be cleaned up. return base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType); @@ -630,7 +630,7 @@ } bool AppShimLaunchDisabled() { - return AppShimCreationDisabledForTest() && + return AppShimsDisabledForTest() && !g_app_shims_allow_update_and_launch_in_tests; } @@ -644,13 +644,13 @@ base::FilePath WebAppShortcutCreator::GetApplicationsShortcutPath( bool avoid_conflicts) const { - if (g_app_shims_allow_update_and_launch_in_tests) - return app_data_dir_.Append(GetShortcutBasename()); - base::FilePath applications_dir = GetApplicationsDirname(); if (applications_dir.empty()) return base::FilePath(); + if (g_app_shims_allow_update_and_launch_in_tests) + return app_data_dir_.Append(GetShortcutBasename()); + if (!avoid_conflicts) return applications_dir.Append(GetShortcutBasename()); @@ -871,18 +871,30 @@ LOG(ERROR) << "Failed to localize " << applications_dir.value(); } - // Get the list of paths to (re)create by bundle id (wherever it was moved - // or copied by the user). - std::vector<base::FilePath> app_paths = GetAppBundlesById(); + // Get the list of paths to (re)create. + std::vector<base::FilePath> app_paths; + if (g_app_shims_allow_update_and_launch_in_tests) { + // Never look in ~/Applications or search the system for a bundle ID in a + // test since that relies on global system state and potentially cruft that + // may be leftover from prior/crashed test runs. + // TODO(tapted): Remove this check when tests that arrive here via setting + // |g_app_shims_allow_update_and_launch_in_tests| can properly mock out all + // the calls below. + app_paths.push_back(app_data_dir_.Append(GetShortcutBasename())); + } else { + // Update all copies located by bundle id (wherever it was moved or copied + // by the user). + app_paths = GetAppBundlesById(); - // If that path does not exist, create a new entry in ~/Applications if - // requested. - if (app_paths.empty() && create_if_needed) { - app_paths.push_back( - GetApplicationsShortcutPath(true /* avoid_conflicts */)); + // If that path does not exist, create a new entry in ~/Applications if + // requested. + if (app_paths.empty() && create_if_needed) { + app_paths.push_back( + GetApplicationsShortcutPath(true /* avoid_conflicts */)); + } + if (app_paths.empty()) + return false; } - if (app_paths.empty()) - return false; CreateShortcutsAt(app_paths, updated_paths); return updated_paths->size() == app_paths.size(); @@ -1049,15 +1061,6 @@ // Sort the matches by preference. base::FilePath default_path = GetApplicationsShortcutPath(false /* avoid_conflicts */); - - // When testing, use only the default path. - if (g_app_shims_allow_update_and_launch_in_tests) { - paths.clear(); - if (base::PathExists(default_path)) - paths.push_back(default_path); - return paths; - } - base::FilePath apps_dir = GetApplicationsDirname(); auto compare = [default_path, apps_dir](const base::FilePath& a, const base::FilePath& b) { @@ -1152,7 +1155,7 @@ const ShortcutInfo& shortcut_info) { base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, base::BlockingType::MAY_BLOCK); - if (AppShimCreationDisabledForTest()) + if (AppShimsDisabledForTest()) return true; WebAppShortcutCreator shortcut_creator(app_data_path, &shortcut_info); @@ -1178,12 +1181,8 @@ web_app::WebAppShortcutCreator shortcut_creator(app_data_path, &shortcut_info); std::vector<base::FilePath> updated_shim_paths; - bool create_if_needed = false; - // Tests use web_app::UpdateAllShortcuts to force shim creation (rather than - // relying on asynchronous creation at installation. - if (g_app_shims_allow_update_and_launch_in_tests) - create_if_needed = true; - shortcut_creator.UpdateShortcuts(create_if_needed, &updated_shim_paths); + shortcut_creator.UpdateShortcuts(false /* create_if_needed */, + &updated_shim_paths); } void DeleteAllShortcutsForProfile(const base::FilePath& profile_path) {
diff --git a/chrome/common/search/BUILD.gn b/chrome/common/search/BUILD.gn index 450c73a..f4ba1c6 100644 --- a/chrome/common/search/BUILD.gn +++ b/chrome/common/search/BUILD.gn
@@ -11,6 +11,7 @@ ] deps = [ "//base", + "//chrome/common/themes:autogenerated_theme_util", "//skia", ] }
diff --git a/chrome/common/search/generate_colors_info.cc b/chrome/common/search/generate_colors_info.cc index ffb8f26..c396de5 100644 --- a/chrome/common/search/generate_colors_info.cc +++ b/chrome/common/search/generate_colors_info.cc
@@ -8,28 +8,37 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "chrome/common/search/selected_colors_info.h" +#include "chrome/common/themes/autogenerated_theme_util.h" // TODO(gayane): Replace with real template. // Template for the icon svg. // $1 - primary color // $2 - secondary color const char kIconTemplate[] = - "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg " - "PUBLIC \"-//W3C//DTD SVG 1.1//EN\" " - "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg version=\"1.1\" " - "xmlns=\"http://www.w3.org/2000/svg\" " + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" " + "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">" + "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" " "xmlns:xlink=\"http://www.w3.org/1999/xlink\" " - "preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 640 640\" " - "width=\"640\" height=\"640\"><defs><path d=\"M0 0L640 0L640 640L0 640L0 " - "0Z\" id=\"a1Y0EmMoCp\"></path><path d=\"M499.23 317.62C499.23 396.82 " - "420.79 461.12 324.17 461.12C227.55 461.12 149.11 396.82 149.11 " - "317.62C149.11 238.42 227.55 174.12 324.17 174.12C420.79 174.12 499.23 " - "238.42 499.23 317.62Z\" id=\"f7eUC88KqB\"></path></defs><g><g><g " - "transform=\"matrix(1 0 0 1 0 0)\" " - "vector-effect=\"non-scaling-stroke\"><use xlink:href=\"#a1Y0EmMoCp\" " - "opacity=\"1\" fill=$1 fill-opacity=\"1\"></use></g><g><use " - "xlink:href=\"#f7eUC88KqB\" opacity=\"1\" fill=$2 " - "fill-opacity=\"1\"></use></g></g></g></svg>"; + "preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 176 120\" " + "width=\"176\" height=\"120\"><defs><path d=\"M176 3.75C176 27 176 93 176 " + "116.25C176 118.32 173.52 120 170.46 120C136.37 120 39.63 120 5.54 " + "120C2.48 120 0 118.32 0 116.25C0 93 0 27 0 3.75C0 1.68 2.48 0 5.54 " + "0C39.63 0 136.37 0 170.46 0C173.52 0 176 1.68 176 3.75Z\" " + "id=\"b6Au8TbqXk\"></path><path d=\"M176 28.79C176 47.03 176 98.39 176 " + "116.63C176 118.49 173.66 120 170.78 120C143.04 120 65.01 120 37.27 " + "120C34.39 120 32.05 118.49 32.05 116.63C32.05 98.39 32.05 47.03 32.05 " + "28.79C32.05 26.93 34.39 25.42 37.27 25.42C65.01 25.42 143.04 25.42 170.78 " + "25.42C173.66 25.42 176 26.93 176 28.79Z\" " + "id=\"aPbYI6QVm\"></path></defs><g><g><g><use xlink:href=\"#b6Au8TbqXk\" " + "opacity=\"1\" fill=$1 fill-opacity=\"1\"></use><g><use " + "xlink:href=\"#b6Au8TbqXk\" opacity=\"1\" fill-opacity=\"0\" " + "stroke=\"#000000\" stroke-width=\"1\" " + "stroke-opacity=\"0\"></use></g></g><g><use xlink:href=\"#aPbYI6QVm\" " + "opacity=\"1\" fill=$2 fill-opacity=\"1\"></use><g><use " + "xlink:href=\"#aPbYI6QVm\" opacity=\"1\" fill-opacity=\"0\" " + "stroke=\"#000000\" stroke-width=\"1\" " + "stroke-opacity=\"0\"></use></g></g></g></g></svg>"; // Template for color info line. // $1 - color id @@ -80,11 +89,11 @@ // The returned string can be later directly set in JS with the following // format: "data:image/svg+xml;base64<ENCODED_SVG>" std::string GenerateIconDataForColor(SkColor color) { + AutogeneratedThemeColors colors = GetAutogeneratedThemeColors(color); + std::vector<std::string> subst; - subst.push_back(SkColorToHexString(color)); - // TODO(gayane): Replace white will secondary color calculated using - // browser_theme_pack. - subst.push_back(SkColorToHexString(SK_ColorWHITE)); + subst.push_back(SkColorToHexString(colors.frame_color)); + subst.push_back(SkColorToHexString(colors.active_tab_color)); std::string svg_base64; base::Base64Encode(
diff --git a/chrome/common/search/selected_colors_info.h b/chrome/common/search/selected_colors_info.h index 05f4c29..030012f4 100644 --- a/chrome/common/search/selected_colors_info.h +++ b/chrome/common/search/selected_colors_info.h
@@ -12,8 +12,8 @@ namespace chrome_colors { struct ColorInfo { - ColorInfo(int id, SkColor color, const char* label) - : id(id), color(color), label(label) {} + constexpr ColorInfo(int id, SkColor color, const char* label) + : ColorInfo(id, color, label, nullptr) {} constexpr ColorInfo(int id, SkColor color, const char* label, @@ -27,7 +27,11 @@ // TODO(gayane): Add colors selected by UX. // List of preselected colors to show in Chrome Colors menu. -const ColorInfo kSelectedColorsInfo[] = {}; +constexpr ColorInfo kSelectedColorsInfo[] = { + ColorInfo(0, SkColorSetRGB(120, 0, 120), "purple"), + ColorInfo(1, SkColorSetRGB(0, 100, 100), "teal"), + ColorInfo(2, SkColorSetRGB(200, 50, 100), "pretty"), + ColorInfo(3, SkColorSetRGB(70, 50, 170), "bluish")}; } // namespace chrome_colors
diff --git a/chrome/common/themes/BUILD.gn b/chrome/common/themes/BUILD.gn new file mode 100644 index 0000000..580ea7f --- /dev/null +++ b/chrome/common/themes/BUILD.gn
@@ -0,0 +1,15 @@ +# Copyright 2019 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. + +source_set("autogenerated_theme_util") { + sources = [ + "autogenerated_theme_util.cc", + "autogenerated_theme_util.h", + ] + + public_deps = [ + "//skia", + "//ui/gfx:color_utils", + ] +}
diff --git a/chrome/common/themes/OWNERS b/chrome/common/themes/OWNERS new file mode 100644 index 0000000..8b723166 --- /dev/null +++ b/chrome/common/themes/OWNERS
@@ -0,0 +1 @@ +file://chrome/browser/themes/OWNERS \ No newline at end of file
diff --git a/chrome/common/themes/autogenerated_theme_util.cc b/chrome/common/themes/autogenerated_theme_util.cc new file mode 100644 index 0000000..a66f9b1 --- /dev/null +++ b/chrome/common/themes/autogenerated_theme_util.cc
@@ -0,0 +1,125 @@ +// Copyright 2019 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/common/themes/autogenerated_theme_util.h" + +#include "ui/gfx/color_utils.h" + +// Decreases the lightness of the given color. +SkColor DarkenColor(SkColor color, float change) { + color_utils::HSL hsl; + SkColorToHSL(color, &hsl); + hsl.l -= change; + if (hsl.l >= 0.0f) + return HSLToSkColor(hsl, 255); + return color; +} + +// Increases the lightness of |source| until it reaches |contrast_ratio| with +// |base| or reaches |white_contrast| with white. This avoids decreasing +// saturation, as the alternative contrast-guaranteeing functions in color_utils +// would do. +SkColor LightenUntilContrast(SkColor source, + SkColor base, + float contrast_ratio, + float white_contrast) { + const float kBaseLuminance = color_utils::GetRelativeLuminance(base); + constexpr float kWhiteLuminance = 1.0f; + + color_utils::HSL hsl; + SkColorToHSL(source, &hsl); + float min_l = hsl.l; + float max_l = 1.0f; + + // Need only precision of 2 digits. + while (max_l - min_l > 0.01) { + hsl.l = min_l + (max_l - min_l) / 2; + float luminance = color_utils::GetRelativeLuminance(HSLToSkColor(hsl, 255)); + if (color_utils::GetContrastRatio(kBaseLuminance, luminance) >= + contrast_ratio || + (color_utils::GetContrastRatio(kWhiteLuminance, luminance) < + white_contrast)) { + max_l = hsl.l; + } else { + min_l = hsl.l; + } + } + + hsl.l = max_l; + return HSLToSkColor(hsl, 255); +} + +AutogeneratedThemeColors GetAutogeneratedThemeColors(SkColor color) { + SkColor frame_color = color; + SkColor frame_text_color; + SkColor active_tab_color = color; + SkColor active_tab_text_color; + + constexpr float kDarkenStep = 0.03f; + constexpr float kMinWhiteContrast = 1.3f; + constexpr float kNoWhiteContrast = 0.0f; + + // Increasingly darken frame color and calculate the rest until colors with + // sufficient contrast are found. + while (true) { + // Calculate frame color to have sufficient contrast with white or dark grey + // text. + frame_text_color = color_utils::GetColorWithMaxContrast(frame_color); + SkColor blend_target = + color_utils::GetColorWithMaxContrast(frame_text_color); + frame_color = color_utils::BlendForMinContrast( + frame_color, frame_text_color, blend_target, + kAutogeneratedThemeTextPreferredContrast) + .color; + + // Generate active tab color so that it has enough contrast with the + // |frame_color| to avoid the isolation line in the tab strip. + active_tab_color = LightenUntilContrast( + frame_color, frame_color, kAutogeneratedThemeActiveTabMinContrast, + kNoWhiteContrast); + // Try lightening the color to get more contrast with frame without getting + // too close to white. + active_tab_color = LightenUntilContrast( + active_tab_color, frame_color, + kAutogeneratedThemeActiveTabPreferredContrast, kMinWhiteContrast); + + // If we didn't succeed in generating active tab color with minimum + // contrast with frame, then darken the frame color and try again. + if (color_utils::GetContrastRatio(frame_color, active_tab_color) < + kAutogeneratedThemeActiveTabMinContrast) { + frame_color = DarkenColor(frame_color, kDarkenStep); + continue; + } + + // Select active tab text color, if possible. + active_tab_text_color = + color_utils::GetColorWithMaxContrast(active_tab_color); + + if (!color_utils::IsDark(active_tab_color)) { + // If active tab is light color then continue lightening it until enough + // contrast with dark text is reached. + active_tab_text_color = + color_utils::GetColorWithMaxContrast(active_tab_color); + active_tab_color = LightenUntilContrast( + active_tab_color, active_tab_text_color, + kAutogeneratedThemeTextPreferredContrast, kNoWhiteContrast); + break; + } + + // If the active tab color is dark and has enough contrast with white text. + // Then we are all set. + if (color_utils::GetContrastRatio(active_tab_color, SK_ColorWHITE) >= + kAutogeneratedThemeTextPreferredContrast) + break; + + // If the active tab color is a dark color but the contrast with white is + // not enough then we should darken the active tab color to reach the + // contrast with white. But to keep the contrast with the frame we should + // also darken the frame color. Therefore, just darken the frame color and + // try again. + frame_color = DarkenColor(frame_color, kDarkenStep); + } + return {frame_color, frame_text_color, active_tab_color, + active_tab_text_color}; +}
diff --git a/chrome/common/themes/autogenerated_theme_util.h b/chrome/common/themes/autogenerated_theme_util.h new file mode 100644 index 0000000..f8a4ae4 --- /dev/null +++ b/chrome/common/themes/autogenerated_theme_util.h
@@ -0,0 +1,29 @@ +// Copyright 2019 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_COMMON_THEMES_AUTOGENERATED_THEME_UTIL_H_ +#define CHROME_COMMON_THEMES_AUTOGENERATED_THEME_UTIL_H_ + +#include "third_party/skia/include/core/SkColor.h" + +// Constants for autogenerated themes. +// Minimum contrast for active tab and frame color to avoid isolation line in +// the tab strip. +constexpr float kAutogeneratedThemeActiveTabMinContrast = 1.3f; +constexpr float kAutogeneratedThemeActiveTabPreferredContrast = 1.6f; + +// Contrast between foreground and background. +constexpr float kAutogeneratedThemeTextPreferredContrast = 7.0f; + +struct AutogeneratedThemeColors { + SkColor frame_color; + SkColor frame_text_color; + SkColor active_tab_color; + SkColor active_tab_text_color; +}; + +// Generates theme colors for the given |color|. +AutogeneratedThemeColors GetAutogeneratedThemeColors(SkColor color); + +#endif // CHROME_COMMON_THEMES_AUTOGENERATED_THEME_UTIL_H_
diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn index 90c01df6..b0a3578 100644 --- a/chrome/renderer/BUILD.gn +++ b/chrome/renderer/BUILD.gn
@@ -383,10 +383,6 @@ "extensions/file_manager_private_custom_bindings.h", "extensions/platform_keys_natives.cc", "extensions/platform_keys_natives.h", - "resources/extensions/certificate_provider_custom_bindings.js", - "resources/extensions/file_browser_handler_custom_bindings.js", - "resources/extensions/file_manager_private_custom_bindings.js", - "resources/extensions/file_system_provider_custom_bindings.js", ] }
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 71faea0..8a88340 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -2187,7 +2187,6 @@ "base/interactive_test_utils_aura.h", "base/interactive_test_utils_common_views.cc", "base/interactive_test_utils_views.cc", - "data/chromeos/service_login.html", ] if (enable_cros_assistant) { sources += @@ -3466,6 +3465,7 @@ "../browser/diagnostics/diagnostics_model_unittest.cc", "../browser/download/download_commands_unittest.cc", "../browser/download/download_shelf_unittest.cc", + "../browser/enterprise_reporting/profile_report_generator_unittest.cc", "../browser/enterprise_reporting/report_scheduler_unittest.cc", "../browser/enterprise_reporting/report_uploader_unittest.cc", "../browser/enterprise_reporting/request_timer_unittest.cc",
diff --git a/chrome/test/data/extensions/api_test/autotest_private/test.js b/chrome/test/data/extensions/api_test/autotest_private/test.js index 636d648..56df89f43 100644 --- a/chrome/test/data/extensions/api_test/autotest_private/test.js +++ b/chrome/test/data/extensions/api_test/autotest_private/test.js
@@ -234,21 +234,21 @@ function setAssistantEnabled() { chrome.autotestPrivate.setAssistantEnabled(true, 1000 /* timeout_ms */, chrome.test.callbackFail( - 'Assistant not allowed - state: 3')); + 'Assistant not allowed - state: 9')); }, function sendAssistantTextQuery() { chrome.autotestPrivate.sendAssistantTextQuery( 'what time is it?' /* query */, 1000 /* timeout_ms */, chrome.test.callbackFail( - 'Assistant not allowed - state: 3')); + 'Assistant not allowed - state: 9')); }, function setWhitelistedPref() { chrome.autotestPrivate.setWhitelistedPref( 'settings.voice_interaction.hotword.enabled' /* pref_name */, true /* value */, chrome.test.callbackFail( - 'Assistant not allowed - state: 3')); + 'Assistant not allowed - state: 9')); }, // This test verifies that getArcState returns provisioned False in case ARC // is not provisioned by default.
diff --git a/chrome/test/data/local_ntp/local_ntp_browsertest.html b/chrome/test/data/local_ntp/local_ntp_browsertest.html index 3c4ea02..dfa7e46 100644 --- a/chrome/test/data/local_ntp/local_ntp_browsertest.html +++ b/chrome/test/data/local_ntp/local_ntp_browsertest.html
@@ -245,7 +245,12 @@ </div> </div> </div> - <div id="colors-menu" class="menu-panel"></div> + <div id="colors-menu" class="menu-panel"> + <div id="colors-default" class="bg-sel-tile-bg"> + <div id="colors-default-icon" class="bg-sel-tile"></div> + <div class="bg-sel-tile-title">$i18n{noBackground}</div> + </div> + </div> </div> <div id="menu-footer"> <button id="menu-cancel" class="bg-sel-footer-button paper secondary
diff --git a/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java b/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java index dcfa4bd6..d18031d 100644 --- a/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java +++ b/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java
@@ -364,8 +364,8 @@ AudioTrack.MODE_STREAM); } else { mAudioTrack = new AudioTrack(CAST_TYPE_TO_ANDROID_STREAM_TYPE.get(castContentType), - mSampleRateInHz, CHANNEL_CONFIG, AudioFormat.AUDIO_FORMAT, - bufferSizeInBytes, AudioTrack.MODE_STREAM, sessionId); + mSampleRateInHz, CHANNEL_CONFIG, AUDIO_FORMAT, bufferSizeInBytes, + AudioTrack.MODE_STREAM, sessionId); } }
diff --git a/chromecast/renderer/BUILD.gn b/chromecast/renderer/BUILD.gn index 21ee1ccc..85681ec 100644 --- a/chromecast/renderer/BUILD.gn +++ b/chromecast/renderer/BUILD.gn
@@ -91,7 +91,7 @@ if (enable_chromecast_extensions) { sources += [ "cast_extensions_dispatcher_delegate.cc", - "cast_extensions_dispatcher_delegate.g", + "cast_extensions_dispatcher_delegate.h", "cast_extensions_renderer_client.cc", "cast_extensions_renderer_client.h", "extensions/extension_hooks_delegate.cc",
diff --git a/chromeos/constants/chromeos_switches.cc b/chromeos/constants/chromeos_switches.cc index 8ad6bfc..764e03c 100644 --- a/chromeos/constants/chromeos_switches.cc +++ b/chromeos/constants/chromeos_switches.cc
@@ -7,6 +7,7 @@ #include <string> #include "base/command_line.h" +#include "base/feature_list.h" #include "base/metrics/field_trial.h" #include "third_party/icu/source/common/unicode/locid.h" @@ -50,7 +51,7 @@ // Controls whether to enable Google Assistant feature. const base::Feature kAssistantFeature{"ChromeOSAssistant", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kShowLanguageToggleInDemoMode{ "ShowLanguageToggleInDemoMode", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chromeos/services/assistant/BUILD.gn b/chromeos/services/assistant/BUILD.gn index 365991b..80316dd 100644 --- a/chromeos/services/assistant/BUILD.gn +++ b/chromeos/services/assistant/BUILD.gn
@@ -39,6 +39,7 @@ "//chromeos/dbus", "//chromeos/dbus/power", "//chromeos/dbus/power:power_manager_proto", + "//chromeos/services/assistant/public/proto", "//components/account_id", "//services/device/public/mojom", "//services/identity/public/mojom", @@ -101,7 +102,6 @@ "//chromeos/assistant/internal/proto/google3", "//chromeos/dbus", "//chromeos/resources", - "//chromeos/services/assistant/public/proto", "//chromeos/strings", "//libassistant/shared/internal_api:fuchsia_api_helper", "//libassistant/shared/internal_api/c:api_wrappers_entrypoint",
diff --git a/chromeos/services/assistant/fake_assistant_settings_manager_impl.cc b/chromeos/services/assistant/fake_assistant_settings_manager_impl.cc index bf766af..ef47a12 100644 --- a/chromeos/services/assistant/fake_assistant_settings_manager_impl.cc +++ b/chromeos/services/assistant/fake_assistant_settings_manager_impl.cc
@@ -6,6 +6,8 @@ #include <utility> +#include "chromeos/services/assistant/public/proto/settings_ui.pb.h" + namespace chromeos { namespace assistant { @@ -16,7 +18,11 @@ void FakeAssistantSettingsManagerImpl::GetSettings( const std::string& selector, GetSettingsCallback callback) { - std::move(callback).Run(std::string()); + // Create a fake response + assistant::SettingsUi settings_ui; + settings_ui.mutable_consent_flow_ui()->set_consent_status( + ConsentFlowUi_ConsentStatus_ALREADY_CONSENTED); + std::move(callback).Run(settings_ui.SerializeAsString()); } void FakeAssistantSettingsManagerImpl::UpdateSettings(
diff --git a/chromeos/services/assistant/public/mojom/assistant.mojom b/chromeos/services/assistant/public/mojom/assistant.mojom index 6e1df68c..0b8d098a 100644 --- a/chromeos/services/assistant/public/mojom/assistant.mojom +++ b/chromeos/services/assistant/public/mojom/assistant.mojom
@@ -145,7 +145,7 @@ // Initiates assistant and provides interfaces for assistant to call into the // browser. Init(Client assistant_client_interface, - DeviceActions device_actions_interface); + DeviceActions device_actions_interface, bool is_test); }; // Interface for assistant to call into client.
diff --git a/chromeos/services/assistant/service.cc b/chromeos/services/assistant/service.cc index 2176a24..db97ff7 100644 --- a/chromeos/services/assistant/service.cc +++ b/chromeos/services/assistant/service.cc
@@ -23,6 +23,8 @@ #include "chromeos/dbus/power_manager/power_supply_properties.pb.h" #include "chromeos/services/assistant/assistant_manager_service.h" #include "chromeos/services/assistant/assistant_settings_manager.h" +#include "chromeos/services/assistant/fake_assistant_manager_service_impl.h" +#include "chromeos/services/assistant/fake_assistant_settings_manager_impl.h" #include "chromeos/services/assistant/public/features.h" #include "google_apis/gaia/google_service_auth_error.h" #include "services/identity/public/cpp/scope_set.h" @@ -37,9 +39,6 @@ #include "chromeos/services/assistant/utils.h" #include "services/device/public/mojom/battery_monitor.mojom.h" #include "services/device/public/mojom/constants.mojom.h" -#else -#include "chromeos/services/assistant/fake_assistant_manager_service_impl.h" -#include "chromeos/services/assistant/fake_assistant_settings_manager_impl.h" #endif namespace chromeos { @@ -272,7 +271,9 @@ } void Service::Init(mojom::ClientPtr client, - mojom::DeviceActionsPtr device_actions) { + mojom::DeviceActionsPtr device_actions, + bool is_test) { + is_test_ = is_test; client_ = std::move(client); device_actions_ = std::move(device_actions); assistant_state_.Init(service_binding_.GetConnector()); @@ -346,6 +347,13 @@ void Service::CreateAssistantManagerService() { #if BUILDFLAG(ENABLE_CROS_LIBASSISTANT) + if (is_test_) { + // Use fake service in browser tests. + assistant_manager_service_ = + std::make_unique<FakeAssistantManagerServiceImpl>(); + return; + } + device::mojom::BatteryMonitorPtr battery_monitor; service_binding_.GetConnector()->BindInterface( device::mojom::kServiceName, mojo::MakeRequest(&battery_monitor));
diff --git a/chromeos/services/assistant/service.h b/chromeos/services/assistant/service.h index 38177ed..41b95d9 100644 --- a/chromeos/services/assistant/service.h +++ b/chromeos/services/assistant/service.h
@@ -144,7 +144,8 @@ // mojom::AssistantPlatform overrides: void Init(mojom::ClientPtr client, - mojom::DeviceActionsPtr device_actions) override; + mojom::DeviceActionsPtr device_actions, + bool is_test) override; identity::mojom::IdentityAccessor* GetIdentityAccessor(); @@ -187,6 +188,8 @@ chromeos::PowerManagerClient::Observer> power_manager_observer_; + // Whether running inside a test environment. + bool is_test_ = false; // Whether the current user session is active. bool session_active_ = false; // Whether the lock screen is on.
diff --git a/chromeos/services/assistant/service_unittest.cc b/chromeos/services/assistant/service_unittest.cc index abdf27a..07c0214 100644 --- a/chromeos/services/assistant/service_unittest.cc +++ b/chromeos/services/assistant/service_unittest.cc
@@ -189,7 +189,8 @@ service_->SetAssistantManagerForTesting(std::move(fake_assistant_manager)); GetPlatform()->Init(fake_assistant_client_.CreateInterfacePtrAndBind(), - fake_device_actions_.CreateInterfacePtrAndBind()); + fake_device_actions_.CreateInterfacePtrAndBind(), + /*is_test=*/true); platform_.FlushForTesting(); base::RunLoop().RunUntilIdle(); }
diff --git a/chromeos/services/device_sync/cryptauth_v2_enroller_impl_unittest.cc b/chromeos/services/device_sync/cryptauth_v2_enroller_impl_unittest.cc index c43a8ae4..2d409ca 100644 --- a/chromeos/services/device_sync/cryptauth_v2_enroller_impl_unittest.cc +++ b/chromeos/services/device_sync/cryptauth_v2_enroller_impl_unittest.cc
@@ -803,7 +803,7 @@ GetPreviousClientDirectivePolicyReferenceForTest()); SyncKeysResponse sync_keys_response = BuildSyncKeysResponse(); - sync_keys_response.release_random_session_id(); + sync_keys_response.clear_random_session_id(); SendSyncKeysResponse(sync_keys_response); @@ -820,7 +820,7 @@ GetPreviousClientDirectivePolicyReferenceForTest()); SyncKeysResponse sync_keys_response = BuildSyncKeysResponse(); - sync_keys_response.release_client_directive(); + sync_keys_response.clear_client_directive(); SendSyncKeysResponse(sync_keys_response); @@ -979,7 +979,7 @@ SyncSingleKeyResponse::ACTIVE /* new_key_creation */, KeyType::RAW256 /* new_key_type */, base::nullopt /* new_key_directive */)}); - sync_keys_response.release_server_ephemeral_dh(); + sync_keys_response.clear_server_ephemeral_dh(); SendSyncKeysResponse(sync_keys_response);
diff --git a/chromeos/services/secure_channel/public/cpp/client/BUILD.gn b/chromeos/services/secure_channel/public/cpp/client/BUILD.gn index a927f96f..52961420 100644 --- a/chromeos/services/secure_channel/public/cpp/client/BUILD.gn +++ b/chromeos/services/secure_channel/public/cpp/client/BUILD.gn
@@ -31,7 +31,6 @@ testonly = true sources = [ - ":shared", "fake_client_channel.cc", "fake_client_channel.h", "fake_client_channel_observer.cc",
diff --git a/chromeos/settings/cros_settings_names.cc b/chromeos/settings/cros_settings_names.cc index d23a2ce..9fe24df 100644 --- a/chromeos/settings/cros_settings_names.cc +++ b/chromeos/settings/cros_settings_names.cc
@@ -382,4 +382,10 @@ // respected when the device is shutdown. const char kDeviceScheduledUpdateCheck[] = "cros.device.device_scheduled_update_check"; + +// An enum pref that configures the operation mode of the built-in 2nd factor +// authenticator. +const char kDeviceSecondFactorAuthenticationMode[] = + "cros.device.device_second_factor_authentication_mode"; + } // namespace chromeos
diff --git a/chromeos/settings/cros_settings_names.h b/chromeos/settings/cros_settings_names.h index 68c04fb4..b1676b604 100644 --- a/chromeos/settings/cros_settings_names.h +++ b/chromeos/settings/cros_settings_names.h
@@ -222,6 +222,9 @@ COMPONENT_EXPORT(CHROMEOS_SETTINGS) extern const char kDeviceScheduledUpdateCheck[]; +COMPONENT_EXPORT(CHROMEOS_SETTINGS) +extern const char kDeviceSecondFactorAuthenticationMode[]; + } // namespace chromeos #endif // CHROMEOS_SETTINGS_CROS_SETTINGS_NAMES_H_
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn index 05a7a18..b6073a3 100644 --- a/components/cronet/android/BUILD.gn +++ b/components/cronet/android/BUILD.gn
@@ -112,6 +112,7 @@ _api_level = read_file("api_version.txt", "value") process_version("api_version") { + process_only = true template_file = "api/src/org/chromium/net/ApiVersion.template" sources = [ "//chrome/VERSION", @@ -128,6 +129,7 @@ "$_templates_dir/org/chromium/net/impl/ImplVersion.java" process_version("impl_version") { + process_only = true template_file = "java/src/org/chromium/net/impl/ImplVersion.template" sources = [ "//chrome/VERSION",
diff --git a/components/payments/core/journey_logger.cc b/components/payments/core/journey_logger.cc index fe60d84..4f31801 100644 --- a/components/payments/core/journey_logger.cc +++ b/components/payments/core/journey_logger.cc
@@ -79,16 +79,12 @@ source_id_(source_id) {} JourneyLogger::~JourneyLogger() { + // has_recorded_ is false in cases that the page gets closed. To see more + // details about this case please check sample crash link from + // dumpWithoutCrash: + // https://crash.corp.google.com/browse?q=reportid=%27c1268a7104b25de2%27 UMA_HISTOGRAM_BOOLEAN("PaymentRequest.JourneyLoggerHasRecorded", has_recorded_); - if (!has_recorded_) { - static base::debug::CrashKeyString* journey_logger_no_record = - base::debug::AllocateCrashKeyString("journey_logger_no_record", - base::debug::CrashKeySize::Size32); - base::debug::SetCrashKeyString(journey_logger_no_record, - base::StringPrintf("%d", events_)); - base::debug::DumpWithoutCrashing(); - } } void JourneyLogger::IncrementSelectionAdds(Section section) {
diff --git a/components/pdf/renderer/pdf_accessibility_tree.cc b/components/pdf/renderer/pdf_accessibility_tree.cc index 43a47cd..49da6bf 100644 --- a/components/pdf/renderer/pdf_accessibility_tree.cc +++ b/components/pdf/renderer/pdf_accessibility_tree.cc
@@ -455,10 +455,6 @@ return node->parent(); } -bool PdfAccessibilityTree::IsIgnored(const ui::AXNode* node) const { - return node->data().HasState(ax::mojom::State::kIgnored); -} - bool PdfAccessibilityTree::IsValid(const ui::AXNode* node) const { return node != nullptr; }
diff --git a/components/pdf/renderer/pdf_accessibility_tree.h b/components/pdf/renderer/pdf_accessibility_tree.h index 4c468e6..1d6ef4e 100644 --- a/components/pdf/renderer/pdf_accessibility_tree.h +++ b/components/pdf/renderer/pdf_accessibility_tree.h
@@ -53,7 +53,6 @@ void GetChildren(const ui::AXNode* node, std::vector<const ui::AXNode*>* out_children) const override; ui::AXNode* GetParent(const ui::AXNode* node) const override; - bool IsIgnored(const ui::AXNode* node) const override; bool IsValid(const ui::AXNode* node) const override; bool IsEqual(const ui::AXNode* node1, const ui::AXNode* node2) const override; const ui::AXNode* GetNull() const override;
diff --git a/components/security_interstitials/core/BUILD.gn b/components/security_interstitials/core/BUILD.gn index 11b36e9..e84ca5b 100644 --- a/components/security_interstitials/core/BUILD.gn +++ b/components/security_interstitials/core/BUILD.gn
@@ -12,6 +12,8 @@ "common_string_util.h", "controller_client.cc", "controller_client.h", + "features.cc", + "features.h", "metrics_helper.cc", "metrics_helper.h", "mitm_software_ui.cc",
diff --git a/components/security_interstitials/core/bad_clock_ui.cc b/components/security_interstitials/core/bad_clock_ui.cc index cfa1df8..c08c63e 100644 --- a/components/security_interstitials/core/bad_clock_ui.cc +++ b/components/security_interstitials/core/bad_clock_ui.cc
@@ -42,6 +42,7 @@ common_string_util::PopulateSSLLayoutStrings(cert_error_, load_time_data); common_string_util::PopulateSSLDebuggingStrings(ssl_info_, time_triggered_, load_time_data); + common_string_util::PopulateDarkModeDisplaySetting(load_time_data); // Clock-specific strings. PopulateClockStrings(load_time_data);
diff --git a/components/security_interstitials/core/browser/resources/interstitial_large.js b/components/security_interstitials/core/browser/resources/interstitial_large.js index 197e50cb..26de41c 100644 --- a/components/security_interstitials/core/browser/resources/interstitial_large.js +++ b/components/security_interstitials/core/browser/resources/interstitial_large.js
@@ -75,6 +75,11 @@ var showRecurrentErrorParagraph = loadTimeData.getBoolean( 'show_recurrent_error_paragraph'); + if (loadTimeData.valueExists('darkModeAvailable') && + loadTimeData.getBoolean('darkModeAvailable')) { + $('body').classList.add('dark-mode-available'); + } + if (ssl) { $('body').classList.add(badClock ? 'bad-clock' : 'ssl'); $('error-code').textContent = loadTimeData.getString('errorCode');
diff --git a/components/security_interstitials/core/browser/resources/interstitial_webview_quiet.css b/components/security_interstitials/core/browser/resources/interstitial_webview_quiet.css index 46440c1f..3b379f3 100644 --- a/components/security_interstitials/core/browser/resources/interstitial_webview_quiet.css +++ b/components/security_interstitials/core/browser/resources/interstitial_webview_quiet.css
@@ -119,7 +119,7 @@ } @media (prefers-color-scheme: dark) { - .icon { + .dark-mode-available .icon { filter: invert(1); } }
diff --git a/components/security_interstitials/core/browser/resources/interstitial_webview_quiet.js b/components/security_interstitials/core/browser/resources/interstitial_webview_quiet.js index e59990a..3464121a 100644 --- a/components/security_interstitials/core/browser/resources/interstitial_webview_quiet.js +++ b/components/security_interstitials/core/browser/resources/interstitial_webview_quiet.js
@@ -20,7 +20,14 @@ function initPage() { var isGiantWebView = loadTimeData.getBoolean('is_giant'); + var darkModeAvailable = loadTimeData.getBoolean('darkModeAvailable'); + document.body.className = isGiantWebView ? 'giant' : ''; + + if (darkModeAvailable) { + document.body.classList.add('dark-mode-available'); + } + preventDefaultOnPoundLinkClicks(); $('details-link').addEventListener('click', function(event) {
diff --git a/components/security_interstitials/core/common/resources/interstitial_core.css b/components/security_interstitials/core/common/resources/interstitial_core.css index 12a0a99c..68a85fb 100644 --- a/components/security_interstitials/core/common/resources/interstitial_core.css +++ b/components/security_interstitials/core/common/resources/interstitial_core.css
@@ -64,7 +64,10 @@ } @media (prefers-color-scheme: dark) { - body { + body.captive-portal, + body.dark-mode-available, + body.neterror, + .offline body { --background-color: var(--google-gray-900); --error-code-color: var(--google-gray-500); --heading-color: var(--google-gray-500);
diff --git a/components/security_interstitials/core/common_string_util.cc b/components/security_interstitials/core/common_string_util.cc index b9220a15..96abe91 100644 --- a/components/security_interstitials/core/common_string_util.cc +++ b/components/security_interstitials/core/common_string_util.cc
@@ -7,6 +7,7 @@ #include "base/i18n/rtl.h" #include "base/i18n/time_formatting.h" #include "base/strings/strcat.h" +#include "components/security_interstitials/core/features.h" #include "components/strings/grit/components_strings.h" #include "components/url_formatter/url_formatter.h" #include "net/base/net_errors.h" @@ -63,6 +64,13 @@ load_time_data->SetString("pem", base::StrCat(encoded_chain)); } +void PopulateDarkModeDisplaySetting(base::DictionaryValue* load_time_data) { + load_time_data->SetBoolean( + "darkModeAvailable", + base::FeatureList::IsEnabled( + security_interstitials::kSecurityInterstitialsDarkMode)); +} + } // namespace common_string_util } // namespace security_interstitials
diff --git a/components/security_interstitials/core/common_string_util.h b/components/security_interstitials/core/common_string_util.h index da10ee7..d3279ad0 100644 --- a/components/security_interstitials/core/common_string_util.h +++ b/components/security_interstitials/core/common_string_util.h
@@ -32,6 +32,10 @@ // For determining whether to use the old or new icon sets. void PopulateNewIconStrings(base::DictionaryValue* load_time_data); +// Populate a 'darkModeAvailable' boolean in |load_time_data| that specifies +// whether dark mode styling is available. +void PopulateDarkModeDisplaySetting(base::DictionaryValue* load_time_data); + } // common_string_util } // namespace security_interstitials
diff --git a/components/security_interstitials/core/features.cc b/components/security_interstitials/core/features.cc new file mode 100644 index 0000000..7b6895a --- /dev/null +++ b/components/security_interstitials/core/features.cc
@@ -0,0 +1,12 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/security_interstitials/core/features.h" + +namespace security_interstitials { + +const base::Feature kSecurityInterstitialsDarkMode{ + "SecurityInterstitialsDarkMode", base::FEATURE_DISABLED_BY_DEFAULT}; + +} // namespace security_interstitials
diff --git a/components/security_interstitials/core/features.h b/components/security_interstitials/core/features.h new file mode 100644 index 0000000..89a4806 --- /dev/null +++ b/components/security_interstitials/core/features.h
@@ -0,0 +1,17 @@ +// Copyright 2019 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 COMPONENTS_SECURITY_INTERSTITIALS_CORE_FEATURES_H_ +#define COMPONENTS_SECURITY_INTERSTITIALS_CORE_FEATURES_H_ + +#include "base/feature_list.h" + +namespace security_interstitials { + +// Controls whether dark mode themes are applied to security interstitials. +extern const base::Feature kSecurityInterstitialsDarkMode; + +} // namespace security_interstitials + +#endif // COMPONENTS_SECURITY_INTERSTITIALS_CORE_FEATURES_H_
diff --git a/components/security_interstitials/core/mitm_software_ui.cc b/components/security_interstitials/core/mitm_software_ui.cc index 3fca6b3..123a5dd 100644 --- a/components/security_interstitials/core/mitm_software_ui.cc +++ b/components/security_interstitials/core/mitm_software_ui.cc
@@ -44,6 +44,7 @@ common_string_util::PopulateSSLLayoutStrings(cert_error_, load_time_data); common_string_util::PopulateSSLDebuggingStrings( ssl_info_, base::Time::NowFromSystemTime(), load_time_data); + common_string_util::PopulateDarkModeDisplaySetting(load_time_data); // Set display booleans. load_time_data->SetBoolean("overridable", false);
diff --git a/components/security_interstitials/core/safe_browsing_quiet_error_ui.cc b/components/security_interstitials/core/safe_browsing_quiet_error_ui.cc index e8b9528..8d6c799f 100644 --- a/components/security_interstitials/core/safe_browsing_quiet_error_ui.cc +++ b/components/security_interstitials/core/safe_browsing_quiet_error_ui.cc
@@ -51,6 +51,8 @@ base::DictionaryValue* load_time_data) { DCHECK(load_time_data); + common_string_util::PopulateDarkModeDisplaySetting(load_time_data); + load_time_data->SetString("type", "SAFEBROWSING"); load_time_data->SetString( "tabTitle", l10n_util::GetStringUTF16(IDS_SAFEBROWSING_V3_TITLE));
diff --git a/components/security_interstitials/core/ssl_error_ui.cc b/components/security_interstitials/core/ssl_error_ui.cc index 23bdac6e..8ceb00d 100644 --- a/components/security_interstitials/core/ssl_error_ui.cc +++ b/components/security_interstitials/core/ssl_error_ui.cc
@@ -67,6 +67,7 @@ common_string_util::PopulateSSLLayoutStrings(cert_error_, load_time_data); common_string_util::PopulateSSLDebuggingStrings(ssl_info_, time_triggered_, load_time_data); + common_string_util::PopulateDarkModeDisplaySetting(load_time_data); // Shared values for both the overridable and non-overridable versions. load_time_data->SetBoolean("bad_clock", false);
diff --git a/components/signin/core/browser/account_fetcher_service.cc b/components/signin/core/browser/account_fetcher_service.cc index bb1b64d..47b18aa 100644 --- a/components/signin/core/browser/account_fetcher_service.cc +++ b/components/signin/core/browser/account_fetcher_service.cc
@@ -137,10 +137,8 @@ } void AccountFetcherService::RefreshAllAccountInfo(bool only_fetch_if_invalid) { - std::vector<std::string> accounts = token_service_->GetAccounts(); - for (std::vector<std::string>::const_iterator it = accounts.begin(); - it != accounts.end(); ++it) { - RefreshAccountInfo(*it, only_fetch_if_invalid); + for (const auto& account : token_service_->GetAccounts()) { + RefreshAccountInfo(account, only_fetch_if_invalid); } } @@ -152,9 +150,9 @@ #if defined(OS_ANDROID) void AccountFetcherService::UpdateChildInfo() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - std::vector<std::string> accounts = token_service_->GetAccounts(); + std::vector<CoreAccountId> accounts = token_service_->GetAccounts(); if (accounts.size() == 1) { - const std::string& candidate = accounts[0]; + const CoreAccountId& candidate = accounts[0]; if (candidate == child_request_account_id_) return; if (!child_request_account_id_.empty())
diff --git a/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate.cc b/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate.cc index 1cf20b9..8660524 100644 --- a/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate.cc +++ b/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate.cc
@@ -469,9 +469,9 @@ return GetRefreshToken(account_id); } -std::vector<std::string> -MutableProfileOAuth2TokenServiceDelegate::GetAccounts() { - std::vector<std::string> account_ids; +std::vector<CoreAccountId> +MutableProfileOAuth2TokenServiceDelegate::GetAccounts() const { + std::vector<CoreAccountId> account_ids; for (auto& token : refresh_tokens_) { account_ids.push_back(token.first); }
diff --git a/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate.h b/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate.h index da24032..e6fa2d2 100644 --- a/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate.h +++ b/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate.h
@@ -61,7 +61,7 @@ bool RefreshTokenIsAvailable(const CoreAccountId& account_id) const override; GoogleServiceAuthError GetAuthError( const CoreAccountId& account_id) const override; - std::vector<std::string> GetAccounts() override; + std::vector<CoreAccountId> GetAccounts() const override; scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() const override; void LoadCredentials(const CoreAccountId& primary_account_id) override;
diff --git a/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate_unittest.cc b/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate_unittest.cc index 7c0afd7..6bfb454 100644 --- a/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate_unittest.cc +++ b/components/signin/core/browser/mutable_profile_oauth2_token_service_delegate_unittest.cc
@@ -980,9 +980,10 @@ InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kDisabled); EXPECT_TRUE(oauth2_service_delegate_->GetAccounts().empty()); + oauth2_service_delegate_->UpdateCredentials(account_id1, "refresh_token1"); oauth2_service_delegate_->UpdateCredentials(account_id2, "refresh_token2"); - std::vector<std::string> accounts = oauth2_service_delegate_->GetAccounts(); + std::vector<CoreAccountId> accounts = oauth2_service_delegate_->GetAccounts(); EXPECT_EQ(2u, accounts.size()); EXPECT_EQ(1, count(accounts.begin(), accounts.end(), account_id1)); EXPECT_EQ(1, count(accounts.begin(), accounts.end(), account_id2)); @@ -1144,14 +1145,17 @@ TEST_F(MutableProfileOAuth2TokenServiceDelegateTest, ShutdownService) { InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kMirror); EXPECT_TRUE(oauth2_service_delegate_->GetAccounts().empty()); - oauth2_service_delegate_->UpdateCredentials("account_id1", "refresh_token1"); - oauth2_service_delegate_->UpdateCredentials("account_id2", "refresh_token2"); - std::vector<std::string> accounts = oauth2_service_delegate_->GetAccounts(); + const CoreAccountId account_id1("account_id1"); + const CoreAccountId account_id2("account_id2"); + + oauth2_service_delegate_->UpdateCredentials(account_id1, "refresh_token1"); + oauth2_service_delegate_->UpdateCredentials(account_id2, "refresh_token2"); + std::vector<CoreAccountId> accounts = oauth2_service_delegate_->GetAccounts(); EXPECT_EQ(2u, accounts.size()); - EXPECT_EQ(1, count(accounts.begin(), accounts.end(), "account_id1")); - EXPECT_EQ(1, count(accounts.begin(), accounts.end(), "account_id2")); - oauth2_service_delegate_->LoadCredentials("account_id1"); - oauth2_service_delegate_->UpdateCredentials("account_id1", "refresh_token3"); + EXPECT_EQ(1, count(accounts.begin(), accounts.end(), account_id1)); + EXPECT_EQ(1, count(accounts.begin(), accounts.end(), account_id2)); + oauth2_service_delegate_->LoadCredentials(account_id1); + oauth2_service_delegate_->UpdateCredentials(account_id1, "refresh_token3"); oauth2_service_delegate_->Shutdown(); EXPECT_TRUE(oauth2_service_delegate_->server_revokes_.empty()); EXPECT_TRUE(oauth2_service_delegate_->refresh_tokens_.empty()); @@ -1186,7 +1190,8 @@ EXPECT_EQ(1, token_available_count_); EXPECT_EQ(1, end_batch_changes_); - std::vector<std::string> accounts = oauth2_service_delegate_->GetAccounts(); + std::vector<CoreAccountId> accounts = + oauth2_service_delegate_->GetAccounts(); EXPECT_EQ(1u, accounts.size()); EXPECT_FALSE(oauth2_service_delegate_->RefreshTokenIsAvailable(email)); @@ -1248,7 +1253,8 @@ EXPECT_EQ(2, token_available_count_); EXPECT_EQ(1, end_batch_changes_); - std::vector<std::string> accounts = oauth2_service_delegate_->GetAccounts(); + std::vector<CoreAccountId> accounts = + oauth2_service_delegate_->GetAccounts(); EXPECT_EQ(2u, accounts.size()); EXPECT_FALSE(oauth2_service_delegate_->RefreshTokenIsAvailable(email1));
diff --git a/components/signin/core/browser/oauth2_token_service_delegate_android.cc b/components/signin/core/browser/oauth2_token_service_delegate_android.cc index a48ba21..c060ec6 100644 --- a/components/signin/core/browser/oauth2_token_service_delegate_android.cc +++ b/components/signin/core/browser/oauth2_token_service_delegate_android.cc
@@ -149,11 +149,11 @@ if (account_tracker_service_->GetMigrationState() == AccountTrackerService::MIGRATION_IN_PROGRESS) { - std::vector<std::string> accounts = GetAccounts(); + std::vector<CoreAccountId> accounts = GetAccounts(); std::vector<CoreAccountId> accounts_id; for (auto account_name : accounts) { AccountInfo account_info = - account_tracker_service_->FindAccountInfoByEmail(account_name); + account_tracker_service_->FindAccountInfoByEmail(account_name.id); DCHECK(!account_info.gaia.empty()); accounts_id.push_back(account_info.gaia); } @@ -220,7 +220,8 @@ FireAuthErrorChanged(account_id, error); } -std::vector<std::string> OAuth2TokenServiceDelegateAndroid::GetAccounts() { +std::vector<CoreAccountId> OAuth2TokenServiceDelegateAndroid::GetAccounts() + const { std::vector<std::string> accounts; JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef<jobjectArray> j_accounts = @@ -228,7 +229,7 @@ // TODO(fgorski): We may decide to filter out some of the accounts. base::android::AppendJavaStringArrayToStringVector(env, j_accounts, &accounts); - return accounts; + return std::vector<CoreAccountId>(accounts.begin(), accounts.end()); } std::vector<std::string> @@ -256,7 +257,7 @@ std::vector<CoreAccountId> OAuth2TokenServiceDelegateAndroid::GetValidAccounts() { std::vector<CoreAccountId> ids; - for (const std::string& id : GetAccounts()) { + for (const CoreAccountId& id : GetAccounts()) { if (ValidateAccountId(id)) ids.emplace_back(id); } @@ -431,13 +432,13 @@ void OAuth2TokenServiceDelegateAndroid::RevokeAllCredentials() { DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::RevokeAllCredentials"; ScopedBatchChange batch(this); - std::vector<std::string> accounts_to_revoke = GetAccounts(); + std::vector<CoreAccountId> accounts_to_revoke = GetAccounts(); // Clear accounts in the token service before calling // |FireRefreshTokenRevoked|. SetAccounts(std::vector<CoreAccountId>()); - for (const std::string& account : accounts_to_revoke) + for (const CoreAccountId& account : accounts_to_revoke) FireRefreshTokenRevoked(account); }
diff --git a/components/signin/core/browser/oauth2_token_service_delegate_android.h b/components/signin/core/browser/oauth2_token_service_delegate_android.h index 9793759..1b9fa25 100644 --- a/components/signin/core/browser/oauth2_token_service_delegate_android.h +++ b/components/signin/core/browser/oauth2_token_service_delegate_android.h
@@ -53,7 +53,7 @@ const CoreAccountId& account_id) const override; void UpdateAuthError(const CoreAccountId& account_id, const GoogleServiceAuthError& error) override; - std::vector<std::string> GetAccounts() override; + std::vector<CoreAccountId> GetAccounts() const override; void UpdateAccountList( JNIEnv* env,
diff --git a/components/signin/core/browser/primary_account_manager.cc b/components/signin/core/browser/primary_account_manager.cc index d7f70f4d..5f0af06 100644 --- a/components/signin/core/browser/primary_account_manager.cc +++ b/components/signin/core/browser/primary_account_manager.cc
@@ -256,7 +256,6 @@ observer_ = nullptr; } -#if !defined(OS_CHROMEOS) void PrimaryAccountManager::SignIn(const std::string& username) { AccountInfo info = account_tracker_service_->FindAccountInfoByEmail(username); DCHECK(!info.gaia.empty()); @@ -277,6 +276,7 @@ client_->GetInstallDate()); } +#if !defined(OS_CHROMEOS) void PrimaryAccountManager::SignOut( signin_metrics::ProfileSignout signout_source_metric, signin_metrics::SignoutDelete signout_delete_metric) {
diff --git a/components/signin/core/browser/primary_account_manager.h b/components/signin/core/browser/primary_account_manager.h index f7f8c20..6599ac6 100644 --- a/components/signin/core/browser/primary_account_manager.h +++ b/components/signin/core/browser/primary_account_manager.h
@@ -124,14 +124,9 @@ void SetObserver(Observer* observer); void ClearObserver(); - // Signin API surfaces. Not used on ChromeOS. - // TODO(https://crbug.com/814787): Go through this API to set the primary - // account on ChromeOS. -#if !defined(OS_CHROMEOS) - // Signs a user in. PrimaryAccountPolicyManager assumes that |username| can be - // used to look up the corresponding account_id and gaia_id for this email. + // Signs a user in. PrimaryAccountManager assumes that |username| can be used + // to look up the corresponding account_id and gaia_id for this email. void SignIn(const std::string& username); -#endif // Signout API surfaces (not supported on ChromeOS, where signout is not // permitted).
diff --git a/components/signin/core/browser/primary_account_manager_unittest.cc b/components/signin/core/browser/primary_account_manager_unittest.cc index 561b8da..2d5460d 100644 --- a/components/signin/core/browser/primary_account_manager_unittest.cc +++ b/components/signin/core/browser/primary_account_manager_unittest.cc
@@ -89,8 +89,8 @@ // Seed the account tracker with information from logged in user. Normally // this is done by UI code before calling PrimaryAccountManager. // Returns the string to use as the account_id. - std::string AddToAccountTracker(const std::string& gaia_id, - const std::string& email) { + CoreAccountId AddToAccountTracker(const std::string& gaia_id, + const std::string& email) { account_tracker_.SeedAccountInfo(gaia_id, email); return account_tracker_.PickAccountIdForAccount(gaia_id, email); } @@ -145,7 +145,7 @@ TEST_F(PrimaryAccountManagerTest, SignOut) { CreatePrimaryAccountManager(); - std::string main_account_id = + CoreAccountId main_account_id = AddToAccountTracker("account_id", "user@gmail.com"); manager_->SignIn("user@gmail.com"); manager_->SignOut(signin_metrics::SIGNOUT_TEST, @@ -163,9 +163,9 @@ TEST_F(PrimaryAccountManagerTest, SignOutRevoke) { CreatePrimaryAccountManager(); - std::string main_account_id = + CoreAccountId main_account_id = AddToAccountTracker("main_id", "user@gmail.com"); - std::string other_account_id = + CoreAccountId other_account_id = AddToAccountTracker("other_id", "other@gmail.com"); token_service_.UpdateCredentials(main_account_id, "token"); token_service_.UpdateCredentials(other_account_id, "token"); @@ -184,9 +184,9 @@ TEST_F(PrimaryAccountManagerTest, SignOutDiceNoRevoke) { account_consistency_ = signin::AccountConsistencyMethod::kDice; CreatePrimaryAccountManager(); - std::string main_account_id = + CoreAccountId main_account_id = AddToAccountTracker("main_id", "user@gmail.com"); - std::string other_account_id = + CoreAccountId other_account_id = AddToAccountTracker("other_id", "other@gmail.com"); token_service_.UpdateCredentials(main_account_id, "token"); token_service_.UpdateCredentials(other_account_id, "token"); @@ -199,8 +199,8 @@ // Tokens are not revoked. EXPECT_FALSE(manager_->IsAuthenticated()); - std::vector<std::string> expected_tokens = {main_account_id, - other_account_id}; + std::vector<CoreAccountId> expected_tokens = {main_account_id, + other_account_id}; EXPECT_EQ(expected_tokens, token_service_.GetAccounts()); } @@ -230,7 +230,7 @@ // Only main token is revoked. EXPECT_FALSE(manager_->IsAuthenticated()); - std::vector<std::string> expected_tokens = {other_account_id}; + std::vector<CoreAccountId> expected_tokens = {other_account_id}; EXPECT_EQ(expected_tokens, token_service_.GetAccounts()); }
diff --git a/components/signin/core/browser/profile_oauth2_token_service.cc b/components/signin/core/browser/profile_oauth2_token_service.cc index f1be157..07c6b1a9 100644 --- a/components/signin/core/browser/profile_oauth2_token_service.cc +++ b/components/signin/core/browser/profile_oauth2_token_service.cc
@@ -86,7 +86,7 @@ } void ProfileOAuth2TokenService::LoadCredentials( - const std::string& primary_account_id) { + const CoreAccountId& primary_account_id) { DCHECK_EQ(SourceForRefreshTokenOperation::kUnknown, update_refresh_token_source_); update_refresh_token_source_ = @@ -95,7 +95,7 @@ } void ProfileOAuth2TokenService::UpdateCredentials( - const std::string& account_id, + const CoreAccountId& account_id, const std::string& refresh_token, SourceForRefreshTokenOperation source) { base::AutoReset<SourceForRefreshTokenOperation> auto_reset( @@ -104,7 +104,7 @@ } void ProfileOAuth2TokenService::RevokeCredentials( - const std::string& account_id, + const CoreAccountId& account_id, SourceForRefreshTokenOperation source) { base::AutoReset<SourceForRefreshTokenOperation> auto_reset( &update_refresh_token_source_, source); @@ -127,7 +127,7 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) void ProfileOAuth2TokenService::ExtractCredentials( ProfileOAuth2TokenService* to_service, - const std::string& account_id) { + const CoreAccountId& account_id) { base::AutoReset<SourceForRefreshTokenOperation> auto_reset( &update_refresh_token_source_, SourceForRefreshTokenOperation::kTokenService_ExtractCredentials);
diff --git a/components/signin/core/browser/profile_oauth2_token_service.h b/components/signin/core/browser/profile_oauth2_token_service.h index 6961b06..1d034ef7 100644 --- a/components/signin/core/browser/profile_oauth2_token_service.h +++ b/components/signin/core/browser/profile_oauth2_token_service.h
@@ -58,7 +58,7 @@ // For a regular profile, the primary account id comes from // PrimaryAccountManager. // For a supervised user, the id comes from SupervisedUserService. - void LoadCredentials(const std::string& primary_account_id); + void LoadCredentials(const CoreAccountId& primary_account_id); // Returns true if LoadCredentials finished with no errors. bool HasLoadCredentialsFinishedWithNoErrors(); @@ -66,13 +66,13 @@ // Updates a |refresh_token| for an |account_id|. Credentials are persisted, // and available through |LoadCredentials| after service is restarted. void UpdateCredentials( - const std::string& account_id, + const CoreAccountId& account_id, const std::string& refresh_token, signin_metrics::SourceForRefreshTokenOperation source = signin_metrics::SourceForRefreshTokenOperation::kUnknown); void RevokeCredentials( - const std::string& account_id, + const CoreAccountId& account_id, signin_metrics::SourceForRefreshTokenOperation source = signin_metrics::SourceForRefreshTokenOperation::kUnknown); @@ -91,11 +91,11 @@ // server, but the OnRefreshTokenRevoked() notification is sent to the // observers. void ExtractCredentials(ProfileOAuth2TokenService* to_service, - const std::string& account_id); + const CoreAccountId& account_id); #endif // Exposes the ability to update auth errors to tests. - void UpdateAuthErrorForTesting(const std::string& account_id, + void UpdateAuthErrorForTesting(const CoreAccountId& account_id, const GoogleServiceAuthError& error) { UpdateAuthError(account_id, error); }
diff --git a/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.cc b/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.cc index 46deee94..7b4cb81 100644 --- a/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.cc +++ b/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.cc
@@ -42,17 +42,17 @@ // and non-Gaia accounts. Non-Gaia accounts will be filtered out. // |account_keys| is the set of accounts that need to be translated. // |account_tracker_service| is an unowned pointer. -std::vector<std::string> GetOAuthAccountIdsFromAccountKeys( +std::vector<CoreAccountId> GetOAuthAccountIdsFromAccountKeys( const std::set<chromeos::AccountManager::AccountKey>& account_keys, const AccountTrackerService* const account_tracker_service) { - std::vector<std::string> accounts; + std::vector<CoreAccountId> accounts; for (auto& account_key : account_keys) { if (account_key.account_type != chromeos::account_manager::AccountType::ACCOUNT_TYPE_GAIA) { continue; } - std::string account_id = + CoreAccountId account_id = account_tracker_service ->FindAccountInfoByGaiaId(account_key.id /* gaia_id */) .account_id; @@ -185,8 +185,8 @@ // |RefreshTokenIsAvailable|. See crbug.com/919793 for details. At the time of // writing, both |GetAccounts| and |RefreshTokenIsAvailable| use // |GetOAuthAccountIdsFromAccountKeys|. -std::vector<std::string> -ProfileOAuth2TokenServiceDelegateChromeOS::GetAccounts() { +std::vector<CoreAccountId> +ProfileOAuth2TokenServiceDelegateChromeOS::GetAccounts() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // |GetAccounts| intentionally does not care about the state of
diff --git a/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.h b/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.h index bda7d9ff..915af72 100644 --- a/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.h +++ b/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.h
@@ -21,7 +21,6 @@ class AccountTrackerService; namespace signin { - class ProfileOAuth2TokenServiceDelegateChromeOS : public OAuth2TokenServiceDelegate, public chromeos::AccountManager::Observer, @@ -47,7 +46,7 @@ const GoogleServiceAuthError& error) override; GoogleServiceAuthError GetAuthError( const CoreAccountId& account_id) const override; - std::vector<std::string> GetAccounts() override; + std::vector<CoreAccountId> GetAccounts() const override; void LoadCredentials(const CoreAccountId& primary_account_id) override; void UpdateCredentials(const CoreAccountId& account_id, const std::string& refresh_token) override;
diff --git a/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos_unittest.cc b/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos_unittest.cc index 84224fc..b37ce13 100644 --- a/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos_unittest.cc +++ b/components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos_unittest.cc
@@ -434,7 +434,7 @@ account_manager_.UpsertAccount(gaia_account_key_, kUserEmail, kGaiaToken); - std::vector<std::string> accounts = delegate_->GetAccounts(); + std::vector<CoreAccountId> accounts = delegate_->GetAccounts(); EXPECT_EQ(1UL, accounts.size()); EXPECT_EQ(account_info_.account_id, accounts[0]); } @@ -447,7 +447,7 @@ account_manager_.UpsertAccount(gaia_account_key_, kUserEmail, chromeos::AccountManager::kInvalidToken); - std::vector<std::string> accounts = delegate_->GetAccounts(); + std::vector<CoreAccountId> accounts = delegate_->GetAccounts(); EXPECT_EQ(1UL, accounts.size()); EXPECT_EQ(account_info_.account_id, accounts[0]); } @@ -477,11 +477,11 @@ chromeos::AccountManager::kActiveDirectoryDummyToken); // Verify. - const std::vector<std::string> accounts = delegate_->GetAccounts(); + const std::vector<CoreAccountId> accounts = delegate_->GetAccounts(); // 2 Gaia accounts should be returned. EXPECT_EQ(2UL, accounts.size()); // And |RefreshTokenIsAvailable| should return true for these accounts. - for (const std::string& account : accounts) { + for (const CoreAccountId& account : accounts) { EXPECT_TRUE(delegate_->RefreshTokenIsAvailable(account)); } } @@ -491,7 +491,7 @@ delegate_->UpdateCredentials(account_info_.account_id, kGaiaToken); - std::vector<std::string> accounts = delegate_->GetAccounts(); + std::vector<CoreAccountId> accounts = delegate_->GetAccounts(); EXPECT_EQ(1UL, accounts.size()); EXPECT_EQ(account_info_.account_id, accounts[0]); }
diff --git a/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.h b/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.h index eb45eff..f65b275b 100644 --- a/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.h +++ b/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.h
@@ -38,7 +38,7 @@ const GoogleServiceAuthError& error) override; void LoadCredentials(const CoreAccountId& primary_account_id) override; - std::vector<std::string> GetAccounts() override; + std::vector<CoreAccountId> GetAccounts() const override; // This method should not be called when using shared authentication. void UpdateCredentials(const CoreAccountId& account_id,
diff --git a/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.mm b/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.mm index 2257388..9eeaf05 100644 --- a/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.mm +++ b/components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.mm
@@ -224,15 +224,15 @@ } // Get the list of existing account ids. - std::vector<std::string> old_account_ids = GetAccounts(); + std::vector<CoreAccountId> old_account_ids = GetAccounts(); std::sort(old_account_ids.begin(), old_account_ids.end()); - std::set<std::string> accounts_to_add = - base::STLSetDifference<std::set<std::string>>(new_account_ids, - old_account_ids); - std::set<std::string> accounts_to_remove = - base::STLSetDifference<std::set<std::string>>(old_account_ids, - new_account_ids); + std::set<CoreAccountId> accounts_to_add = + base::STLSetDifference<std::set<CoreAccountId>>(new_account_ids, + old_account_ids); + std::set<CoreAccountId> accounts_to_remove = + base::STLSetDifference<std::set<CoreAccountId>>(old_account_ids, + new_account_ids); if (accounts_to_add.empty() && accounts_to_remove.empty()) return; @@ -293,11 +293,12 @@ return new SSOAccessTokenFetcher(consumer, provider_.get(), account_info); } -std::vector<std::string> ProfileOAuth2TokenServiceIOSDelegate::GetAccounts() { +std::vector<CoreAccountId> ProfileOAuth2TokenServiceIOSDelegate::GetAccounts() + const { DCHECK(thread_checker_.CalledOnValidThread()); - std::vector<std::string> account_ids; - for (auto i = accounts_.begin(); i != accounts_.end(); ++i) - account_ids.push_back(i->first); + std::vector<CoreAccountId> account_ids; + for (const auto& account : accounts_) + account_ids.push_back(account.first); return account_ids; }
diff --git a/components/user_manager/fake_user_manager.cc b/components/user_manager/fake_user_manager.cc index 40fe9af7..ce001af 100644 --- a/components/user_manager/fake_user_manager.cc +++ b/components/user_manager/fake_user_manager.cc
@@ -41,27 +41,35 @@ FakeUserManager::~FakeUserManager() { } -const user_manager::User* FakeUserManager::AddUser( - const AccountId& account_id) { +const User* FakeUserManager::AddUser(const AccountId& account_id) { return AddUserWithAffiliation(account_id, false); } -const user_manager::User* FakeUserManager::AddUserWithAffiliation( - const AccountId& account_id, - bool is_affiliated) { - user_manager::User* user = user_manager::User::CreateRegularUser( - account_id, user_manager::USER_TYPE_REGULAR); +const User* FakeUserManager::AddChildUser(const AccountId& account_id) { + User* user = User::CreateRegularUser(account_id, USER_TYPE_CHILD); + users_.push_back(user); + return user; +} + +const User* FakeUserManager::AddGuestUser(const AccountId& account_id) { + User* user = User::CreateGuestUser(account_id); + users_.push_back(user); + return user; +} + +const User* FakeUserManager::AddUserWithAffiliation(const AccountId& account_id, + bool is_affiliated) { + User* user = User::CreateRegularUser(account_id, USER_TYPE_REGULAR); user->SetAffiliation(is_affiliated); users_.push_back(user); return user; } void FakeUserManager::RemoveUserFromList(const AccountId& account_id) { - const user_manager::UserList::iterator it = - std::find_if(users_.begin(), users_.end(), - [&account_id](const user_manager::User* user) { - return user->GetAccountId() == account_id; - }); + const UserList::iterator it = std::find_if( + users_.begin(), users_.end(), [&account_id](const User* user) { + return user->GetAccountId() == account_id; + }); if (it != users_.end()) { if (primary_user_ == *it) primary_user_ = nullptr; @@ -71,16 +79,14 @@ } } -const user_manager::UserList& FakeUserManager::GetUsers() const { +const UserList& FakeUserManager::GetUsers() const { return users_; } -user_manager::UserList FakeUserManager::GetUsersAllowedForMultiProfile() const { - user_manager::UserList result; - for (user_manager::UserList::const_iterator it = users_.begin(); - it != users_.end(); ++it) { - if ((*it)->GetType() == user_manager::USER_TYPE_REGULAR && - !(*it)->is_logged_in()) +UserList FakeUserManager::GetUsersAllowedForMultiProfile() const { + UserList result; + for (UserList::const_iterator it = users_.begin(); it != users_.end(); ++it) { + if ((*it)->GetType() == USER_TYPE_REGULAR && !(*it)->is_logged_in()) result.push_back(*it); } return result; @@ -89,7 +95,7 @@ void FakeUserManager::UpdateUserAccountData( const AccountId& account_id, const UserAccountData& account_data) { - for (user_manager::User* user : users_) { + for (User* user : users_) { if (user->GetAccountId() == account_id) { user->set_display_name(account_data.display_name()); user->set_given_name(account_data.given_name()); @@ -102,8 +108,7 @@ const std::string& username_hash, bool browser_restart, bool is_child) { - for (user_manager::UserList::const_iterator it = users_.begin(); - it != users_.end(); ++it) { + for (UserList::const_iterator it = users_.begin(); it != users_.end(); ++it) { if ((*it)->username_hash() == username_hash) { (*it)->set_is_logged_in(true); (*it)->SetProfileIsCreated(); @@ -121,14 +126,14 @@ RegularUserLoggedInAsEphemeral(account_id, USER_TYPE_REGULAR); } -user_manager::User* FakeUserManager::GetActiveUserInternal() const { +User* FakeUserManager::GetActiveUserInternal() const { if (active_user_ != nullptr) return active_user_; if (!users_.empty()) { if (active_account_id_.is_valid()) { - for (user_manager::UserList::const_iterator it = users_.begin(); - it != users_.end(); ++it) { + for (UserList::const_iterator it = users_.begin(); it != users_.end(); + ++it) { if ((*it)->GetAccountId() == active_account_id_) return *it; } @@ -138,11 +143,11 @@ return nullptr; } -const user_manager::User* FakeUserManager::GetActiveUser() const { +const User* FakeUserManager::GetActiveUser() const { return GetActiveUserInternal(); } -user_manager::User* FakeUserManager::GetActiveUser() { +User* FakeUserManager::GetActiveUser() { return GetActiveUserInternal(); } @@ -150,8 +155,7 @@ void FakeUserManager::SaveUserDisplayName(const AccountId& account_id, const base::string16& display_name) { - for (user_manager::UserList::iterator it = users_.begin(); it != users_.end(); - ++it) { + for (UserList::iterator it = users_.begin(); it != users_.end(); ++it) { if ((*it)->GetAccountId() == account_id) { (*it)->set_display_name(display_name); return; @@ -159,11 +163,11 @@ } } -const user_manager::UserList& FakeUserManager::GetLRULoggedInUsers() const { +const UserList& FakeUserManager::GetLRULoggedInUsers() const { return users_; } -user_manager::UserList FakeUserManager::GetUnlockUsers() const { +UserList FakeUserManager::GetUnlockUsers() const { return users_; } @@ -175,14 +179,12 @@ return true; } -const user_manager::User* FakeUserManager::FindUser( - const AccountId& account_id) const { +const User* FakeUserManager::FindUser(const AccountId& account_id) const { if (active_user_ != nullptr && active_user_->GetAccountId() == account_id) return active_user_; - const user_manager::UserList& users = GetUsers(); - for (user_manager::UserList::const_iterator it = users.begin(); - it != users.end(); ++it) { + const UserList& users = GetUsers(); + for (UserList::const_iterator it = users.begin(); it != users.end(); ++it) { if ((*it)->GetAccountId() == account_id) return *it; } @@ -190,12 +192,11 @@ return nullptr; } -user_manager::User* FakeUserManager::FindUserAndModify( - const AccountId& account_id) { +User* FakeUserManager::FindUserAndModify(const AccountId& account_id) { return nullptr; } -const user_manager::User* FakeUserManager::GetPrimaryUser() const { +const User* FakeUserManager::GetPrimaryUser() const { return primary_user_; } @@ -246,17 +247,14 @@ } bool FakeUserManager::IsLoggedInAsKioskApp() const { - const user_manager::User* active_user = GetActiveUser(); - return active_user - ? active_user->GetType() == user_manager::USER_TYPE_KIOSK_APP - : false; + const User* active_user = GetActiveUser(); + return active_user ? active_user->GetType() == USER_TYPE_KIOSK_APP : false; } bool FakeUserManager::IsLoggedInAsArcKioskApp() const { - const user_manager::User* active_user = GetActiveUser(); - return active_user - ? active_user->GetType() == user_manager::USER_TYPE_ARC_KIOSK_APP - : false; + const User* active_user = GetActiveUser(); + return active_user ? active_user->GetType() == USER_TYPE_ARC_KIOSK_APP + : false; } bool FakeUserManager::IsLoggedInAsStub() const { @@ -276,11 +274,11 @@ return true; } -bool FakeUserManager::IsGaiaUserAllowed(const user_manager::User& user) const { +bool FakeUserManager::IsGaiaUserAllowed(const User& user) const { return true; } -bool FakeUserManager::IsUserAllowed(const user_manager::User& user) const { +bool FakeUserManager::IsUserAllowed(const User& user) const { return true; } @@ -314,8 +312,8 @@ return false; } -void FakeUserManager::UpdateLoginState(const user_manager::User* active_user, - const user_manager::User* primary_user, +void FakeUserManager::UpdateLoginState(const User* active_user, + const User* primary_user, bool is_current_user_owner) const {} bool FakeUserManager::GetPlatformKnownUserId(const std::string& user_email,
diff --git a/components/user_manager/fake_user_manager.h b/components/user_manager/fake_user_manager.h index bb157ce..dd26835 100644 --- a/components/user_manager/fake_user_manager.h +++ b/components/user_manager/fake_user_manager.h
@@ -25,19 +25,20 @@ // Create and add a new user. Created user is not affiliated with the domain, // that owns the device. - virtual const user_manager::User* AddUser(const AccountId& account_id); + const User* AddUser(const AccountId& account_id); + const User* AddChildUser(const AccountId& account_id); + const User* AddGuestUser(const AccountId& account_id); // The same as AddUser() but allows to specify user affiliation with the // domain, that owns the device. - virtual const user_manager::User* AddUserWithAffiliation( - const AccountId& account_id, - bool is_affiliated); + const User* AddUserWithAffiliation(const AccountId& account_id, + bool is_affiliated); void set_local_state(PrefService* local_state) { local_state_ = local_state; } // UserManager overrides. - const user_manager::UserList& GetUsers() const override; - user_manager::UserList GetUsersAllowedForMultiProfile() const override; + const UserList& GetUsers() const override; + UserList GetUsersAllowedForMultiProfile() const override; void UpdateUserAccountData(const AccountId& account_id, const UserAccountData& account_data) override; @@ -47,8 +48,8 @@ bool browser_restart, bool is_child) override; - const user_manager::User* GetActiveUser() const override; - user_manager::User* GetActiveUser() override; + const User* GetActiveUser() const override; + User* GetActiveUser() override; void SwitchActiveUser(const AccountId& account_id) override; void SaveUserDisplayName(const AccountId& account_id, const base::string16& display_name) override; @@ -60,21 +61,20 @@ // Not implemented. void Shutdown() override {} - const user_manager::UserList& GetLRULoggedInUsers() const override; - user_manager::UserList GetUnlockUsers() const override; + const UserList& GetLRULoggedInUsers() const override; + UserList GetUnlockUsers() const override; const AccountId& GetOwnerAccountId() const override; void OnSessionStarted() override {} void RemoveUser(const AccountId& account_id, - user_manager::RemoveUserDelegate* delegate) override {} + RemoveUserDelegate* delegate) override {} void RemoveUserFromList(const AccountId& account_id) override; bool IsKnownUser(const AccountId& account_id) const override; - const user_manager::User* FindUser( - const AccountId& account_id) const override; - user_manager::User* FindUserAndModify(const AccountId& account_id) override; - const user_manager::User* GetPrimaryUser() const override; - void SaveUserOAuthStatus( - const AccountId& account_id, - user_manager::User::OAuthTokenStatus oauth_token_status) override {} + const User* FindUser(const AccountId& account_id) const override; + User* FindUserAndModify(const AccountId& account_id) override; + const User* GetPrimaryUser() const override; + void SaveUserOAuthStatus(const AccountId& account_id, + User::OAuthTokenStatus oauth_token_status) override { + } void SaveForceOnlineSignin(const AccountId& account_id, bool force_online_signin) override {} base::string16 GetUserDisplayName(const AccountId& account_id) const override; @@ -102,10 +102,10 @@ void NotifyLocalStateChanged() override {} bool AreSupervisedUsersAllowed() const override; bool IsGuestSessionAllowed() const override; - bool IsGaiaUserAllowed(const user_manager::User& user) const override; - bool IsUserAllowed(const user_manager::User& user) const override; - void UpdateLoginState(const user_manager::User* active_user, - const user_manager::User* primary_user, + bool IsGaiaUserAllowed(const User& user) const override; + bool IsUserAllowed(const User& user) const override; + void UpdateLoginState(const User* active_user, + const User* primary_user, bool is_current_user_owner) const override; bool GetPlatformKnownUserId(const std::string& user_email, const std::string& gaia_id, @@ -126,7 +126,7 @@ PrefService* GetLocalState() const override; void HandleUserOAuthTokenStatusChange( const AccountId& account_id, - user_manager::User::OAuthTokenStatus status) const override {} + User::OAuthTokenStatus status) const override {} bool IsEnterpriseManaged() const override; void LoadDeviceLocalAccounts( std::set<AccountId>* device_local_accounts_set) override {} @@ -137,14 +137,14 @@ bool IsDeviceLocalAccountMarkedForRemoval( const AccountId& account_id) const override; void DemoAccountLoggedIn() override {} - void KioskAppLoggedIn(user_manager::User* user) override {} - void ArcKioskAppLoggedIn(user_manager::User* user) override {} - void PublicAccountUserLoggedIn(user_manager::User* user) override {} + void KioskAppLoggedIn(User* user) override {} + void ArcKioskAppLoggedIn(User* user) override {} + void PublicAccountUserLoggedIn(User* user) override {} void SupervisedUserLoggedIn(const AccountId& account_id) override {} void OnUserRemoved(const AccountId& account_id) override {} protected: - user_manager::User* primary_user_; + User* primary_user_; // Can be set by set_local_state(). PrefService* local_state_ = nullptr; @@ -155,7 +155,7 @@ private: // We use this internal function for const-correctness. - user_manager::User* GetActiveUserInternal() const; + User* GetActiveUserInternal() const; // stub, always empty. AccountId owner_account_id_ = EmptyAccountId();
diff --git a/components/viz/service/display/overlay_strategy_single_on_top.cc b/components/viz/service/display/overlay_strategy_single_on_top.cc index 03e71188..937350a 100644 --- a/components/viz/service/display/overlay_strategy_single_on_top.cc +++ b/components/viz/service/display/overlay_strategy_single_on_top.cc
@@ -35,6 +35,15 @@ if (OverlayCandidate::FromDrawQuad(resource_provider, output_color_matrix, *it, &candidate) && !OverlayCandidate::IsOccluded(candidate, quad_list->cbegin(), it)) { + // If the candidate has been promoted previously and has not changed + // (resource ID is the same) for 3 frames, do not use it as Overlay as + // flattening it to the main fb will be more power efficient when the + // contents don't change. + if (candidate.resource_id == previous_frame_resource_id_ && + ++same_resource_id_frames_count_ > + kMaxFrameCandidateWithSameResourceId) { + continue; + } if (candidate.display_rect.size().GetArea() > best_candidate.display_rect.size().GetArea()) { best_candidate = candidate; @@ -45,10 +54,17 @@ if (best_quad_it == quad_list->end()) return false; - if (TryOverlay(quad_list, candidate_list, best_candidate, best_quad_it)) + if (TryOverlay(quad_list, candidate_list, best_candidate, best_quad_it)) { + if (previous_frame_resource_id_ != best_candidate.resource_id) { + previous_frame_resource_id_ = best_candidate.resource_id; + same_resource_id_frames_count_ = 1; + } return true; - - return false; + } else { + previous_frame_resource_id_ = kInvalidResourceId; + same_resource_id_frames_count_ = 0; + return false; + } } bool OverlayStrategySingleOnTop::TryOverlay(
diff --git a/components/viz/service/display/overlay_strategy_single_on_top.h b/components/viz/service/display/overlay_strategy_single_on_top.h index dd9f28e..a7ad251 100644 --- a/components/viz/service/display/overlay_strategy_single_on_top.h +++ b/components/viz/service/display/overlay_strategy_single_on_top.h
@@ -31,6 +31,8 @@ OverlayStrategy GetUMAEnum() const override; private: + static constexpr size_t kMaxFrameCandidateWithSameResourceId = 3; + bool TryOverlay(QuadList* quad_list, OverlayCandidateList* candidate_list, const OverlayCandidate& candidate, @@ -38,6 +40,9 @@ OverlayCandidateValidator* capability_checker_; // Weak. + ResourceId previous_frame_resource_id_ = kInvalidResourceId; + size_t same_resource_id_frames_count_ = 0; + DISALLOW_COPY_AND_ASSIGN(OverlayStrategySingleOnTop); };
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc index 94d9727..aa35c88 100644 --- a/components/viz/service/display/overlay_unittest.cc +++ b/components/viz/service/display/overlay_unittest.cc
@@ -187,8 +187,7 @@ class DefaultOverlayProcessor : public OverlayProcessor { public: - DefaultOverlayProcessor( - ContextProvider* context_provider); + DefaultOverlayProcessor(ContextProvider* context_provider); size_t GetStrategyCount() const; }; @@ -1589,6 +1588,70 @@ EXPECT_EQ(0U, candidate_list.size()); } +TEST_F(SingleOverlayOnTopTest, DoNotPromoteIfContentsDontChange) { + // Resource ID for the repeated quads. Value should be equivalent to + // OverlayStrategySingleOnTop::kMaxFrameCandidateWithSameResourceId. + constexpr size_t kFramesSkippedBeforeNotPromoting = 3; + ResourceId previous_resource_id; + + for (size_t i = 0; i < 3 + kFramesSkippedBeforeNotPromoting; ++i) { + std::unique_ptr<RenderPass> pass = CreateRenderPass(); + RenderPass* main_pass = pass.get(); + + ResourceId resource_id; + if (i == 0 || i == 1) { + // Create a unique resource only for the first 2 frames. + resource_id = CreateResource( + resource_provider_.get(), child_resource_provider_.get(), + child_provider_.get(), pass->output_rect.size(), + true /*is_overlay_candidate*/); + previous_resource_id = resource_id; + } else { + // Starting the 3rd frame, they should have the same resource ID. + resource_id = previous_resource_id; + } + + // Create a quad with the resource ID selected above. + TextureDrawQuad* original_quad = + main_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); + float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; + original_quad->SetNew( + pass->shared_quad_state_list.back(), pass->output_rect, + pass->output_rect, false /*needs_blending*/, resource_id, + false /*premultiplied_alpha*/, kUVTopLeft, kUVBottomRight, + SK_ColorTRANSPARENT, vertex_opacity, false /*flipped*/, + false /*nearest_neighbor*/, false /*secure_output_only*/, + gfx::ProtectedVideoType::kClear); + original_quad->set_resource_size_in_pixels(pass->output_rect.size()); + + // Add something behind it. + CreateFullscreenOpaqueQuad(resource_provider_.get(), + pass->shared_quad_state_list.back(), main_pass); + + // Check for potential candidates. + OverlayCandidateList candidate_list; + OverlayProcessor::FilterOperationsMap render_pass_filters; + OverlayProcessor::FilterOperationsMap render_pass_backdrop_filters; + RenderPassList pass_list; + pass_list.push_back(std::move(pass)); + overlay_processor_->ProcessForOverlays( + resource_provider_.get(), &pass_list, GetIdentityColorMatrix(), + render_pass_filters, render_pass_backdrop_filters, &candidate_list, + nullptr, nullptr, &damage_rect_, &content_bounds_); + + if (i <= kFramesSkippedBeforeNotPromoting) { + EXPECT_EQ(1U, candidate_list.size()); + // Check that the right resource id got extracted. + EXPECT_EQ(resource_id, candidate_list.back().resource_id); + // Check that the quad is gone. + EXPECT_EQ(1U, main_pass->quad_list.size()); + } else { + // Check nothing has been promoted. + EXPECT_EQ(2U, main_pass->quad_list.size()); + } + } +} + TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { AddExpectedRectToOverlayValidator(gfx::RectF(kOverlayBottomRightRect));
diff --git a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc index dfa184a..6c6d6a6 100644 --- a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc +++ b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc
@@ -8,6 +8,10 @@ #include "base/bind.h" #include "base/compiler_specific.h" +#include "base/metrics/histogram.h" +#include "base/metrics/histogram_base.h" +#include "base/metrics/histogram_functions.h" +#include "base/metrics/histogram_macros.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "cc/base/histograms.h" @@ -23,11 +27,28 @@ #include "components/viz/service/surfaces/surface.h" namespace viz { +namespace { + +base::HistogramBase* GetHistogramNamed(const char* histogram_name_format, + const char* client_name) { + if (!client_name) + return nullptr; + + return base::LinearHistogram::FactoryMicrosecondsTimeGet( + base::StringPrintf(histogram_name_format, client_name), + base::TimeDelta::FromMicroseconds(1), + base::TimeDelta::FromMilliseconds(200), 50, + base::HistogramBase::kUmaTargetedHistogramFlag); +} +} // namespace DirectLayerTreeFrameSink::PipelineReporting::PipelineReporting( const BeginFrameArgs args, - base::TimeTicks now) - : trace_id_(args.trace_id), frame_time_(now) {} + base::TimeTicks now, + base::HistogramBase* submit_begin_frame_histogram) + : trace_id_(args.trace_id), + frame_time_(now), + submit_begin_frame_histogram_(submit_begin_frame_histogram) {} DirectLayerTreeFrameSink::PipelineReporting::~PipelineReporting() = default; @@ -36,16 +57,10 @@ TRACE_ID_GLOBAL(trace_id_), TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, "step", "SubmitCompositorFrame"); + auto report_time = base::TimeTicks::Now() - frame_time_; - // Note that client_name is constant during the lifetime of the process and - // it's either "Browser" or "Renderer". - UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES( - base::StringPrintf( - "GraphicsPipeline.%s.SubmitCompositorFrameAfterBeginFrame", - cc::GetClientNameForMetrics()), - base::TimeTicks::Now() - frame_time_, - base::TimeDelta::FromMicroseconds(1), - base::TimeDelta::FromMilliseconds(200), 50); + if (submit_begin_frame_histogram_) + submit_begin_frame_histogram_->AddTimeMicrosecondsGranularity(report_time); } DirectLayerTreeFrameSink::DirectLayerTreeFrameSink( @@ -69,6 +84,12 @@ display_(display), display_client_(display_client), use_viz_hit_test_(use_viz_hit_test), + receive_begin_frame_histogram_( + GetHistogramNamed("GraphicsPipeline.%s.ReceivedBeginFrame", + cc::GetClientNameForMetrics())), + submit_begin_frame_histogram_(GetHistogramNamed( + "GraphicsPipeline.%s.SubmitCompositorFrameAfterBeginFrame", + cc::GetClientNameForMetrics())), weak_factory_(this) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); } @@ -272,23 +293,20 @@ pair.second.presentation_feedback); DCHECK_LE(pipeline_reporting_frame_times_.size(), 25u); - // Note that client_name is constant during the lifetime of the process and - // it's either "Browser" or "Renderer". - const char* client_name = cc::GetClientNameForMetrics(); - if (client_name && args.trace_id != -1) { + if (args.trace_id != -1) { base::TimeTicks current_time = base::TimeTicks::Now(); - PipelineReporting report(args, current_time); + PipelineReporting report(args, current_time, submit_begin_frame_histogram_); pipeline_reporting_frame_times_.emplace(args.trace_id, report); // Missed BeginFrames use the frame time of the last received BeginFrame // which is bogus from a reporting perspective if nothing has been updating // on screen for a while. if (args.type != BeginFrameArgs::MISSED) { base::TimeDelta frame_difference = current_time - args.frame_time; - UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES( - base::StringPrintf("GraphicsPipeline.%s.ReceivedBeginFrame", - client_name), - frame_difference, base::TimeDelta::FromMicroseconds(1), - base::TimeDelta::FromMilliseconds(100), 50); + + if (receive_begin_frame_histogram_) { + receive_begin_frame_histogram_->AddTimeMicrosecondsGranularity( + frame_difference); + } } } if (!needs_begin_frames_) {
diff --git a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.h b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.h index 28231b18..b1e69ef 100644 --- a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.h +++ b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.h
@@ -19,6 +19,10 @@ #include "services/viz/privileged/interfaces/compositing/display_private.mojom.h" #include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom.h" +namespace base { +class HistogramBase; +} // namespace base + namespace viz { class CompositorFrameSinkSupportManager; class Display; @@ -36,7 +40,9 @@ // reporting. class PipelineReporting { public: - PipelineReporting(BeginFrameArgs args, base::TimeTicks now); + PipelineReporting(BeginFrameArgs args, + base::TimeTicks now, + base::HistogramBase* submit_begin_frame_histogram); ~PipelineReporting(); void Report(); @@ -50,6 +56,10 @@ // The time stamp for the begin frame to arrive on client side. base::TimeTicks frame_time_; + + // Histogram metrics used to record + // GraphicsPipeline.ClientName.SubmitCompositorFrameAfterBeginFrame + base::HistogramBase* submit_begin_frame_histogram_; }; // The underlying Display, FrameSinkManagerImpl, and LocalSurfaceIdAllocator @@ -132,6 +142,15 @@ // Use this map to record the time when client received the BeginFrameArgs. base::flat_map<int64_t, PipelineReporting> pipeline_reporting_frame_times_; + + // Histogram metrics used to record + // GraphicsPipeline.ClientName.ReceivedBeginFrame + base::HistogramBase* const receive_begin_frame_histogram_; + + // Histogram metrics used to record + // GraphicsPipeline.ClientName.SubmitCompositorFrameAfterBeginFrame + base::HistogramBase* const submit_begin_frame_histogram_; + base::WeakPtrFactory<DirectLayerTreeFrameSink> weak_factory_; DISALLOW_COPY_AND_ASSIGN(DirectLayerTreeFrameSink);
diff --git a/content/browser/accessibility/accessibility_tree_formatter_blink.cc b/content/browser/accessibility/accessibility_tree_formatter_blink.cc index 24feeee..4ef0ceb 100644 --- a/content/browser/accessibility/accessibility_tree_formatter_blink.cc +++ b/content/browser/accessibility/accessibility_tree_formatter_blink.cc
@@ -406,26 +406,22 @@ FormatCoordinates("size", "boundsWidth", "boundsHeight", dict), &line); - bool ignored = false; - dict.GetBoolean("ignored", &ignored); - if (!ignored) { - WriteAttribute( - false, - FormatCoordinates("pageLocation", "pageBoundsX", "pageBoundsY", dict), - &line); - WriteAttribute(false, - FormatCoordinates("pageSize", "pageBoundsWidth", - "pageBoundsHeight", dict), - &line); - WriteAttribute(false, - FormatCoordinates("unclippedLocation", "unclippedBoundsX", - "unclippedBoundsY", dict), - &line); - WriteAttribute(false, - FormatCoordinates("unclippedSize", "unclippedBoundsWidth", - "unclippedBoundsHeight", dict), - &line); - } + WriteAttribute( + false, + FormatCoordinates("pageLocation", "pageBoundsX", "pageBoundsY", dict), + &line); + WriteAttribute(false, + FormatCoordinates("pageSize", "pageBoundsWidth", + "pageBoundsHeight", dict), + &line); + WriteAttribute(false, + FormatCoordinates("unclippedLocation", "unclippedBoundsX", + "unclippedBoundsY", dict), + &line); + WriteAttribute(false, + FormatCoordinates("unclippedSize", "unclippedBoundsWidth", + "unclippedBoundsHeight", dict), + &line); bool transform; if (dict.GetBoolean("transform", &transform) && transform)
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc index 3ad5986..32f42b2 100644 --- a/content/browser/accessibility/accessibility_win_browsertest.cc +++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -978,18 +978,8 @@ LoadInitialAccessibilityTreeFromHtml( "<div role=group style='visibility: hidden'>text</div>"); - // Trigger Event::kDocumentTitleChanged, the <body> can receive an - // Event::kChildrenChanged after the document is loaded, but before - // modifying visibility below. This will make sure that we wait for - // the Event::kChildrenChanged that we care about for this test. - AccessibilityNotificationWaiter document_waiter( - shell()->web_contents(), ui::kAXModeComplete, - ax::mojom::Event::kDocumentTitleChanged); - ExecuteScript(L"document.title = 'document'"); - document_waiter.WaitForNotification(); - // Check the accessible tree of the browser. - AccessibleChecker document_checker(L"document", ROLE_SYSTEM_DOCUMENT, + AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, std::wstring()); document_checker.CheckAccessible(GetRendererAccessible());
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc index e90e1884..398fda3 100644 --- a/content/browser/accessibility/browser_accessibility.cc +++ b/content/browser/accessibility/browser_accessibility.cc
@@ -71,13 +71,6 @@ if (InternalChildCount() == 0) return true; - return PlatformIsLeafIncludingIgnored(); -} - -bool BrowserAccessibility::PlatformIsLeafIncludingIgnored() const { - if (node()->children().size() == 0) - return true; - // These types of objects may have children that we use as internal // implementation details, but we want to expose them as leaves to platform // accessibility APIs because screen readers might be confused if they find @@ -108,7 +101,7 @@ if (!instance_active()) return false; // Allow events unless this object would be trimmed away. - return !PlatformIsChildOfLeafIncludingIgnored(); + return !PlatformIsChildOfLeaf(); } uint32_t BrowserAccessibility::PlatformChildCount() const { @@ -209,18 +202,6 @@ return false; } -bool BrowserAccessibility::PlatformIsChildOfLeafIncludingIgnored() const { - BrowserAccessibility* ancestor = InternalGetParent(); - - while (ancestor) { - if (ancestor->PlatformIsLeafIncludingIgnored()) - return true; - ancestor = ancestor->InternalGetParent(); - } - - return false; -} - BrowserAccessibility* BrowserAccessibility::GetClosestPlatformObject() const { BrowserAccessibility* platform_object = const_cast<BrowserAccessibility*>(this);
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h index 92db5030..405b95d6 100644 --- a/content/browser/accessibility/browser_accessibility.h +++ b/content/browser/accessibility/browser_accessibility.h
@@ -115,18 +115,11 @@ // Returns true if this is a leaf node on this platform, meaning any // children should not be exposed to this platform's native accessibility - // layer. + // layer. Each platform subclass should implement this itself. // The definition of a leaf may vary depending on the platform, // but a leaf node should never have children that are focusable or // that might send notifications. - bool PlatformIsLeaf() const; - - // Returns true if this is a leaf node on this platform, including - // ignored nodes, meaning any children should not be exposed to this - // platform's native accessibility layer, but a node shouldn't be - // considered a leaf node solely because it has only ignored children. - // Each platform subclass should implement this itself. - virtual bool PlatformIsLeafIncludingIgnored() const; + virtual bool PlatformIsLeaf() const; // Returns true if this object can fire events. virtual bool CanFireEvents() const; @@ -149,12 +142,6 @@ // platform. bool PlatformIsChildOfLeaf() const; - // Returns true if an ancestor of this node (not including itself) is a - // leaf node, including ignored nodes, meaning that this node is not - // actually exposed to the platform, but a node shouldn't be - // considered a leaf node solely because it has only ignored children. - bool PlatformIsChildOfLeafIncludingIgnored() const; - // If this object is exposed to the platform, returns this object. Otherwise, // returns the platform leaf under which this object is found. BrowserAccessibility* GetClosestPlatformObject() const;
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc index 42c4be2e..5b1b4c840 100644 --- a/content/browser/accessibility/browser_accessibility_android.cc +++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -164,8 +164,8 @@ return value; } -bool BrowserAccessibilityAndroid::PlatformIsLeafIncludingIgnored() const { - if (BrowserAccessibility::PlatformIsLeafIncludingIgnored()) +bool BrowserAccessibilityAndroid::PlatformIsLeaf() const { + if (BrowserAccessibility::PlatformIsLeaf()) return true; // Iframes are always allowed to contain children.
diff --git a/content/browser/accessibility/browser_accessibility_android.h b/content/browser/accessibility/browser_accessibility_android.h index 8143ac7..cdd15c6 100644 --- a/content/browser/accessibility/browser_accessibility_android.h +++ b/content/browser/accessibility/browser_accessibility_android.h
@@ -27,7 +27,7 @@ void OnLocationChanged() override; base::string16 GetValue() const override; - bool PlatformIsLeafIncludingIgnored() const override; + bool PlatformIsLeaf() const override; // Android needs events even on objects that are trimmed away. bool CanFireEvents() const override;
diff --git a/content/browser/accessibility/browser_accessibility_com_win.cc b/content/browser/accessibility/browser_accessibility_com_win.cc index b8f7c6e6..58209c7 100644 --- a/content/browser/accessibility/browser_accessibility_com_win.cc +++ b/content/browser/accessibility/browser_accessibility_com_win.cc
@@ -53,7 +53,7 @@ // BrowserAccessibilityComWin::WinAttributes::WinAttributes() - : ignored(false), ia_role(0), ia_state(0), ia2_role(0), ia2_state(0) {} + : ia_role(0), ia_state(0), ia2_role(0), ia2_state(0) {} BrowserAccessibilityComWin::WinAttributes::~WinAttributes() {} @@ -1720,8 +1720,6 @@ owner()->GetString16Attribute(ax::mojom::StringAttribute::kDescription); win_attributes_->value = GetValue(); - - win_attributes_->ignored = owner()->HasState(ax::mojom::State::kIgnored); } void BrowserAccessibilityComWin::UpdateStep2ComputeHypertext() { @@ -1731,18 +1729,21 @@ void BrowserAccessibilityComWin::UpdateStep3FireEvents( bool is_subtree_creation) { int32_t state = MSAAState(); - const bool ignored = owner()->HasState(ax::mojom::State::kIgnored); - - // Suppress all of these events when the node is ignored, or when the ignored - // state has changed. - if (ignored || (old_win_attributes_->ignored != ignored)) - return; // The rest of the events only fire on changes, not on new objects. + bool did_fire_namechange = false; + if (old_win_attributes_->ia_role != 0 || !old_win_attributes_->role_name.empty()) { - // Fire an event if the description, help, or value changes. + // Fire an event if the name, description, help, or value changes. + if (name() != old_win_attributes_->name && + GetData().GetNameFrom() != ax::mojom::NameFrom::kContents) { + // Only fire name changes when the name comes from an attribute, otherwise + // name changes are redundant with text removed/inserted events. + FireNativeEvent(EVENT_OBJECT_NAMECHANGE); + did_fire_namechange = true; + } if (description() != old_win_attributes_->description) FireNativeEvent(EVENT_OBJECT_DESCRIPTIONCHANGE); @@ -1766,11 +1767,10 @@ } // Fire hypertext-related events. - // Do not fire removed/inserted when a name change event will be fired by - // AXEventGenerator, as they are providing redundant information and will - // lead to duplicate announcements. - if (name() == old_win_attributes_->name || - GetData().GetNameFrom() == ax::mojom::NameFrom::kContents) { + // Do not fire removed/inserted when a name change event was also fired, as + // they are providing redundant information and will lead to duplicate + // announcements. + if (!did_fire_namechange) { size_t start, old_len, new_len; ComputeHypertextRemovedAndInserted(&start, &old_len, &new_len); if (old_len > 0) {
diff --git a/content/browser/accessibility/browser_accessibility_com_win.h b/content/browser/accessibility/browser_accessibility_com_win.h index 97994fa..2560c375 100644 --- a/content/browser/accessibility/browser_accessibility_com_win.h +++ b/content/browser/accessibility/browser_accessibility_com_win.h
@@ -496,9 +496,6 @@ WinAttributes(); ~WinAttributes(); - // Ignored state - bool ignored; - // IAccessible role and state. int32_t ia_role; int32_t ia_state;
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc index 9f402852..8903c77 100644 --- a/content/browser/accessibility/browser_accessibility_manager.cc +++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -381,9 +381,6 @@ return true; } - // Allow derived classes to do event pre-processing. - BeforeAccessibilityEvents(); - // If the root's parent is in another accessibility tree but it wasn't // previously connected, post the proper notifications on the parent. BrowserAccessibility* parent = GetParentNodeFromParentTree(); @@ -405,7 +402,7 @@ root_manager->FireFocusEventsIfNeeded(); // Fire any events related to changes to the tree. - for (const auto& targeted_event : event_generator_) { + for (auto targeted_event : event_generator_) { BrowserAccessibility* event_target = GetFromAXNode(targeted_event.node); if (!event_target || !event_target->CanFireEvents()) continue; @@ -444,8 +441,6 @@ return true; } -void BrowserAccessibilityManager::BeforeAccessibilityEvents() {} - void BrowserAccessibilityManager::FinalizeAccessibilityEvents() {} void BrowserAccessibilityManager::OnLocationChanges(
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h index f6e4b53..78efe6d 100644 --- a/content/browser/accessibility/browser_accessibility_manager.h +++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -266,9 +266,6 @@ virtual bool OnAccessibilityEvents(const AXEventNotificationDetails& details) WARN_UNUSED_RESULT; - // Allows derived classes to do event pre-processing - virtual void BeforeAccessibilityEvents(); - // Allows derived classes to do event post-processing. virtual void FinalizeAccessibilityEvents();
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc index c7c83b4..74da28ea6 100644 --- a/content/browser/accessibility/browser_accessibility_manager_android.cc +++ b/content/browser/accessibility/browser_accessibility_manager_android.cc
@@ -217,7 +217,6 @@ case ui::AXEventGenerator::Event::GRABBED_CHANGED: case ui::AXEventGenerator::Event::HASPOPUP_CHANGED: case ui::AXEventGenerator::Event::HIERARCHICAL_LEVEL_CHANGED: - case ui::AXEventGenerator::Event::IGNORED_CHANGED: case ui::AXEventGenerator::Event::IMAGE_ANNOTATION_CHANGED: case ui::AXEventGenerator::Event::INVALID_STATUS_CHANGED: case ui::AXEventGenerator::Event::KEY_SHORTCUTS_CHANGED:
diff --git a/content/browser/accessibility/browser_accessibility_manager_auralinux.cc b/content/browser/accessibility/browser_accessibility_manager_auralinux.cc index 70f57d74..b5846a5e 100644 --- a/content/browser/accessibility/browser_accessibility_manager_auralinux.cc +++ b/content/browser/accessibility/browser_accessibility_manager_auralinux.cc
@@ -154,18 +154,6 @@ case ui::AXEventGenerator::Event::EXPANDED: FireExpandedEvent(node, true); break; - case ui::AXEventGenerator::Event::IGNORED_CHANGED: - // Since AuraLinux needs to send the children-changed::add event with the - // index in parent, the event must be fired after the node is unignored. - // children-changed:remove is handled in |OnStateChanged| - if (!node->HasState(ax::mojom::State::kIgnored)) { - if (node->IsNative() && node->GetParent()) { - g_signal_emit_by_name(node->GetParent(), "children-changed::add", - node->GetIndexInParent(), - node->GetNativeViewAccessible()); - } - } - break; case ui::AXEventGenerator::Event::LOAD_COMPLETE: FireLoadingEvent(node, false); FireEvent(node, ax::mojom::Event::kLoadComplete); @@ -234,27 +222,6 @@ document_platform_node->SetEmbeddingWindow(window); } -void BrowserAccessibilityManagerAuraLinux::OnStateChanged( - ui::AXTree* tree, - ui::AXNode* node, - ax::mojom::State state, - bool new_value) { - DCHECK_EQ(ax_tree(), tree); - - // Since AuraLinux needs to send the children-changed::remove event with the - // index in parent, the event must be fired before the node becomes ignored. - // children-changed:add is handled with the generated Event::IGNORED_CHANGED. - if (state == ax::mojom::State::kIgnored && new_value) { - DCHECK(!node->data().HasState(ax::mojom::State::kIgnored)); - BrowserAccessibility* obj = GetFromAXNode(node); - if (obj && obj->IsNative() && obj->GetParent()) { - g_signal_emit_by_name(obj->GetParent(), "children-changed::remove", - obj->GetIndexInParent(), - obj->GetNativeViewAccessible()); - } - } -} - void BrowserAccessibilityManagerAuraLinux::OnSubtreeWillBeDeleted( ui::AXTree* tree, ui::AXNode* node) {
diff --git a/content/browser/accessibility/browser_accessibility_manager_auralinux.h b/content/browser/accessibility/browser_accessibility_manager_auralinux.h index 4f00246..18e932f 100644 --- a/content/browser/accessibility/browser_accessibility_manager_auralinux.h +++ b/content/browser/accessibility/browser_accessibility_manager_auralinux.h
@@ -42,10 +42,6 @@ protected: // AXTreeObserver methods. - void OnStateChanged(ui::AXTree* tree, - ui::AXNode* node, - ax::mojom::State state, - bool new_value) override; void OnSubtreeWillBeDeleted(ui::AXTree* tree, ui::AXNode* node) override; void OnAtomicUpdateFinished( ui::AXTree* tree,
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm b/content/browser/accessibility/browser_accessibility_manager_mac.mm index 55964c0..e02f5f9 100644 --- a/content/browser/accessibility/browser_accessibility_manager_mac.mm +++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm
@@ -388,7 +388,6 @@ case ui::AXEventGenerator::Event::GRABBED_CHANGED: case ui::AXEventGenerator::Event::HASPOPUP_CHANGED: case ui::AXEventGenerator::Event::HIERARCHICAL_LEVEL_CHANGED: - case ui::AXEventGenerator::Event::IGNORED_CHANGED: case ui::AXEventGenerator::Event::IMAGE_ANNOTATION_CHANGED: case ui::AXEventGenerator::Event::KEY_SHORTCUTS_CHANGED: case ui::AXEventGenerator::Event::LABELED_BY_CHANGED:
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc index 7d632fd..0c460ba 100644 --- a/content/browser/accessibility/browser_accessibility_manager_win.cc +++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -9,9 +9,7 @@ #include <vector> -#include "base/auto_reset.h" #include "base/command_line.h" -#include "base/stl_util.h" #include "base/win/scoped_variant.h" #include "base/win/windows_version.h" #include "content/browser/accessibility/browser_accessibility_state_impl.h" @@ -246,15 +244,6 @@ FireUiaPropertyChangedEvent(UIA_LevelPropertyId, node); aria_properties_events_.insert(node); break; - case ui::AXEventGenerator::Event::IGNORED_CHANGED: - if (node->HasState(ax::mojom::State::kIgnored)) { - FireWinAccessibilityEvent(EVENT_OBJECT_HIDE, node); - FireUiaStructureChangedEvent(StructureChangeType_ChildRemoved, node); - } else { - FireWinAccessibilityEvent(EVENT_OBJECT_SHOW, node); - FireUiaStructureChangedEvent(StructureChangeType_ChildAdded, node); - } - break; case ui::AXEventGenerator::Event::IMAGE_ANNOTATION_CHANGED: FireWinAccessibilityEvent(EVENT_OBJECT_NAMECHANGE, node); break; @@ -310,10 +299,6 @@ break; case ui::AXEventGenerator::Event::NAME_CHANGED: FireUiaPropertyChangedEvent(UIA_NamePropertyId, node); - // Only fire name changes when the name comes from an attribute, otherwise - // name changes are redundant with text removed/inserted events. - if (node->GetData().GetNameFrom() != ax::mojom::NameFrom::kContents) - FireWinAccessibilityEvent(EVENT_OBJECT_NAMECHANGE, node); break; case ui::AXEventGenerator::Event::PLACEHOLDER_CHANGED: FireUiaPropertyChangedEvent(UIA_HelpTextPropertyId, node); @@ -422,18 +407,6 @@ return; if (!ShouldFireEventForNode(node)) return; - // Suppress events when |IGNORED_CHANGED| except for related SHOW / HIDE - if (base::Contains(ignored_changed_nodes_, node)) { - switch (win_event_type) { - case EVENT_OBJECT_HIDE: - case EVENT_OBJECT_SHOW: - break; - default: - return; - } - } else if (node->HasState(ax::mojom::State::kIgnored)) { - return; - } HWND hwnd = GetParentHWND(); if (!hwnd) @@ -454,10 +427,6 @@ return; if (!ShouldFireEventForNode(node)) return; - // Suppress events when |IGNORED_CHANGED| - if (node->HasState(ax::mojom::State::kIgnored) || - base::Contains(ignored_changed_nodes_, node)) - return; ::UiaRaiseAutomationEvent(ToBrowserAccessibilityWin(node)->GetCOM(), uia_event); @@ -470,10 +439,6 @@ return; if (!ShouldFireEventForNode(node)) return; - // Suppress events when |IGNORED_CHANGED| - if (node->HasState(ax::mojom::State::kIgnored) || - base::Contains(ignored_changed_nodes_, node)) - return; // The old value is not used by the system VARIANT old_value = {}; @@ -495,18 +460,6 @@ return; if (!ShouldFireEventForNode(node)) return; - // Suppress events when |IGNORED_CHANGED| except for related structure changes - if (base::Contains(ignored_changed_nodes_, node)) { - switch (change_type) { - case StructureChangeType_ChildRemoved: - case StructureChangeType_ChildAdded: - break; - default: - return; - } - } else if (node->HasState(ax::mojom::State::kIgnored)) { - return; - } auto* provider = ToBrowserAccessibilityWin(node); auto* provider_com = provider ? provider->GetCOM() : nullptr; @@ -724,25 +677,6 @@ } } -void BrowserAccessibilityManagerWin::BeforeAccessibilityEvents() { - BrowserAccessibilityManager::BeforeAccessibilityEvents(); - - for (const auto& targeted_event : event_generator_) { - if (targeted_event.event_params.event == - ui::AXEventGenerator::Event::IGNORED_CHANGED) { - BrowserAccessibility* event_target = GetFromAXNode(targeted_event.node); - if (!event_target) - continue; - - const auto insert_pair = ignored_changed_nodes_.insert(event_target); - - // Expect that |IGNORED_CHANGED| only fires once for a given - // node in a given event frame. - DCHECK(insert_pair.second); - } - } -} - void BrowserAccessibilityManagerWin::FinalizeAccessibilityEvents() { BrowserAccessibilityManager::FinalizeAccessibilityEvents(); @@ -791,7 +725,6 @@ } } selection_events_.clear(); - ignored_changed_nodes_.clear(); } BrowserAccessibilityManagerWin::SelectionEvents::SelectionEvents() = default;
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.h b/content/browser/accessibility/browser_accessibility_manager_win.h index 81e40bb..13ea393 100644 --- a/content/browser/accessibility/browser_accessibility_manager_win.h +++ b/content/browser/accessibility/browser_accessibility_manager_win.h
@@ -68,9 +68,6 @@ BrowserAccessibility* node); void FireUiaTextContainerEvent(LONG uia_event, BrowserAccessibility* node); - // Do event pre-processing - void BeforeAccessibilityEvents() override; - // Do event post-processing void FinalizeAccessibilityEvents() override; @@ -109,11 +106,6 @@ // changes, so we only fire the event once for every node. std::unordered_set<BrowserAccessibility*> aria_properties_events_; - // When the ignored state changes for a node, we only want to fire the - // events relevant to the ignored state change (e.g. show / hide). - // This set keeps track of what nodes should suppress superfluous events. - std::set<BrowserAccessibility*> ignored_changed_nodes_; - // Keep track of selection changes so we can optimize UIA event firing. // Pointers are only stored for the duration of |OnAccessibilityEvents|, and // the map is cleared in |FinalizeAccessibilityEvents|.
diff --git a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc index 47b02f83..35663718 100644 --- a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc +++ b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
@@ -653,8 +653,8 @@ const ui::AXTree& tree = GetAXTree(); const ui::AXNode* root = tree.root(); - const ui::AXNode* input1 = root->GetUnignoredChildAtIndex(0); - const ui::AXNode* input2 = root->GetUnignoredChildAtIndex(1); + const ui::AXNode* input1 = root->children()[0]; + const ui::AXNode* input2 = root->children()[1]; EXPECT_EQ(static_cast<int>(ax::mojom::NameFrom::kTitle), GetIntAttr(input1, ax::mojom::IntAttribute::kNameFrom));
diff --git a/content/browser/accessibility/hit_testing_browsertest.cc b/content/browser/accessibility/hit_testing_browsertest.cc index 15e0fe1..9364fb4 100644 --- a/content/browser/accessibility/hit_testing_browsertest.cc +++ b/content/browser/accessibility/hit_testing_browsertest.cc
@@ -309,13 +309,9 @@ EXPECT_EQ("Button 1", hit_node->GetStringAttribute(ax::mojom::StringAttribute::kName)); - // (60, 60) -> No button there, hits the ignored <body> node + // (60, 60) -> No button there hit_node = TapAndWaitForResult(gfx::Point(60, 60)); - EXPECT_NE(nullptr, hit_node); - EXPECT_EQ(ax::mojom::Role::kGenericContainer, hit_node->GetRole()); - EXPECT_TRUE(hit_node->HasState(ax::mojom::State::kIgnored)); - EXPECT_EQ("body", - hit_node->GetStringAttribute(ax::mojom::StringAttribute::kHtmlTag)); + EXPECT_TRUE(hit_node == nullptr); // (10, 60) -> "Button 2" hit_node = TapAndWaitForResult(gfx::Point(10, 60));
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc index b52f5fb..7c130bec0 100644 --- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc +++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -9859,20 +9859,20 @@ ->root(); std::string script = "var messageUnloadEventSent = false;" - "window.addEventListener(\"beforeunload\", function " + "window.addEventListener('beforeunload', function " "onBeforeUnload(event) {" "if(messageUnloadEventSent) {" "return;" "}" "messageUnloadEventSent = true;" - "var iframe = document.getElementById(\"child-0\");" - "iframe.contentWindow.postMessage(\"\", \"*\");" + "var iframe = document.getElementById('child-0');" + "iframe.contentWindow.postMessage('', '*');" "});"; EXPECT_TRUE(ExecJs(root, script)); script = - "window.addEventListener(\"message\", function (event) {" - "parent.location.href = \"chrome-guest://1234\";" + "window.addEventListener('message', function (event) {" + "parent.location.href = 'chrome-guest://1234';" "});"; EXPECT_TRUE(ExecJs(root->child_at(0), script)); @@ -9885,7 +9885,7 @@ // navigation is automatic and it should not be the case. This causes no spoof // however, as verified below. GURL check_url; - if (!SiteIsolationPolicy::UseDedicatedProcessesForAllSites()) { + if (!AreAllSitesIsolatedForTesting()) { EXPECT_FALSE(NavigateToURL(shell(), main_frame_url_2)); check_url = main_frame_url; } else {
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index 136a5b9..b1b5971a 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc
@@ -202,6 +202,8 @@ service_manager::switches::kDisableGpuLpac, service_manager::switches::kEnableGpuAppContainer, #endif // defined(OS_WIN) + switches::kEnableANGLEFeatures, + switches::kDisableANGLEFeatures, switches::kDisableBreakpad, switches::kDisableGpuRasterization, switches::kDisableGLExtensions,
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 e7dee485..8a1d096 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
@@ -487,9 +487,9 @@ gfx::PointF transformed_point; if (!target) { latched_target = false; - auto result = FindViewAtLocation( - root_view, event.PositionInWidget(), event.PositionInScreen(), - viz::EventSource::MOUSE, &transformed_point); + auto result = + FindViewAtLocation(root_view, event.PositionInWidget(), + viz::EventSource::MOUSE, &transformed_point); // Due to performance concerns we do not verify mouse move events. should_verify_result = (event.GetType() == blink::WebInputEvent::kMouseMove) ? false @@ -530,9 +530,9 @@ } if (event.phase == blink::WebMouseWheelEvent::kPhaseBegan) { - auto result = FindViewAtLocation( - root_view, event.PositionInWidget(), event.PositionInScreen(), - viz::EventSource::MOUSE, &transformed_point); + auto result = + FindViewAtLocation(root_view, event.PositionInWidget(), + viz::EventSource::MOUSE, &transformed_point); return {result.view, result.should_query_view, transformed_point, false, result.should_verify_result}; } @@ -541,11 +541,9 @@ return {nullptr, false, base::nullopt, true, false}; } -// TODO(crbug.com/966952): Get rid of |point_in_screen| since it's not used. RenderWidgetTargetResult RenderWidgetHostInputEventRouter::FindViewAtLocation( RenderWidgetHostViewBase* root_view, const gfx::PointF& point, - const gfx::PointF& point_in_screen, viz::EventSource source, gfx::PointF* transformed_point) const { // Short circuit if owner_map has only one RenderWidgetHostView, no need for @@ -813,11 +811,10 @@ active_touches_ += CountChangedTouchPoints(event); gfx::PointF original_point = gfx::PointF(event.touches[0].PositionInWidget()); - gfx::PointF original_point_in_screen(event.touches[0].PositionInScreen()); gfx::PointF transformed_point; - return FindViewAtLocation(root_view, original_point, original_point_in_screen, - viz::EventSource::TOUCH, &transformed_point); + return FindViewAtLocation(root_view, original_point, viz::EventSource::TOUCH, + &transformed_point); } void RenderWidgetHostInputEventRouter::DispatchTouchEvent( @@ -1381,12 +1378,10 @@ gfx::PointF* transformed_point) { if (!root_view) return nullptr; - gfx::PointF point_in_screen = - point + root_view->GetViewBounds().OffsetFromOrigin(); - return RenderWidgetHostImpl::From( - FindViewAtLocation(root_view, point, point_in_screen, - viz::EventSource::MOUSE, transformed_point) - .view->GetRenderWidgetHost()); + return RenderWidgetHostImpl::From(FindViewAtLocation(root_view, point, + viz::EventSource::MOUSE, + transformed_point) + .view->GetRenderWidgetHost()); } RenderWidgetTargetResult @@ -1404,10 +1399,8 @@ if (gesture_event.unique_touch_event_id == 0) { gfx::PointF transformed_point; gfx::PointF original_point(gesture_event.PositionInWidget()); - gfx::PointF original_point_in_screen(gesture_event.PositionInScreen()); return FindViewAtLocation(root_view, original_point, - original_point_in_screen, viz::EventSource::TOUCH, - &transformed_point); + viz::EventSource::TOUCH, &transformed_point); } // Remaining gesture events will defer to the gesture event target queue @@ -1546,10 +1539,8 @@ // It is still safe to continue; we will recalculate the target. gfx::PointF transformed_point; gfx::PointF original_point(gesture_event.PositionInWidget()); - gfx::PointF original_point_in_screen(gesture_event.PositionInScreen()); - auto result = - FindViewAtLocation(root_view, original_point, original_point_in_screen, - viz::EventSource::TOUCH, &transformed_point); + auto result = FindViewAtLocation( + root_view, original_point, viz::EventSource::TOUCH, &transformed_point); // Re https://crbug.com/796656): Since we are already in an error case, // don't worry about the fact we're ignoring |result.should_query_view|, as // this is the best we can do until we fix https://crbug.com/595422. @@ -1638,8 +1629,7 @@ gfx::PointF transformed_point; return FindViewAtLocation(root_view, event.PositionInWidget(), - event.PositionInScreen(), viz::EventSource::MOUSE, - &transformed_point); + viz::EventSource::MOUSE, &transformed_point); } void RenderWidgetHostInputEventRouter::RouteTouchpadGestureEvent(
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 e46df79..54575c3 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
@@ -205,7 +205,6 @@ RenderWidgetTargetResult FindViewAtLocation( RenderWidgetHostViewBase* root_view, const gfx::PointF& point, - const gfx::PointF& point_in_screen, viz::EventSource source, gfx::PointF* transformed_point) const;
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentTextSelectionTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentTextSelectionTest.java index 32b18ce..c1d0ce4 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/ContentTextSelectionTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentTextSelectionTest.java
@@ -396,6 +396,7 @@ @Test @MediumTest @Feature({"TextInput", "SmartSelection"}) + @DisabledTest(message = "https://crbug.com/973865") public void testSmartSelectionReset() throws Throwable { SelectionClient.Result result = new SelectionClient.Result(); result.startAdjust = -5;
diff --git a/content/renderer/accessibility/blink_ax_enum_conversion.cc b/content/renderer/accessibility/blink_ax_enum_conversion.cc index 656c0c2..114d1c9 100644 --- a/content/renderer/accessibility/blink_ax_enum_conversion.cc +++ b/content/renderer/accessibility/blink_ax_enum_conversion.cc
@@ -75,9 +75,6 @@ dst->AddState(ax::mojom::State::kVertical); else if (o.Orientation() == blink::kWebAXOrientationHorizontal) dst->AddState(ax::mojom::State::kHorizontal); - - if (o.AccessibilityIsIgnored()) - dst->AddState(ax::mojom::State::kIgnored); } } // namespace content.
diff --git a/content/renderer/accessibility/blink_ax_tree_source.cc b/content/renderer/accessibility/blink_ax_tree_source.cc index da9b875..9df33a8 100644 --- a/content/renderer/accessibility/blink_ax_tree_source.cc +++ b/content/renderer/accessibility/blink_ax_tree_source.cc
@@ -488,10 +488,6 @@ return node; } -bool BlinkAXTreeSource::IsIgnored(WebAXObject node) const { - return node.AccessibilityIsIgnored(); -} - bool BlinkAXTreeSource::IsValid(WebAXObject node) const { return !node.IsDetached(); // This also checks if it's null. } @@ -545,11 +541,6 @@ if (clips_children) dst->AddBoolAttribute(ax::mojom::BoolAttribute::kClipsChildren, true); - if (src.IsLineBreakingObject()) { - dst->AddBoolAttribute(ax::mojom::BoolAttribute::kIsLineBreakingObject, - true); - } - AXContentNodeDataSparseAttributeAdapter sparse_attribute_adapter(dst); src.GetSparseAXAttributes(sparse_attribute_adapter);
diff --git a/content/renderer/accessibility/blink_ax_tree_source.h b/content/renderer/accessibility/blink_ax_tree_source.h index 4d0d671..5d05648 100644 --- a/content/renderer/accessibility/blink_ax_tree_source.h +++ b/content/renderer/accessibility/blink_ax_tree_source.h
@@ -101,7 +101,6 @@ blink::WebAXObject GetParent(blink::WebAXObject node) const override; void SerializeNode(blink::WebAXObject node, AXContentNodeData* out_data) const override; - bool IsIgnored(blink::WebAXObject node) const override; bool IsValid(blink::WebAXObject node) const override; bool IsEqual(blink::WebAXObject node1, blink::WebAXObject node2) const override;
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc index 8d297be4..dc9228b4 100644 --- a/content/renderer/accessibility/render_accessibility_impl.cc +++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -518,43 +518,8 @@ continue; // If it's ignored, find the first ancestor that's not ignored. - while (!obj.IsDetached() && obj.AccessibilityIsIgnored()) { - // There are 3 states of nodes that we care about here. - // (x) Unignored, included in tree - // [x] Ignored, included in tree - // <x> Ignored, excluded from tree - // - // Consider the following tree : - // ++(0) Role::kRootWebArea - // ++++<1> Role::kIgnored - // ++++++[2] Role::kGenericContainer <body> - // ++++++++[3] Role::kGenericContainer with 'visibility: hidden' - // - // If we modify [3] to be 'visibility: visible', we will receive - // Event::kChildrenChanged here for the Ignored parent [2]. - // We must re-serialize the Unignored parent node (0) due to this - // change, but we must also re-serialize [2] since its children - // have changed. <1> was never part of the ax tree, and therefore - // does not need to be serialized. - // - // So on the way to the Unignored parent, ancestors that are - // included in the tree must also be serialized. - // Note that [3] will be serialized to (3) during : - // |AXTreeSerializer<>::SerializeChangedNodes| when node [2] is - // being serialized, since it will detect the Ignored state had - // changed. - // - // Similarly, during Event::kTextChanged, if any Ignored, - // but included in tree ancestor uses NameFrom::kContents, - // they must also be re-serialized in case the name changed. - if (obj.AccessibilityIsIncludedInTree()) { - DirtyObject dirty_object; - dirty_object.obj = obj; - dirty_object.event_from = event.event_from; - dirty_objects.push_back(dirty_object); - } + while (!obj.IsDetached() && obj.AccessibilityIsIgnored()) obj = obj.ParentObject(); - } // Make sure it's a descendant of our root node - exceptions include the // scroll area that's the parent of the main document (we ignore it), and
diff --git a/content/renderer/accessibility/render_accessibility_impl_browsertest.cc b/content/renderer/accessibility/render_accessibility_impl_browsertest.cc index 08bacee..4ec4f38 100644 --- a/content/renderer/accessibility/render_accessibility_impl_browsertest.cc +++ b/content/renderer/accessibility/render_accessibility_impl_browsertest.cc
@@ -225,7 +225,7 @@ )HTML"; LoadHTMLAndRefreshAccessibilityTree(html); - EXPECT_EQ(5, CountAccessibilityNodesSentToBrowser()); + EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser()); // If we post another event but the tree doesn't change, // we should only send 1 node to the browser. @@ -243,7 +243,7 @@ } // If we reload the page and send a event, we should send - // all 5 nodes to the browser. Also double-check that we didn't + // all 4 nodes to the browser. Also double-check that we didn't // leak any of the old BrowserTreeNodes. LoadHTML(html); document = GetMainFrame()->GetDocument(); @@ -252,7 +252,7 @@ render_accessibility().HandleAXEvent(root_obj, ax::mojom::Event::kLayoutComplete); render_accessibility().SendPendingAccessibilityEvents(); - EXPECT_EQ(5, CountAccessibilityNodesSentToBrowser()); + EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser()); // Even if the first event is sent on an element other than // the root, the whole tree should be updated because we know @@ -265,7 +265,7 @@ render_accessibility().HandleAXEvent(first_child, ax::mojom::Event::kLiveRegionChanged); render_accessibility().SendPendingAccessibilityEvents(); - EXPECT_EQ(5, CountAccessibilityNodesSentToBrowser()); + EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser()); } TEST_F(RenderAccessibilityImplTest, HideAccessibilityObject) { @@ -283,12 +283,11 @@ </body> )HTML"); - EXPECT_EQ(5, CountAccessibilityNodesSentToBrowser()); + EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser()); WebDocument document = GetMainFrame()->GetDocument(); WebAXObject root_obj = WebAXObject::FromWebDocument(document); - WebAXObject body = root_obj.ChildAt(0); - WebAXObject node_a = body.ChildAt(0); + WebAXObject node_a = root_obj.ChildAt(0); WebAXObject node_b = node_a.ChildAt(0); WebAXObject node_c = node_b.ChildAt(0); @@ -306,13 +305,11 @@ AXContentTreeUpdate update = GetLastAccUpdate(); ASSERT_EQ(2U, update.nodes.size()); - // Since ignored nodes are included in the ax tree with State::kIgnored set, - // "C" is NOT reparented, only the changed nodes are re-serialized. - // "A" updates because it handled Event::kChildrenChanged - // "B" updates because its State::kIgnored has changed - EXPECT_EQ(0, update.node_id_to_clear); + // RenderAccessibilityImpl notices that "C" is being reparented, + // so it clears the subtree rooted at "A", then updates "A" and then "C". + EXPECT_EQ(node_a.AxID(), update.node_id_to_clear); EXPECT_EQ(node_a.AxID(), update.nodes[0].id); - EXPECT_EQ(node_b.AxID(), update.nodes[1].id); + EXPECT_EQ(node_c.AxID(), update.nodes[1].id); EXPECT_EQ(2, CountAccessibilityNodesSentToBrowser()); } @@ -332,14 +329,12 @@ </body> )HTML"); - EXPECT_EQ(5, CountAccessibilityNodesSentToBrowser()); + EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser()); WebDocument document = GetMainFrame()->GetDocument(); WebAXObject root_obj = WebAXObject::FromWebDocument(document); - WebAXObject body = root_obj.ChildAt(0); - WebAXObject node_a = body.ChildAt(0); - WebAXObject node_b = node_a.ChildAt(0); - WebAXObject node_c = node_b.ChildAt(0); + WebAXObject node_a = root_obj.ChildAt(0); + WebAXObject node_c = node_a.ChildAt(0); // Show node "B", then send a childrenChanged on "A". ExecuteJavaScriptForTests( @@ -348,20 +343,19 @@ root_obj.UpdateLayoutAndCheckValidity(); sink_->ClearMessages(); + WebAXObject node_b = node_a.ChildAt(0); + render_accessibility().HandleAXEvent(node_a, ax::mojom::Event::kChildrenChanged); render_accessibility().SendPendingAccessibilityEvents(); AXContentTreeUpdate update = GetLastAccUpdate(); - // Since ignored nodes are included in the ax tree with State::kIgnored set, - // "C" is NOT reparented, only the changed nodes are re-serialized. - // "A" updates because it handled Event::kChildrenChanged - // "B" updates because its State::kIgnored has changed - ASSERT_EQ(2U, update.nodes.size()); - EXPECT_EQ(0, update.node_id_to_clear); + ASSERT_EQ(3U, update.nodes.size()); + EXPECT_EQ(node_a.AxID(), update.node_id_to_clear); EXPECT_EQ(node_a.AxID(), update.nodes[0].id); EXPECT_EQ(node_b.AxID(), update.nodes[1].id); - EXPECT_EQ(2, CountAccessibilityNodesSentToBrowser()); + EXPECT_EQ(node_c.AxID(), update.nodes[2].id); + EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser()); } //
diff --git a/content/renderer/render_process_impl.cc b/content/renderer/render_process_impl.cc index 90d280d..30bde476d 100644 --- a/content/renderer/render_process_impl.cc +++ b/content/renderer/render_process_impl.cc
@@ -43,7 +43,9 @@ #if defined(OS_WIN) #include "base/win/win_util.h" #endif - +#if defined(OS_LINUX) && defined(ARCH_CPU_X86_64) +#include "v8/include/v8-wasm-trap-handler-posix.h" +#endif namespace { void SetV8FlagIfFeature(const base::Feature& feature, const char* v8_flag) { @@ -164,7 +166,7 @@ service_manager::switches::kDisableInProcessStackTraces)) { // Only enable WebAssembly trap handler if we can set the callback. if (base::debug::SetStackDumpFirstChanceCallback( - v8::V8::TryHandleSignal)) { + v8::TryHandleWebAssemblyTrapPosix)) { // We registered the WebAssembly trap handler callback with the stack // dump signal handler successfully. We can tell V8 that it can enable // WebAssembly trap handler without using the V8 signal handler.
diff --git a/content/shell/browser/shell_views.cc b/content/shell/browser/shell_views.cc index a8badfb..4b42cfa 100644 --- a/content/shell/browser/shell_views.cc +++ b/content/shell/browser/shell_views.cc
@@ -121,7 +121,7 @@ SetBackground(views::CreateStandardPanelBackground()); views::GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); views::ColumnSet* column_set = layout->AddColumnSet(0); if (!shell_->hide_toolbar()) @@ -136,7 +136,7 @@ layout->AddPaddingRow(0, 2); layout->StartRow(0, 0); views::GridLayout* toolbar_layout = toolbar_view_->SetLayoutManager( - std::make_unique<views::GridLayout>(toolbar_view_)); + std::make_unique<views::GridLayout>()); views::ColumnSet* toolbar_column_set = toolbar_layout->AddColumnSet(0);
diff --git a/content/shell/test_runner/web_ax_object_proxy.cc b/content/shell/test_runner/web_ax_object_proxy.cc index 86e84f79..e9ea1df 100644 --- a/content/shell/test_runner/web_ax_object_proxy.cc +++ b/content/shell/test_runner/web_ax_object_proxy.cc
@@ -696,7 +696,6 @@ .SetProperty("hasPopup", &WebAXObjectProxy::HasPopup) .SetProperty("isValid", &WebAXObjectProxy::IsValid) .SetProperty("isReadOnly", &WebAXObjectProxy::IsReadOnly) - .SetProperty("isIgnored", &WebAXObjectProxy::IsIgnored) .SetProperty("restriction", &WebAXObjectProxy::Restriction) .SetProperty("activeDescendant", &WebAXObjectProxy::ActiveDescendant) .SetProperty("backgroundColor", &WebAXObjectProxy::BackgroundColor) @@ -1217,11 +1216,6 @@ blink::kWebAXRestrictionReadOnly; } -bool WebAXObjectProxy::IsIgnored() { - accessibility_object_.UpdateLayoutAndCheckValidity(); - return accessibility_object_.AccessibilityIsIgnored(); -} - v8::Local<v8::Object> WebAXObjectProxy::ActiveDescendant() { accessibility_object_.UpdateLayoutAndCheckValidity(); blink::WebAXObject element = accessibility_object_.AriaActiveDescendant();
diff --git a/content/shell/test_runner/web_ax_object_proxy.h b/content/shell/test_runner/web_ax_object_proxy.h index 458f635..3348c58 100644 --- a/content/shell/test_runner/web_ax_object_proxy.h +++ b/content/shell/test_runner/web_ax_object_proxy.h
@@ -116,7 +116,6 @@ bool IsCollapsed(); bool IsValid(); bool IsReadOnly(); - bool IsIgnored(); std::string Restriction(); v8::Local<v8::Object> ActiveDescendant(); unsigned int BackgroundColor();
diff --git a/content/test/data/accessibility/aom/aom-busy-expected-blink.txt b/content/test/data/accessibility/aom/aom-busy-expected-blink.txt index dbc2bc6..4cbc992 100644 --- a/content/test/data/accessibility/aom/aom-busy-expected-blink.txt +++ b/content/test/data/accessibility/aom/aom-busy-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++genericContainer busy=true -++++genericContainer busy=true +++genericContainer +++genericContainer busy=true +++genericContainer busy=true
diff --git a/content/test/data/accessibility/aom/aom-checked-expected-blink.txt b/content/test/data/accessibility/aom/aom-checked-expected-blink.txt index 2e10ecb..3b89931 100644 --- a/content/test/data/accessibility/aom/aom-checked-expected-blink.txt +++ b/content/test/data/accessibility/aom/aom-checked-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++checkBox checkedState=false -++++checkBox checkedState=false -++++checkBox checkedState=false -++++checkBox checkedState=false +++checkBox checkedState=false +++checkBox checkedState=false +++checkBox checkedState=false +++checkBox checkedState=false
diff --git a/content/test/data/accessibility/aria/aria-activedescendant-expected-blink.txt b/content/test/data/accessibility/aria/aria-activedescendant-expected-blink.txt index 7a24614..f95b78d 100644 --- a/content/test/data/accessibility/aria/aria-activedescendant-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-activedescendant-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++menu name='parent node' activedescendantId=menuItemCheckBox -++++++menuItem name='Inactive descendant' -++++++menuItemCheckBox name='Active descendant' checkedState=false -++++++menuItemRadio name='Inactive descendant #2' checkedState=false +++menu name='parent node' activedescendantId=menuItemCheckBox +++++menuItem name='Inactive descendant' +++++menuItemCheckBox name='Active descendant' checkedState=false +++++menuItemRadio name='Inactive descendant #2' checkedState=false
diff --git a/content/test/data/accessibility/aria/aria-alert-expected-blink.txt b/content/test/data/accessibility/aria/aria-alert-expected-blink.txt index ee3f576..04322469 100644 --- a/content/test/data/accessibility/aria/aria-alert-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-alert-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++alert liveStatus='assertive' containerLiveAtomic=true liveAtomic=true -++++++staticText name='This test is for aria role="alert"' containerLiveAtomic=true -++++++++inlineTextBox name='This test is for aria role="alert"' +++alert liveStatus='assertive' containerLiveAtomic=true liveAtomic=true +++++staticText name='This test is for aria role="alert"' containerLiveAtomic=true +++++++inlineTextBox name='This test is for aria role="alert"' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-alertdialog-expected-blink.txt b/content/test/data/accessibility/aria/aria-alertdialog-expected-blink.txt index 8ec05de..ee6a33a 100644 --- a/content/test/data/accessibility/aria/aria-alertdialog-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-alertdialog-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++alertDialog +++alertDialog
diff --git a/content/test/data/accessibility/aria/aria-any-unignored-expected-blink.txt b/content/test/data/accessibility/aria/aria-any-unignored-expected-blink.txt index b5a7908c..7408006 100644 --- a/content/test/data/accessibility/aria/aria-any-unignored-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-any-unignored-expected-blink.txt
@@ -1,13 +1,12 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='Hi ' -++++++++inlineTextBox name='Hi ' -++++++staticText name='ignored span' -++++++++inlineTextBox name='ignored span' -++++paragraph -++++++staticText name='Hi ' -++++++++inlineTextBox name='Hi ' -++++++genericContainer -++++++++staticText name='unignored span' -++++++++++inlineTextBox name='unignored span' +++paragraph +++++staticText name='Hi ' +++++++inlineTextBox name='Hi ' +++++staticText name='ignored span' +++++++inlineTextBox name='ignored span' +++paragraph +++++staticText name='Hi ' +++++++inlineTextBox name='Hi ' +++++genericContainer +++++++staticText name='unignored span' +++++++++inlineTextBox name='unignored span'
diff --git a/content/test/data/accessibility/aria/aria-article-expected-blink.txt b/content/test/data/accessibility/aria/aria-article-expected-blink.txt index 65b1930..fabb32140 100644 --- a/content/test/data/accessibility/aria/aria-article-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-article-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++article -++++++staticText name='This is an ARIA article.' -++++++++inlineTextBox name='This is an ARIA article.' +++article +++++staticText name='This is an ARIA article.' +++++++inlineTextBox name='This is an ARIA article.' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-article-posinset-setsize-expected-blink.txt b/content/test/data/accessibility/aria/aria-article-posinset-setsize-expected-blink.txt index 789b1d6..51e4643 100644 --- a/content/test/data/accessibility/aria/aria-article-posinset-setsize-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-article-posinset-setsize-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++article setSize=0 posInSet=0 -++++++staticText name='ARIA Articles outside of feeds should have PosInSet and SetSize of 0.' -++++++++inlineTextBox name='ARIA Articles outside of feeds should have PosInSet and SetSize of 0.' -++++feed setSize=5 -++++++article setSize=5 posInSet=4 -++++++article setSize=5 posInSet=5 +++article setSize=0 posInSet=0 +++++staticText name='ARIA Articles outside of feeds should have PosInSet and SetSize of 0.' +++++++inlineTextBox name='ARIA Articles outside of feeds should have PosInSet and SetSize of 0.' +++feed setSize=5 +++++article setSize=5 posInSet=4 +++++article setSize=5 posInSet=5
diff --git a/content/test/data/accessibility/aria/aria-atomic-expected-blink.txt b/content/test/data/accessibility/aria/aria-atomic-expected-blink.txt index d817194..c93963b 100644 --- a/content/test/data/accessibility/aria/aria-atomic-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-atomic-expected-blink.txt
@@ -1,14 +1,13 @@ rootWebArea -++genericContainer ignored -++++log -++++++staticText name='This test is for aria-atomic="false"' -++++++++inlineTextBox name='This test is for aria-atomic="false"' -++++log containerLiveAtomic=true liveAtomic=true -++++++staticText name='This test is for aria-atomic="true"' containerLiveAtomic=true -++++++++inlineTextBox name='This test is for aria-atomic="true"' -++++alert containerLiveAtomic=true liveAtomic=true -++++++staticText name='This test is for alert.' containerLiveAtomic=true -++++++++inlineTextBox name='This test is for alert.' -++++status containerLiveAtomic=true liveAtomic=true -++++++staticText name='This test is for status.' containerLiveAtomic=true -++++++++inlineTextBox name='This test is for status.' +++log +++++staticText name='This test is for aria-atomic="false"' +++++++inlineTextBox name='This test is for aria-atomic="false"' +++log containerLiveAtomic=true liveAtomic=true +++++staticText name='This test is for aria-atomic="true"' containerLiveAtomic=true +++++++inlineTextBox name='This test is for aria-atomic="true"' +++alert containerLiveAtomic=true liveAtomic=true +++++staticText name='This test is for alert.' containerLiveAtomic=true +++++++inlineTextBox name='This test is for alert.' +++status containerLiveAtomic=true liveAtomic=true +++++staticText name='This test is for status.' containerLiveAtomic=true +++++++inlineTextBox name='This test is for status.' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-banner-expected-blink.txt b/content/test/data/accessibility/aria/aria-banner-expected-blink.txt index acaa5ef..235b808 100644 --- a/content/test/data/accessibility/aria/aria-banner-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-banner-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++banner -++++++staticText name='Chromium Browser' -++++++++inlineTextBox name='Chromium Browser' +++banner +++++staticText name='Chromium Browser' +++++++inlineTextBox name='Chromium Browser' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-busy-expected-blink.txt b/content/test/data/accessibility/aria/aria-busy-expected-blink.txt index 9377d228..ced5a96b 100644 --- a/content/test/data/accessibility/aria/aria-busy-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-busy-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++log name='Busy log' busy=true containerLiveBusy=true -++++log name='Not-busy log' containerLiveBusy=false -++++genericContainer name='plain div' busy=true +++log name='Busy log' busy=true containerLiveBusy=true +++log name='Not-busy log' containerLiveBusy=false +++genericContainer name='plain div' busy=true
diff --git a/content/test/data/accessibility/aria/aria-button-expected-blink.txt b/content/test/data/accessibility/aria/aria-button-expected-blink.txt index 0fad92f0..56d577c 100644 --- a/content/test/data/accessibility/aria/aria-button-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-button-expected-blink.txt
@@ -1,12 +1,11 @@ rootWebArea -++genericContainer ignored -++++button name='Button1' -++++toggleButton name='Button2' checkedState=true -++++toggleButton name='Button3' checkedState=false -++++popUpButton name='Button4' haspopup=menu -++++button name='Button5' -++++button name='Complex button ' -++++++staticText name='Complex button ' -++++++++inlineTextBox name='Complex button ' -++++++textField -++++++++genericContainer +++button name='Button1' +++toggleButton name='Button2' checkedState=true +++toggleButton name='Button3' checkedState=false +++popUpButton name='Button4' haspopup=menu +++button name='Button5' +++button name='Complex button ' +++++staticText name='Complex button ' +++++++inlineTextBox name='Complex button ' +++++textField +++++++genericContainer \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-cell-expected-blink.txt b/content/test/data/accessibility/aria/aria-cell-expected-blink.txt index 364cbe9e..ee500c52a 100644 --- a/content/test/data/accessibility/aria/aria-cell-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-cell-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++table -++++++row selected=false -++++++++columnHeader name='Browser' selected=false -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' selected=false -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row selected=false -++++++++cell name='Chrome' selected=false -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' selected=false -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' +++table +++++row selected=false +++++++columnHeader name='Browser' selected=false +++++++++staticText name='Browser' +++++++++++inlineTextBox name='Browser' +++++++columnHeader name='Rendering Engine' selected=false +++++++++staticText name='Rendering Engine' +++++++++++inlineTextBox name='Rendering Engine' +++++row selected=false +++++++cell name='Chrome' selected=false +++++++++staticText name='Chrome' +++++++++++inlineTextBox name='Chrome' +++++++cell name='Blink' selected=false +++++++++staticText name='Blink' +++++++++++inlineTextBox name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-checkbox-expected-blink.txt b/content/test/data/accessibility/aria/aria-checkbox-expected-blink.txt index 0ad84d1..1d4869d 100644 --- a/content/test/data/accessibility/aria/aria-checkbox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-checkbox-expected-blink.txt
@@ -1,13 +1,12 @@ rootWebArea -++genericContainer ignored -++++checkBox name='CheckBox1' checkedState=true -++++checkBox name='CheckBox2' checkedState=false -++++checkBox name='CheckBox3' checkedState=mixed -++++checkBox name='CheckBox4' checkedState=false -++++checkBox name='Complex checkbox' checkedState=false -++++++staticText name='Complex ' -++++++++inlineTextBox name='Complex ' -++++++textField -++++++++genericContainer -++++++staticText name=' checkbox' -++++++++inlineTextBox name=' checkbox' +++checkBox name='CheckBox1' checkedState=true +++checkBox name='CheckBox2' checkedState=false +++checkBox name='CheckBox3' checkedState=mixed +++checkBox name='CheckBox4' checkedState=false +++checkBox name='Complex checkbox' checkedState=false +++++staticText name='Complex ' +++++++inlineTextBox name='Complex ' +++++textField +++++++genericContainer +++++staticText name=' checkbox' +++++++inlineTextBox name=' checkbox' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-checked-expected-blink.txt b/content/test/data/accessibility/aria/aria-checked-expected-blink.txt index 88b737c..f64910c 100644 --- a/content/test/data/accessibility/aria/aria-checked-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-checked-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++checkBox checkedState=true -++++checkBox checkedState=false -++++checkBox checkedState=mixed +++checkBox checkedState=true +++checkBox checkedState=false +++checkBox checkedState=mixed \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt b/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt index 11aae7b..40dc2f72 100644 --- a/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt
@@ -1,26 +1,25 @@ rootWebArea -++genericContainer ignored -++++grid ariaColumnCount=5 -++++++row selected=false -++++++++columnHeader name='cell 2' ariaCellColumnIndex=2 selected=false -++++++++++staticText name='cell 2' -++++++++++++inlineTextBox name='cell 2' -++++++++columnHeader name='cell 4' ariaCellColumnIndex=4 selected=false -++++++++++staticText name='cell 4' -++++++++++++inlineTextBox name='cell 4' -++++++++columnHeader name='cell 5' ariaCellColumnIndex=5 selected=false -++++++++++staticText name='cell 5' -++++++++++++inlineTextBox name='cell 5' -++++++row ariaCellColumnIndex=2 selected=false -++++++++cell name='cell 2' ariaCellColumnIndex=2 selected=false -++++++++++staticText name='cell 2' -++++++++++++inlineTextBox name='cell 2' -++++++++cell name='cell 3' ariaCellColumnIndex=3 selected=false -++++++++++staticText name='cell 3' -++++++++++++inlineTextBox name='cell 3' -++++++++cell name='cell 4' ariaCellColumnIndex=4 selected=false -++++++++++staticText name='cell 4' -++++++++++++inlineTextBox name='cell 4' -++++++++cell name='cell 5' ariaCellColumnIndex=5 selected=false -++++++++++staticText name='cell 5' -++++++++++++inlineTextBox name='cell 5' +++grid ariaColumnCount=5 +++++row selected=false +++++++columnHeader name='cell 2' ariaCellColumnIndex=2 selected=false +++++++++staticText name='cell 2' +++++++++++inlineTextBox name='cell 2' +++++++columnHeader name='cell 4' ariaCellColumnIndex=4 selected=false +++++++++staticText name='cell 4' +++++++++++inlineTextBox name='cell 4' +++++++columnHeader name='cell 5' ariaCellColumnIndex=5 selected=false +++++++++staticText name='cell 5' +++++++++++inlineTextBox name='cell 5' +++++row ariaCellColumnIndex=2 selected=false +++++++cell name='cell 2' ariaCellColumnIndex=2 selected=false +++++++++staticText name='cell 2' +++++++++++inlineTextBox name='cell 2' +++++++cell name='cell 3' ariaCellColumnIndex=3 selected=false +++++++++staticText name='cell 3' +++++++++++inlineTextBox name='cell 3' +++++++cell name='cell 4' ariaCellColumnIndex=4 selected=false +++++++++staticText name='cell 4' +++++++++++inlineTextBox name='cell 4' +++++++cell name='cell 5' ariaCellColumnIndex=5 selected=false +++++++++staticText name='cell 5' +++++++++++inlineTextBox name='cell 5'
diff --git a/content/test/data/accessibility/aria/aria-columnheader-expected-blink.txt b/content/test/data/accessibility/aria/aria-columnheader-expected-blink.txt index ffb6c1f..64884c7 100644 --- a/content/test/data/accessibility/aria/aria-columnheader-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-columnheader-expected-blink.txt
@@ -1,24 +1,23 @@ rootWebArea -++genericContainer ignored -++++grid -++++++row selected=false -++++++++columnHeader name='Browser' selected=false -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' selected=false -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row selected=false -++++++++cell name='Chrome' selected=false -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' selected=false -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' -++++++row selected=false -++++++++cell name='Safari' selected=false -++++++++++staticText name='Safari' -++++++++++++inlineTextBox name='Safari' -++++++++cell name='WebKit' selected=false -++++++++++staticText name='WebKit' -++++++++++++inlineTextBox name='WebKit' +++grid +++++row selected=false +++++++columnHeader name='Browser' selected=false +++++++++staticText name='Browser' +++++++++++inlineTextBox name='Browser' +++++++columnHeader name='Rendering Engine' selected=false +++++++++staticText name='Rendering Engine' +++++++++++inlineTextBox name='Rendering Engine' +++++row selected=false +++++++cell name='Chrome' selected=false +++++++++staticText name='Chrome' +++++++++++inlineTextBox name='Chrome' +++++++cell name='Blink' selected=false +++++++++staticText name='Blink' +++++++++++inlineTextBox name='Blink' +++++row selected=false +++++++cell name='Safari' selected=false +++++++++staticText name='Safari' +++++++++++inlineTextBox name='Safari' +++++++cell name='WebKit' selected=false +++++++++staticText name='WebKit' +++++++++++inlineTextBox name='WebKit'
diff --git a/content/test/data/accessibility/aria/aria-combobox-expected-blink.txt b/content/test/data/accessibility/aria/aria-combobox-expected-blink.txt index 2455a9f..7b23872 100644 --- a/content/test/data/accessibility/aria/aria-combobox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-combobox-expected-blink.txt
@@ -1,10 +1,9 @@ rootWebArea -++genericContainer ignored +++genericContainer +++++staticText name='State' +++++++inlineTextBox name='State' +++textFieldWithComboBox autoComplete='list' name='State' activedescendantId=listBoxOption restriction=readOnly haspopup=listbox ++++genericContainer -++++++staticText name='State' -++++++++inlineTextBox name='State' -++++textFieldWithComboBox autoComplete='list' name='State' activedescendantId=listBoxOption restriction=readOnly haspopup=listbox -++++++genericContainer -++++listBox -++++++listBoxOption name='Alabama' selected=false -++++++listBoxOption name='Alaska' selected=true +++listBox +++++listBoxOption name='Alabama' selected=false +++++listBoxOption name='Alaska' selected=true \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-complementary-expected-blink.txt b/content/test/data/accessibility/aria/aria-complementary-expected-blink.txt index 95cb14d..5759d85 100644 --- a/content/test/data/accessibility/aria/aria-complementary-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-complementary-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++complementary -++++++staticText name='This is ARIA role complementary.' -++++++++inlineTextBox name='This is ARIA role complementary.' +++complementary +++++staticText name='This is ARIA role complementary.' +++++++inlineTextBox name='This is ARIA role complementary.' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-contentinfo-expected-blink.txt b/content/test/data/accessibility/aria/aria-contentinfo-expected-blink.txt index 97cee42a..7888d8d 100644 --- a/content/test/data/accessibility/aria/aria-contentinfo-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-contentinfo-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++contentInfo -++++++staticText name='This is ARIA role contentinfo.' -++++++++inlineTextBox name='This is ARIA role contentinfo.' +++contentInfo +++++staticText name='This is ARIA role contentinfo.' +++++++inlineTextBox name='This is ARIA role contentinfo.' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-controls-expected-blink.txt b/content/test/data/accessibility/aria/aria-controls-expected-blink.txt index 9230506..beda688 100644 --- a/content/test/data/accessibility/aria/aria-controls-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-controls-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++menuBar horizontal -++++++menuItem name='File' controlsIds=menu -++++++menuItem name='Edit' -++++menu name='File' -++++++menuItem name='New' -++++++menuItem name='Open' +++menuBar horizontal +++++menuItem name='File' controlsIds=menu +++++menuItem name='Edit' +++menu name='File' +++++menuItem name='New' +++++menuItem name='Open' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-current-expected-blink.txt b/content/test/data/accessibility/aria/aria-current-expected-blink.txt index 75c90b65..40eaf2a 100644 --- a/content/test/data/accessibility/aria/aria-current-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-current-expected-blink.txt
@@ -1,40 +1,39 @@ rootWebArea -++genericContainer ignored -++++link name='Section one' -++++++staticText name='Section one' -++++++++inlineTextBox name='Section one' +++link name='Section one' +++++staticText name='Section one' +++++++inlineTextBox name='Section one' +++staticText name=' ' +++++inlineTextBox name=' ' +++link name='Section two' +++++staticText name='Section two' +++++++inlineTextBox name='Section two' +++staticText name=' ' +++++inlineTextBox name=' ' +++link name='Section three' ariaCurrentState=location +++++staticText name='Section three' +++++++inlineTextBox name='Section three' +++lineBreak name='<newline>' +++++inlineTextBox name='<newline>' +++heading name='Section one heading' hierarchicalLevel=1 +++++staticText name='Section one heading' +++++++inlineTextBox name='Section one heading' +++heading name='Section two heading' hierarchicalLevel=1 +++++staticText name='Section two heading' +++++++inlineTextBox name='Section two heading' +++heading name='Section three heading' hierarchicalLevel=1 +++++staticText name='Section three heading' +++++++inlineTextBox name='Section three heading' +++lineBreak name='<newline>' +++++inlineTextBox name='<newline>' +++genericContainer +++++staticText name='Span 1' +++++++inlineTextBox name='Span 1' ++++staticText name=' ' ++++++inlineTextBox name=' ' -++++link name='Section two' -++++++staticText name='Section two' -++++++++inlineTextBox name='Section two' +++++genericContainer ariaCurrentState=true +++++++staticText name='Span 2' +++++++++inlineTextBox name='Span 2' ++++staticText name=' ' ++++++inlineTextBox name=' ' -++++link name='Section three' ariaCurrentState=location -++++++staticText name='Section three' -++++++++inlineTextBox name='Section three' -++++lineBreak name='<newline>' -++++++inlineTextBox name='<newline>' -++++heading name='Section one heading' hierarchicalLevel=1 -++++++staticText name='Section one heading' -++++++++inlineTextBox name='Section one heading' -++++heading name='Section two heading' hierarchicalLevel=1 -++++++staticText name='Section two heading' -++++++++inlineTextBox name='Section two heading' -++++heading name='Section three heading' hierarchicalLevel=1 -++++++staticText name='Section three heading' -++++++++inlineTextBox name='Section three heading' -++++lineBreak name='<newline>' -++++++inlineTextBox name='<newline>' -++++genericContainer -++++++staticText name='Span 1' -++++++++inlineTextBox name='Span 1' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++genericContainer ariaCurrentState=true -++++++++staticText name='Span 2' -++++++++++inlineTextBox name='Span 2' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='Span 3' -++++++++inlineTextBox name='Span 3' +++++staticText name='Span 3' +++++++inlineTextBox name='Span 3' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-definition-expected-blink.txt b/content/test/data/accessibility/aria/aria-definition-expected-blink.txt index 0d514419..d6380991 100644 --- a/content/test/data/accessibility/aria/aria-definition-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-definition-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++definition +++definition \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-describedby-expected-blink.txt b/content/test/data/accessibility/aria/aria-describedby-expected-blink.txt index 87ed42c..62bdfa7 100644 --- a/content/test/data/accessibility/aria/aria-describedby-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-describedby-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++textField description='Your username should be your email id' descriptionFrom=relatedElement describedbyIds=tooltip -++++++genericContainer -++++tooltip name='Your username should be your email id' -++++++staticText name='Your username should be your email id' -++++++++inlineTextBox name='Your username should be your email id' -++++textField description='mmddyy' descriptionFrom=relatedElement describedbyIds=null -++++++genericContainer +++textField description='Your username should be your email id' descriptionFrom=relatedElement describedbyIds=tooltip +++++genericContainer +++tooltip name='Your username should be your email id' +++++staticText name='Your username should be your email id' +++++++inlineTextBox name='Your username should be your email id' +++textField description='mmddyy' descriptionFrom=relatedElement describedbyIds=null +++++genericContainer \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-describedby-updates-expected-blink.txt b/content/test/data/accessibility/aria/aria-describedby-updates-expected-blink.txt index c3516c64..3c68834 100644 --- a/content/test/data/accessibility/aria/aria-describedby-updates-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-describedby-updates-expected-blink.txt
@@ -1,4 +1,2 @@ rootWebArea -++genericContainer ignored -++++main description='oranges' -++++++paragraph ignored invisible +++main description='oranges'
diff --git a/content/test/data/accessibility/aria/aria-details-expected-blink.txt b/content/test/data/accessibility/aria/aria-details-expected-blink.txt index 45c7c8c..f82f31bf 100644 --- a/content/test/data/accessibility/aria/aria-details-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-details-expected-blink.txt
@@ -1,19 +1,18 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++textField detailsId=paragraph -++++++++genericContainer -++++paragraph -++++++staticText name='Details' -++++++++inlineTextBox name='Details' -++++paragraph -++++++staticText name='This ' -++++++++inlineTextBox name='This ' -++++++genericContainer detailsId=group -++++++++staticText name='text' -++++++++++inlineTextBox name='text' -++++++staticText name=' has details' -++++++++inlineTextBox name=' has details' -++++group -++++++staticText name='Text details' -++++++++inlineTextBox name='Text details' +++genericContainer +++++textField detailsId=paragraph +++++++genericContainer +++paragraph +++++staticText name='Details' +++++++inlineTextBox name='Details' +++paragraph +++++staticText name='This ' +++++++inlineTextBox name='This ' +++++genericContainer detailsId=group +++++++staticText name='text' +++++++++inlineTextBox name='text' +++++staticText name=' has details' +++++++inlineTextBox name=' has details' +++group +++++staticText name='Text details' +++++++inlineTextBox name='Text details' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-dialog-expected-blink.txt b/content/test/data/accessibility/aria/aria-dialog-expected-blink.txt index 4893bbe..e041347 100644 --- a/content/test/data/accessibility/aria/aria-dialog-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-dialog-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++dialog -++++++staticText name='This is ARIA dialog.' -++++++++inlineTextBox name='This is ARIA dialog.' +++dialog +++++staticText name='This is ARIA dialog.' +++++++inlineTextBox name='This is ARIA dialog.' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-directory-expected-blink.txt b/content/test/data/accessibility/aria/aria-directory-expected-blink.txt index 76a60bd..86539306 100644 --- a/content/test/data/accessibility/aria/aria-directory-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-directory-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++list +++list \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-disabled-expected-blink.txt b/content/test/data/accessibility/aria/aria-disabled-expected-blink.txt index 441022a8..ffb95fa 100644 --- a/content/test/data/accessibility/aria/aria-disabled-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-disabled-expected-blink.txt
@@ -1,23 +1,22 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++textField -++++++++genericContainer -++++++textField restriction=disabled -++++++++genericContainer -++++++textField -++++++++genericContainer -++++genericContainer restriction=disabled -++++++textField restriction=disabled -++++++++genericContainer -++++++textField restriction=disabled -++++++++genericContainer -++++++textField -++++++++genericContainer -++++genericContainer -++++++textField -++++++++genericContainer -++++++textField restriction=disabled -++++++++genericContainer -++++++textField -++++++++genericContainer +++genericContainer +++++textField +++++++genericContainer +++++textField restriction=disabled +++++++genericContainer +++++textField +++++++genericContainer +++genericContainer restriction=disabled +++++textField restriction=disabled +++++++genericContainer +++++textField restriction=disabled +++++++genericContainer +++++textField +++++++genericContainer +++genericContainer +++++textField +++++++genericContainer +++++textField restriction=disabled +++++++genericContainer +++++textField +++++++genericContainer \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-document-expected-blink.txt b/content/test/data/accessibility/aria/aria-document-expected-blink.txt index 96f165b..2af5a4e 100644 --- a/content/test/data/accessibility/aria/aria-document-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-document-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++document -++++++staticText name='aria role document' -++++++++inlineTextBox name='aria role document' +++document +++++staticText name='aria role document' +++++++inlineTextBox name='aria role document' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-dropeffect-expected-blink.txt b/content/test/data/accessibility/aria/aria-dropeffect-expected-blink.txt index 196c20d..cf2fb62b 100644 --- a/content/test/data/accessibility/aria/aria-dropeffect-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-dropeffect-expected-blink.txt
@@ -1,23 +1,22 @@ rootWebArea -++genericContainer ignored -++++genericContainer dropeffect=copy -++++++staticText name='copy' -++++++++inlineTextBox name='copy' -++++genericContainer dropeffect=move -++++++staticText name='move' -++++++++inlineTextBox name='move' -++++genericContainer dropeffect=link -++++++staticText name='link' -++++++++inlineTextBox name='link' -++++genericContainer dropeffect=execute -++++++staticText name='execute' -++++++++inlineTextBox name='execute' -++++genericContainer dropeffect=popup -++++++staticText name='popup' -++++++++inlineTextBox name='popup' -++++genericContainer dropeffect=none -++++++staticText name='none(default)' -++++++++inlineTextBox name='none(default)' -++++genericContainer dropeffect=link popup -++++++staticText name='link popup' -++++++++inlineTextBox name='link popup' +++genericContainer dropeffect=copy +++++staticText name='copy' +++++++inlineTextBox name='copy' +++genericContainer dropeffect=move +++++staticText name='move' +++++++inlineTextBox name='move' +++genericContainer dropeffect=link +++++staticText name='link' +++++++inlineTextBox name='link' +++genericContainer dropeffect=execute +++++staticText name='execute' +++++++inlineTextBox name='execute' +++genericContainer dropeffect=popup +++++staticText name='popup' +++++++inlineTextBox name='popup' +++genericContainer dropeffect=none +++++staticText name='none(default)' +++++++inlineTextBox name='none(default)' +++genericContainer dropeffect=link popup +++++staticText name='link popup' +++++++inlineTextBox name='link popup'
diff --git a/content/test/data/accessibility/aria/aria-editable-expected-blink.txt b/content/test/data/accessibility/aria/aria-editable-expected-blink.txt index b0dc0ad..2862a062 100644 --- a/content/test/data/accessibility/aria/aria-editable-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-editable-expected-blink.txt
@@ -1,12 +1,11 @@ rootWebArea -++genericContainer ignored -++++genericContainer editable multiline richlyEditable value='Editable text/Non-editable text' editableRoot=true -++++++paragraph editable richlyEditable -++++++++staticText editable richlyEditable name='Editable text/' -++++++++++inlineTextBox name='Editable text/' -++++++paragraph -++++++++staticText name='Non-editable text' -++++++++++inlineTextBox name='Non-editable text' -++++genericContainer editable richlyEditable -++++++staticText editable richlyEditable name='Fake-editable' -++++++++inlineTextBox name='Fake-editable' +++genericContainer editable multiline richlyEditable value='Editable text/Non-editable text' editableRoot=true +++++paragraph editable richlyEditable +++++++staticText editable richlyEditable name='Editable text/' +++++++++inlineTextBox name='Editable text/' +++++paragraph +++++++staticText name='Non-editable text' +++++++++inlineTextBox name='Non-editable text' +++genericContainer editable richlyEditable +++++staticText editable richlyEditable name='Fake-editable' +++++++inlineTextBox name='Fake-editable'
diff --git a/content/test/data/accessibility/aria/aria-empty-string-expected-blink.txt b/content/test/data/accessibility/aria/aria-empty-string-expected-blink.txt index 75e98ae..2f1b1dc 100644 --- a/content/test/data/accessibility/aria/aria-empty-string-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-empty-string-expected-blink.txt
@@ -1,26 +1,25 @@ rootWebArea -++genericContainer ignored -++++genericContainer name='Atomic undefined' -++++textField name='Autocomplete undefined' -++++genericContainer name='Busy undefined' -++++treeItem name='Checked undefined' selected=false -++++genericContainer name='Current undefined' -++++genericContainer name='Disabled undefined' -++++genericContainer name='Dropeffect undefined' dropeffect=none -++++treeItem name='Expanded undefined' selected=false -++++genericContainer name='Grabbed undefined' -++++button name='Haspopup undefined' -++++genericContainer name='Invalid undefined' -++++genericContainer name='Live undefined' -++++dialog name='Modal undefined' modal=false -++++textField name='Multiline undefined' -++++grid name='Multiselectable undefined' -++++scrollBar vertical name='Orientation undefined' -++++button name='Pressed undefined' -++++textField name='Readonly undefined' -++++genericContainer name='Relevant undefined' -++++textField name='Required undefined' -++++tree multiselectable vertical -++++++treeItem name='Selected undefined' selected=false -++++columnHeader name='Sort undefined' selected=false -++++genericContainer name='Hidden undefined, display block' +++genericContainer name='Atomic undefined' +++textField name='Autocomplete undefined' +++genericContainer name='Busy undefined' +++treeItem name='Checked undefined' selected=false +++genericContainer name='Current undefined' +++genericContainer name='Disabled undefined' +++genericContainer name='Dropeffect undefined' dropeffect=none +++treeItem name='Expanded undefined' selected=false +++genericContainer name='Grabbed undefined' +++button name='Haspopup undefined' +++genericContainer name='Invalid undefined' +++genericContainer name='Live undefined' +++dialog name='Modal undefined' modal=false +++textField name='Multiline undefined' +++grid name='Multiselectable undefined' +++scrollBar vertical name='Orientation undefined' +++button name='Pressed undefined' +++textField name='Readonly undefined' +++genericContainer name='Relevant undefined' +++textField name='Required undefined' +++tree multiselectable vertical +++++treeItem name='Selected undefined' selected=false +++columnHeader name='Sort undefined' selected=false +++genericContainer name='Hidden undefined, display block'
diff --git a/content/test/data/accessibility/aria/aria-errormessage-expected-blink.txt b/content/test/data/accessibility/aria/aria-errormessage-expected-blink.txt index 31e7c0c..191b040 100644 --- a/content/test/data/accessibility/aria/aria-errormessage-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-errormessage-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++textField errormessageId=paragraph invalidState=true -++++++++genericContainer -++++paragraph -++++++staticText name='Error' -++++++++inlineTextBox name='Error' +++genericContainer +++++textField errormessageId=paragraph invalidState=true +++++++genericContainer +++paragraph +++++staticText name='Error' +++++++inlineTextBox name='Error' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-expanded-expected-blink.txt b/content/test/data/accessibility/aria/aria-expanded-expected-blink.txt index 3ca67a13..51042474 100644 --- a/content/test/data/accessibility/aria/aria-expanded-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-expanded-expected-blink.txt
@@ -1,10 +1,9 @@ rootWebArea -++genericContainer ignored -++++menu -++++++menuItem collapsed name='New' haspopup=menu -++++++menuItem name='Open' haspopup=menu -++++++menuItem collapsed name='Save' -++++++menuItem name='Quit' -++++splitter horizontal -++++splitter horizontal -++++splitter horizontal +++menu +++++menuItem collapsed name='New' haspopup=menu +++++menuItem name='Open' haspopup=menu +++++menuItem collapsed name='Save' +++++menuItem name='Quit' +++splitter horizontal +++splitter horizontal +++splitter horizontal
diff --git a/content/test/data/accessibility/aria/aria-figure-expected-blink.txt b/content/test/data/accessibility/aria/aria-figure-expected-blink.txt index 4775c32..9a22292 100644 --- a/content/test/data/accessibility/aria/aria-figure-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-figure-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++figure -++++++staticText name='Figure' -++++++++inlineTextBox name='Figure' +++figure +++++staticText name='Figure' +++++++inlineTextBox name='Figure' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-flowto-expected-blink.txt b/content/test/data/accessibility/aria/aria-flowto-expected-blink.txt index 2c33dd95..0171c6b 100644 --- a/content/test/data/accessibility/aria/aria-flowto-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-flowto-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++region name='current' flowtoIds=footer -++++++staticText name='Lorem ipsum' -++++++++inlineTextBox name='Lorem ipsum' -++++footer name='next' -++++++staticText name='dolor sit amet' -++++++++inlineTextBox name='dolor sit amet' +++region name='current' flowtoIds=footer +++++staticText name='Lorem ipsum' +++++++inlineTextBox name='Lorem ipsum' +++footer name='next' +++++staticText name='dolor sit amet' +++++++inlineTextBox name='dolor sit amet'
diff --git a/content/test/data/accessibility/aria/aria-flowto-multiple-expected-blink.txt b/content/test/data/accessibility/aria/aria-flowto-multiple-expected-blink.txt index 82100434..cb771c2 100644 --- a/content/test/data/accessibility/aria/aria-flowto-multiple-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-flowto-multiple-expected-blink.txt
@@ -1,11 +1,10 @@ rootWebArea -++genericContainer ignored -++++genericContainer name='a3' flowtoIds=genericContainer -++++++staticText name='a3' -++++++++inlineTextBox name='a3' -++++genericContainer name='b3' -++++++staticText name='b3' -++++++++inlineTextBox name='b3' -++++genericContainer name='c3' flowtoIds=genericContainer -++++++staticText name='c3' -++++++++inlineTextBox name='c3' +++genericContainer name='a3' flowtoIds=genericContainer +++++staticText name='a3' +++++++inlineTextBox name='a3' +++genericContainer name='b3' +++++staticText name='b3' +++++++inlineTextBox name='b3' +++genericContainer name='c3' flowtoIds=genericContainer +++++staticText name='c3' +++++++inlineTextBox name='c3'
diff --git a/content/test/data/accessibility/aria/aria-form-expected-blink.txt b/content/test/data/accessibility/aria/aria-form-expected-blink.txt index 2e9c92e..9482feb 100644 --- a/content/test/data/accessibility/aria/aria-form-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-form-expected-blink.txt
@@ -1,4 +1,2 @@ rootWebArea -++genericContainer ignored -++++form -++++++genericContainer ignored +++form \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-grid-dynamic-add-row-expected-blink.txt b/content/test/data/accessibility/aria/aria-grid-dynamic-add-row-expected-blink.txt index 395afb2..2b4fca0d 100644 --- a/content/test/data/accessibility/aria/aria-grid-dynamic-add-row-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-grid-dynamic-add-row-expected-blink.txt
@@ -1,18 +1,17 @@ rootWebArea -++genericContainer ignored -++++grid -++++++row -++++++++columnHeader name='Turtle' tableCellRowIndex=0 -++++++++columnHeader name='Weapon' tableCellRowIndex=0 -++++++row -++++++++cell name='Donatello' tableCellRowIndex=1 -++++++++cell name='Bo' tableCellRowIndex=1 -++++++row -++++++++cell name='Leonardo' tableCellRowIndex=2 -++++++++cell name='Twin Katana' tableCellRowIndex=2 -++++++row -++++++++cell name='Michelangelo' tableCellRowIndex=3 -++++++++cell name='Nunchaku' tableCellRowIndex=3 -++++++row -++++++++cell name='Raphael' tableCellRowIndex=4 -++++++++cell name='Sai' tableCellRowIndex=4 +++grid +++++row +++++++columnHeader name='Turtle' tableCellRowIndex=0 +++++++columnHeader name='Weapon' tableCellRowIndex=0 +++++row +++++++cell name='Donatello' tableCellRowIndex=1 +++++++cell name='Bo' tableCellRowIndex=1 +++++row +++++++cell name='Leonardo' tableCellRowIndex=2 +++++++cell name='Twin Katana' tableCellRowIndex=2 +++++row +++++++cell name='Michelangelo' tableCellRowIndex=3 +++++++cell name='Nunchaku' tableCellRowIndex=3 +++++row +++++++cell name='Raphael' tableCellRowIndex=4 +++++++cell name='Sai' tableCellRowIndex=4
diff --git a/content/test/data/accessibility/aria/aria-grid-expected-blink.txt b/content/test/data/accessibility/aria/aria-grid-expected-blink.txt index 1bcdb4b..eadbd5b7 100644 --- a/content/test/data/accessibility/aria/aria-grid-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-grid-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++grid -++++++row selected=false -++++++++columnHeader name='Browser' selected=false -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' selected=false -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row selected=false -++++++++cell name='Chrome' selected=false -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' selected=false -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' +++grid +++++row selected=false +++++++columnHeader name='Browser' selected=false +++++++++staticText name='Browser' +++++++++++inlineTextBox name='Browser' +++++++columnHeader name='Rendering Engine' selected=false +++++++++staticText name='Rendering Engine' +++++++++++inlineTextBox name='Rendering Engine' +++++row selected=false +++++++cell name='Chrome' selected=false +++++++++staticText name='Chrome' +++++++++++inlineTextBox name='Chrome' +++++++cell name='Blink' selected=false +++++++++staticText name='Blink' +++++++++++inlineTextBox name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt b/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt index 66c7ce0..876b7a5 100644 --- a/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt
@@ -1,32 +1,91 @@ rootWebArea -++genericContainer ignored -++++grid name='1: Individual rows get their own wrappers' tableRowCount=2 tableColumnCount=2 -++++++genericContainer name='r1-wrap' -++++++++row name='r1-real' tableRowIndex=0 selected=false -++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 selected=false -++++++++++++staticText name='A1' -++++++++++++++inlineTextBox name='A1' -++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 selected=false -++++++++++++staticText name='A2' -++++++++++++++inlineTextBox name='A2' -++++++genericContainer name='r2-wrap' -++++++++genericContainer name='r2-vanilla' -++++++++++row name='r2-real' tableRowIndex=1 selected=false -++++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 selected=false -++++++++++++++staticText name='B1' -++++++++++++++++inlineTextBox name='B1' -++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 selected=false -++++++++++++++staticText name='B2' -++++++++++++++++inlineTextBox name='B2' -++++grid name='2: Single wrapper around all rows' tableRowCount=2 tableColumnCount=2 +++grid name='1: Individual rows get their own wrappers' tableRowCount=2 tableColumnCount=2 +++++genericContainer name='r1-wrap' +++++++row name='r1-real' tableRowIndex=0 selected=false +++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 selected=false +++++++++++staticText name='A1' +++++++++++++inlineTextBox name='A1' +++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 selected=false +++++++++++staticText name='A2' +++++++++++++inlineTextBox name='A2' +++++genericContainer name='r2-wrap' +++++++genericContainer name='r2-vanilla' +++++++++row name='r2-real' tableRowIndex=1 selected=false +++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 selected=false +++++++++++++staticText name='B1' +++++++++++++++inlineTextBox name='B1' +++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 selected=false +++++++++++++staticText name='B2' +++++++++++++++inlineTextBox name='B2' +++grid name='2: Single wrapper around all rows' tableRowCount=2 tableColumnCount=2 +++++genericContainer +++++++row tableRowIndex=0 selected=false +++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 selected=false +++++++++++staticText name='A1' +++++++++++++inlineTextBox name='A1' +++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 selected=false +++++++++++staticText name='A2' +++++++++++++inlineTextBox name='A2' +++++++row tableRowIndex=1 selected=false +++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 selected=false +++++++++++staticText name='B1' +++++++++++++inlineTextBox name='B1' +++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 selected=false +++++++++++staticText name='B2' +++++++++++++inlineTextBox name='B2' +++grid name='3: Individual cells get their own wrappers' tableRowCount=2 tableColumnCount=2 +++++row tableRowIndex=0 selected=false ++++++genericContainer -++++++++row tableRowIndex=0 selected=false -++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 selected=false -++++++++++++staticText name='A1' -++++++++++++++inlineTextBox name='A1' -++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 selected=false -++++++++++++staticText name='A2' -++++++++++++++inlineTextBox name='A2' +++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 selected=false +++++++++++staticText name='A1' +++++++++++++inlineTextBox name='A1' +++++++genericContainer +++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 selected=false +++++++++++staticText name='A2' +++++++++++++inlineTextBox name='A2' +++++row tableRowIndex=1 selected=false +++++++genericContainer +++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 selected=false +++++++++++staticText name='B1' +++++++++++++inlineTextBox name='B1' +++++++genericContainer +++++++++genericContainer +++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 selected=false +++++++++++++staticText name='B2' +++++++++++++++inlineTextBox name='B2' +++grid name='4: Single wrapper around all cells in a row' tableRowCount=2 tableColumnCount=2 +++++row tableRowIndex=0 selected=false +++++++genericContainer +++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 selected=false +++++++++++staticText name='A1' +++++++++++++inlineTextBox name='A1' +++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 selected=false +++++++++++staticText name='A2' +++++++++++++inlineTextBox name='A2' +++++row tableRowIndex=1 selected=false +++++++genericContainer +++++++++genericContainer +++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 selected=false +++++++++++++staticText name='B1' +++++++++++++++inlineTextBox name='B1' +++++++++genericContainer +++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 selected=false +++++++++++++staticText name='B2' +++++++++++++++inlineTextBox name='B2' +++grid name='5: Wrapper insanity' tableRowCount=2 tableColumnCount=2 +++++genericContainer +++++++genericContainer +++++++++genericContainer +++++++++++row tableRowIndex=0 selected=false +++++++++++++genericContainer +++++++++++++++genericContainer +++++++++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 selected=false +++++++++++++++++++staticText name='A1' +++++++++++++++++++++inlineTextBox name='A1' +++++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 selected=false +++++++++++++++staticText name='A2' +++++++++++++++++inlineTextBox name='A2' +++++++genericContainer ++++++++row tableRowIndex=1 selected=false ++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 selected=false ++++++++++++staticText name='B1' @@ -34,63 +93,3 @@ ++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 selected=false ++++++++++++staticText name='B2' ++++++++++++++inlineTextBox name='B2' -++++grid name='3: Individual cells get their own wrappers' tableRowCount=2 tableColumnCount=2 -++++++row tableRowIndex=0 selected=false -++++++++genericContainer -++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 selected=false -++++++++++++staticText name='A1' -++++++++++++++inlineTextBox name='A1' -++++++++genericContainer -++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 selected=false -++++++++++++staticText name='A2' -++++++++++++++inlineTextBox name='A2' -++++++row tableRowIndex=1 selected=false -++++++++genericContainer -++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 selected=false -++++++++++++staticText name='B1' -++++++++++++++inlineTextBox name='B1' -++++++++genericContainer -++++++++++genericContainer -++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 selected=false -++++++++++++++staticText name='B2' -++++++++++++++++inlineTextBox name='B2' -++++grid name='4: Single wrapper around all cells in a row' tableRowCount=2 tableColumnCount=2 -++++++row tableRowIndex=0 selected=false -++++++++genericContainer -++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 selected=false -++++++++++++staticText name='A1' -++++++++++++++inlineTextBox name='A1' -++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 selected=false -++++++++++++staticText name='A2' -++++++++++++++inlineTextBox name='A2' -++++++row tableRowIndex=1 selected=false -++++++++genericContainer -++++++++++genericContainer -++++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 selected=false -++++++++++++++staticText name='B1' -++++++++++++++++inlineTextBox name='B1' -++++++++++genericContainer -++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 selected=false -++++++++++++++staticText name='B2' -++++++++++++++++inlineTextBox name='B2' -++++grid name='5: Wrapper insanity' tableRowCount=2 tableColumnCount=2 -++++++genericContainer -++++++++genericContainer -++++++++++genericContainer -++++++++++++row tableRowIndex=0 selected=false -++++++++++++++genericContainer -++++++++++++++++genericContainer -++++++++++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 selected=false -++++++++++++++++++++staticText name='A1' -++++++++++++++++++++++inlineTextBox name='A1' -++++++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 selected=false -++++++++++++++++staticText name='A2' -++++++++++++++++++inlineTextBox name='A2' -++++++++genericContainer -++++++++++row tableRowIndex=1 selected=false -++++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 selected=false -++++++++++++++staticText name='B1' -++++++++++++++++inlineTextBox name='B1' -++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 selected=false -++++++++++++++staticText name='B2' -++++++++++++++++inlineTextBox name='B2'
diff --git a/content/test/data/accessibility/aria/aria-gridcell-expected-blink.txt b/content/test/data/accessibility/aria/aria-gridcell-expected-blink.txt index 47f80b5f..b1eccba 100644 --- a/content/test/data/accessibility/aria/aria-gridcell-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-gridcell-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++grid multiselectable -++++++row selected=false -++++++++columnHeader name='Browser' selected=false -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' selected=false -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row selected=false -++++++++cell name='Chrome' selected=false -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' selected=false -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' +++grid multiselectable +++++row selected=false +++++++columnHeader name='Browser' selected=false +++++++++staticText name='Browser' +++++++++++inlineTextBox name='Browser' +++++++columnHeader name='Rendering Engine' selected=false +++++++++staticText name='Rendering Engine' +++++++++++inlineTextBox name='Rendering Engine' +++++row selected=false +++++++cell name='Chrome' selected=false +++++++++staticText name='Chrome' +++++++++++inlineTextBox name='Chrome' +++++++cell name='Blink' selected=false +++++++++staticText name='Blink' +++++++++++inlineTextBox name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-group-expected-blink.txt b/content/test/data/accessibility/aria/aria-group-expected-blink.txt index 3ce7ca9..d343516 100644 --- a/content/test/data/accessibility/aria/aria-group-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-group-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++group -++++++link name='Group Link1' -++++++++staticText name='Group Link1' -++++++++++inlineTextBox name='Group Link1' -++++++link name='Group Link2' -++++++++staticText name='Group Link2' -++++++++++inlineTextBox name='Group Link2' +++group +++++link name='Group Link1' +++++++staticText name='Group Link1' +++++++++inlineTextBox name='Group Link1' +++++link name='Group Link2' +++++++staticText name='Group Link2' +++++++++inlineTextBox name='Group Link2' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-haspopup-expected-blink.txt b/content/test/data/accessibility/aria/aria-haspopup-expected-blink.txt index 0f612968..ff34d30 100644 --- a/content/test/data/accessibility/aria/aria-haspopup-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-haspopup-expected-blink.txt
@@ -1,11 +1,10 @@ rootWebArea -++genericContainer ignored -++++comboBoxMenuButton haspopup=menu -++++comboBoxMenuButton -++++comboBoxMenuButton haspopup=menu -++++comboBoxMenuButton haspopup=listbox -++++comboBoxMenuButton haspopup=grid -++++comboBoxMenuButton haspopup=dialog -++++comboBoxMenuButton haspopup=menu -++++comboBoxMenuButton haspopup=listbox -++++comboBoxMenuButton haspopup=listbox +++comboBoxMenuButton haspopup=menu +++comboBoxMenuButton +++comboBoxMenuButton haspopup=menu +++comboBoxMenuButton haspopup=listbox +++comboBoxMenuButton haspopup=grid +++comboBoxMenuButton haspopup=dialog +++comboBoxMenuButton haspopup=menu +++comboBoxMenuButton haspopup=listbox +++comboBoxMenuButton haspopup=listbox
diff --git a/content/test/data/accessibility/aria/aria-heading-expected-blink.txt b/content/test/data/accessibility/aria/aria-heading-expected-blink.txt index faad4a5..4006449 100644 --- a/content/test/data/accessibility/aria/aria-heading-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-heading-expected-blink.txt
@@ -1,24 +1,23 @@ rootWebArea -++genericContainer ignored -++++heading name='ARIA Heading 1' hierarchicalLevel=1 -++++++staticText name='ARIA Heading 1' -++++++++inlineTextBox name='ARIA Heading 1' -++++heading name='ARIA Heading 2' hierarchicalLevel=2 -++++++staticText name='ARIA Heading 2' -++++++++inlineTextBox name='ARIA Heading 2' -++++heading name='ARIA Heading 3' hierarchicalLevel=3 -++++++staticText name='ARIA Heading 3' -++++++++inlineTextBox name='ARIA Heading 3' -++++heading name='ARIA Heading 4' hierarchicalLevel=4 -++++++staticText name='ARIA Heading 4' -++++++++inlineTextBox name='ARIA Heading 4' -++++heading name='ARIA Heading 5' hierarchicalLevel=5 -++++++staticText name='ARIA Heading 5' -++++++++inlineTextBox name='ARIA Heading 5' -++++heading name='ARIA Heading 6' hierarchicalLevel=6 -++++++staticText name='ARIA Heading 6' -++++++++inlineTextBox name='ARIA Heading 6' -++++genericContainer -++++++heading name='Heading' hierarchicalLevel=2 -++++++++staticText name='Heading' -++++++++++inlineTextBox name='Heading' +++heading name='ARIA Heading 1' hierarchicalLevel=1 +++++staticText name='ARIA Heading 1' +++++++inlineTextBox name='ARIA Heading 1' +++heading name='ARIA Heading 2' hierarchicalLevel=2 +++++staticText name='ARIA Heading 2' +++++++inlineTextBox name='ARIA Heading 2' +++heading name='ARIA Heading 3' hierarchicalLevel=3 +++++staticText name='ARIA Heading 3' +++++++inlineTextBox name='ARIA Heading 3' +++heading name='ARIA Heading 4' hierarchicalLevel=4 +++++staticText name='ARIA Heading 4' +++++++inlineTextBox name='ARIA Heading 4' +++heading name='ARIA Heading 5' hierarchicalLevel=5 +++++staticText name='ARIA Heading 5' +++++++inlineTextBox name='ARIA Heading 5' +++heading name='ARIA Heading 6' hierarchicalLevel=6 +++++staticText name='ARIA Heading 6' +++++++inlineTextBox name='ARIA Heading 6' +++genericContainer +++++heading name='Heading' hierarchicalLevel=2 +++++++staticText name='Heading' +++++++++inlineTextBox name='Heading' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-hidden-descendant-tabindex-change-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-descendant-tabindex-change-expected-blink.txt index a7b63615..2c2882c 100644 --- a/content/test/data/accessibility/aria/aria-hidden-descendant-tabindex-change-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-descendant-tabindex-change-expected-blink.txt
@@ -1,11 +1,3 @@ rootWebArea -++genericContainer ignored -++++genericContainer ignored invisible -++++++group ignored invisible -++++++++group ignored invisible -++++++++++slider horizontal ignored invisible name='Slider#1 now unfocusable' -++++genericContainer ignored invisible -++++++group ignored invisible -++++++++group ignored invisible -++++++++++slider horizontal invisible name='Slider #2 now focusable' -++++group name='finished' +++slider horizontal invisible name='Slider #2 now focusable' +++group name='finished'
diff --git a/content/test/data/accessibility/aria/aria-hidden-descendants-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-descendants-expected-blink.txt index bbdee5a3..608fabe 100644 --- a/content/test/data/accessibility/aria/aria-hidden-descendants-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-descendants-expected-blink.txt
@@ -1,11 +1,7 @@ rootWebArea -++genericContainer ignored -++++group ignored invisible name='Subtree starts visible ends hidden' -++++++group ignored invisible -++++++++group ignored invisible -++++++++++slider horizontal invisible name='Slider#1 now inside hidden subtree' -++++genericContainer name='Subtree starts hidden ends visible' +++slider horizontal invisible name='Slider#1 now inside hidden subtree' +++genericContainer name='Subtree starts hidden ends visible' +++++group ++++++group -++++++++group -++++++++++slider horizontal name='Slider #2 now inside visible subtree' -++++group name='finished' +++++++++slider horizontal name='Slider #2 now inside visible subtree' +++group name='finished'
diff --git a/content/test/data/accessibility/aria/aria-hidden-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-expected-blink.txt index 418ae44..ecc38d1c 100644 --- a/content/test/data/accessibility/aria/aria-hidden-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-expected-blink.txt
@@ -1,11 +1,9 @@ -rootWebArea isLineBreakingObject=true -++genericContainer ignored isLineBreakingObject=true -++++genericContainer isLineBreakingObject=true -++++++staticText name='blockDisplay' -++++++++inlineTextBox name='blockDisplay' -++++genericContainer ignored invisible isLineBreakingObject=true -++++genericContainer isLineBreakingObject=true -++++++staticText name='blockDisplay Hiddenfalse' -++++++++inlineTextBox name='blockDisplay Hiddenfalse' -++++genericContainer -++++genericContainer invisible name='blockDisplay Hiddentruefocusable' isLineBreakingObject=true +rootWebArea +++genericContainer +++++staticText name='blockDisplay' +++++++inlineTextBox name='blockDisplay' +++genericContainer +++++staticText name='blockDisplay Hiddenfalse' +++++++inlineTextBox name='blockDisplay Hiddenfalse' +++genericContainer +++genericContainer invisible name='blockDisplay Hiddentruefocusable'
diff --git a/content/test/data/accessibility/aria/aria-hidden-iframe-body-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-iframe-body-expected-blink.txt index f53885b..6b1213e2 100644 --- a/content/test/data/accessibility/aria/aria-hidden-iframe-body-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-iframe-body-expected-blink.txt
@@ -5,4 +5,3 @@ ++++++++genericContainer editable focusable invisible multiline richlyEditable value='1' ++++iframe focusable ++++++rootWebArea focusable -++++++++genericContainer ignored invisible
diff --git a/content/test/data/accessibility/aria/aria-hidden.html b/content/test/data/accessibility/aria/aria-hidden.html index c26d549f..7b6ba88 100644 --- a/content/test/data/accessibility/aria/aria-hidden.html +++ b/content/test/data/accessibility/aria/aria-hidden.html
@@ -2,7 +2,6 @@ @MAC-ALLOW:AXValue* @WIN-ALLOW:hidden* @AURALINUX-ALLOW:hidden* -@BLINK-ALLOW:isLineBreakingObject* --> <html> <head>
diff --git a/content/test/data/accessibility/aria/aria-illegal-val-expected-blink.txt b/content/test/data/accessibility/aria/aria-illegal-val-expected-blink.txt index 980a64b..574dab9dc 100644 --- a/content/test/data/accessibility/aria/aria-illegal-val-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-illegal-val-expected-blink.txt
@@ -1,26 +1,24 @@ rootWebArea -++genericContainer ignored -++++log containerLiveRelevant='additions text' containerLiveStatus='polite' name='Atomic illegal' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true -++++textField autoComplete='x-illegal' name='Autocomplete illegal' -++++log containerLiveRelevant='additions text' containerLiveStatus='polite' name='Busy illegal' liveRelevant='additions text' liveStatus='polite' busy=true containerLiveAtomic=false containerLiveBusy=true liveAtomic=false -++++treeItem name='Checked illegal' checkedState=true selected=false -++++genericContainer name='Current illegal' ariaCurrentState=true -++++genericContainer name='Disabled illegal' restriction=disabled -++++genericContainer name='Dropeffect illegal' dropeffect=none -++++treeItem expanded name='Expanded illegal' selected=false -++++genericContainer name='Grabbed illegal' -++++popUpButton name='Haspopup illegal' haspopup=menu -++++genericContainer ariaInvalidValue='X-ILLEGAL' name='Invalid illegal' invalidState=other -++++log containerLiveRelevant='additions text' containerLiveStatus='X-ILLEGAL' name='Live illegal' liveRelevant='additions text' liveStatus='X-ILLEGAL' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++dialog name='Modal illegal' modal=true -++++textField multiline name='Multiline illegal' -++++grid multiselectable name='Multiselectable illegal' -++++slider horizontal name='Orientation illegal' -++++toggleButton name='Pressed illegal' checkedState=true -++++textField name='Readonly illegal' restriction=readOnly -++++log containerLiveRelevant='X-ILLEGAL' containerLiveStatus='polite' name='Relevant illegal' liveRelevant='X-ILLEGAL' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++textField required name='Required illegal' -++++tree multiselectable vertical -++++++treeItem name='Selected illegal' selected=true -++++columnHeader name='Sort illegal' sortDirection=other selected=false -++++genericContainer ignored invisible name='Hidden illegal' +++log containerLiveRelevant='additions text' containerLiveStatus='polite' name='Atomic illegal' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true +++textField autoComplete='x-illegal' name='Autocomplete illegal' +++log containerLiveRelevant='additions text' containerLiveStatus='polite' name='Busy illegal' liveRelevant='additions text' liveStatus='polite' busy=true containerLiveAtomic=false containerLiveBusy=true liveAtomic=false +++treeItem name='Checked illegal' checkedState=true selected=false +++genericContainer name='Current illegal' ariaCurrentState=true +++genericContainer name='Disabled illegal' restriction=disabled +++genericContainer name='Dropeffect illegal' dropeffect=none +++treeItem expanded name='Expanded illegal' selected=false +++genericContainer name='Grabbed illegal' +++popUpButton name='Haspopup illegal' haspopup=menu +++genericContainer ariaInvalidValue='X-ILLEGAL' name='Invalid illegal' invalidState=other +++log containerLiveRelevant='additions text' containerLiveStatus='X-ILLEGAL' name='Live illegal' liveRelevant='additions text' liveStatus='X-ILLEGAL' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++dialog name='Modal illegal' modal=true +++textField multiline name='Multiline illegal' +++grid multiselectable name='Multiselectable illegal' +++slider horizontal name='Orientation illegal' +++toggleButton name='Pressed illegal' checkedState=true +++textField name='Readonly illegal' restriction=readOnly +++log containerLiveRelevant='X-ILLEGAL' containerLiveStatus='polite' name='Relevant illegal' liveRelevant='X-ILLEGAL' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++textField required name='Required illegal' +++tree multiselectable vertical +++++treeItem name='Selected illegal' selected=true +++columnHeader name='Sort illegal' sortDirection=other selected=false
diff --git a/content/test/data/accessibility/aria/aria-img-expected-blink.txt b/content/test/data/accessibility/aria/aria-img-expected-blink.txt index 3fbe9e8..049fb738 100644 --- a/content/test/data/accessibility/aria/aria-img-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-img-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++image +++image \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-insertion-deletion-expected-blink.txt b/content/test/data/accessibility/aria/aria-insertion-deletion-expected-blink.txt index 296df33..31227a5 100644 --- a/content/test/data/accessibility/aria/aria-insertion-deletion-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-insertion-deletion-expected-blink.txt
@@ -1,15 +1,14 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='My favorite browser is ' -++++++++inlineTextBox name='My favorite browser is ' -++++++contentDeletion -++++++++staticText name='ABC' -++++++++++inlineTextBox name='ABC' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++contentInsertion -++++++++staticText name='Chrome' -++++++++++inlineTextBox name='Chrome' -++++++staticText name='!' -++++++++inlineTextBox name='!' +++paragraph +++++staticText name='My favorite browser is ' +++++++inlineTextBox name='My favorite browser is ' +++++contentDeletion +++++++staticText name='ABC' +++++++++inlineTextBox name='ABC' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++contentInsertion +++++++staticText name='Chrome' +++++++++inlineTextBox name='Chrome' +++++staticText name='!' +++++++inlineTextBox name='!'
diff --git a/content/test/data/accessibility/aria/aria-invalid-expected-blink.txt b/content/test/data/accessibility/aria/aria-invalid-expected-blink.txt index b9ffb4084..7d06cbe 100644 --- a/content/test/data/accessibility/aria/aria-invalid-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-invalid-expected-blink.txt
@@ -1,38 +1,37 @@ rootWebArea -++genericContainer ignored -++++genericContainer invalidState=true -++++++staticText name='invalid=true' -++++++++inlineTextBox name='invalid=true' -++++textField value='An eror via invalid=spelling' -++++++staticText name='An ' -++++++++inlineTextBox name='An ' -++++++genericContainer ariaInvalidValue='spelling' invalidState=other -++++++++staticText name='eror' markerTypes=1 markerStarts=0 markerEnds=4 -++++++++++inlineTextBox name='eror' -++++++staticText name=' via invalid=spelling' -++++++++inlineTextBox name=' via invalid=spelling' -++++textField value='An errors via invalid=grammar' -++++++staticText name='An ' -++++++++inlineTextBox name='An ' -++++++genericContainer ariaInvalidValue='grammar' invalidState=other -++++++++staticText name='errors' markerTypes=2 markerStarts=0 markerEnds=6 -++++++++++inlineTextBox name='errors' -++++++staticText name=' via invalid=grammar' -++++++++inlineTextBox name=' via invalid=grammar' -++++genericContainer invalidState=false -++++++staticText name='invalid=false' -++++++++inlineTextBox name='invalid=false' -++++genericContainer -++++++staticText name='invalid=<empty>' -++++++++inlineTextBox name='invalid=<empty>' -++++genericContainer -++++++staticText name='invalid=<default>' -++++++++inlineTextBox name='invalid=<default>' -++++genericContainer ariaInvalidValue='unknown' invalidState=other -++++++staticText name='invalid=unknown' -++++++++inlineTextBox name='invalid=unknown' -++++form -++++++textField value='1234' invalidState=true -++++++++genericContainer -++++++++++staticText name='1234' -++++++++++++inlineTextBox name='1234' +++genericContainer invalidState=true +++++staticText name='invalid=true' +++++++inlineTextBox name='invalid=true' +++textField value='An eror via invalid=spelling' +++++staticText name='An ' +++++++inlineTextBox name='An ' +++++genericContainer ariaInvalidValue='spelling' invalidState=other +++++++staticText name='eror' markerTypes=1 markerStarts=0 markerEnds=4 +++++++++inlineTextBox name='eror' +++++staticText name=' via invalid=spelling' +++++++inlineTextBox name=' via invalid=spelling' +++textField value='An errors via invalid=grammar' +++++staticText name='An ' +++++++inlineTextBox name='An ' +++++genericContainer ariaInvalidValue='grammar' invalidState=other +++++++staticText name='errors' markerTypes=2 markerStarts=0 markerEnds=6 +++++++++inlineTextBox name='errors' +++++staticText name=' via invalid=grammar' +++++++inlineTextBox name=' via invalid=grammar' +++genericContainer invalidState=false +++++staticText name='invalid=false' +++++++inlineTextBox name='invalid=false' +++genericContainer +++++staticText name='invalid=<empty>' +++++++inlineTextBox name='invalid=<empty>' +++genericContainer +++++staticText name='invalid=<default>' +++++++inlineTextBox name='invalid=<default>' +++genericContainer ariaInvalidValue='unknown' invalidState=other +++++staticText name='invalid=unknown' +++++++inlineTextBox name='invalid=unknown' +++form +++++textField value='1234' invalidState=true +++++++genericContainer +++++++++staticText name='1234' +++++++++++inlineTextBox name='1234' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-label-expected-blink.txt b/content/test/data/accessibility/aria/aria-label-expected-blink.txt index 8510570..5850333 100644 --- a/content/test/data/accessibility/aria/aria-label-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-label-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++checkBox name='aria label' checkedState=false +++checkBox name='aria label' checkedState=false \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-labelledby-heading-expected-blink.txt b/content/test/data/accessibility/aria/aria-labelledby-heading-expected-blink.txt index ddb8923..07b3bf6 100644 --- a/content/test/data/accessibility/aria/aria-labelledby-heading-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-labelledby-heading-expected-blink.txt
@@ -1,7 +1,6 @@ rootWebArea -++genericContainer ignored -++++textField name='h2' -++++++genericContainer -++++heading name='h2' hierarchicalLevel=2 -++++++staticText name='h2' -++++++++inlineTextBox name='h2' +++textField name='h2' +++++genericContainer +++heading name='h2' hierarchicalLevel=2 +++++staticText name='h2' +++++++inlineTextBox name='h2' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-labelledby-updates-expected-blink.txt b/content/test/data/accessibility/aria/aria-labelledby-updates-expected-blink.txt index 799a083..fed8f49 100644 --- a/content/test/data/accessibility/aria/aria-labelledby-updates-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-labelledby-updates-expected-blink.txt
@@ -1,4 +1,2 @@ rootWebArea -++genericContainer ignored -++++main name='oranges' -++++paragraph ignored invisible +++main name='oranges'
diff --git a/content/test/data/accessibility/aria/aria-level-expected-blink.txt b/content/test/data/accessibility/aria/aria-level-expected-blink.txt index bc2eb1d..6b159f8 100644 --- a/content/test/data/accessibility/aria/aria-level-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-level-expected-blink.txt
@@ -1,43 +1,42 @@ rootWebArea -++genericContainer ignored -++++heading name='Level 2' hierarchicalLevel=2 -++++++staticText name='Level 2' -++++++++inlineTextBox name='Level 2' -++++heading name='Level 9' hierarchicalLevel=9 -++++++staticText name='Level 9' -++++++++inlineTextBox name='Level 9' -++++heading name='Level 1' hierarchicalLevel=1 -++++++staticText name='Level 1' -++++++++inlineTextBox name='Level 1' -++++heading name='Level 3' hierarchicalLevel=3 -++++++staticText name='Level 3' -++++++++inlineTextBox name='Level 3' -++++heading name='Level 3' hierarchicalLevel=3 -++++++staticText name='Level 3' -++++++++inlineTextBox name='Level 3' -++++heading name='Level 4' hierarchicalLevel=4 -++++++staticText name='Level 4' -++++++++inlineTextBox name='Level 4' -++++heading name='Level 5' hierarchicalLevel=5 -++++++staticText name='Level 5' -++++++++inlineTextBox name='Level 5' -++++tree -++++++treeItem name='Tree item at level 1' hierarchicalLevel=1 selected=false -++++++++staticText name='Tree item at level 1' -++++++++++inlineTextBox name='Tree item at level 1' -++++++++group -++++++++++treeItem name='Tree item at level 2' hierarchicalLevel=2 selected=false -++++++++++++staticText name='Tree item at level 2' -++++++++++++++inlineTextBox name='Tree item at level 2' -++++++treeItem name='Tree item at level 3' hierarchicalLevel=3 selected=false -++++++++staticText name='Tree item at level 3' -++++++++++inlineTextBox name='Tree item at level 3' -++++treeGrid -++++++row hierarchicalLevel=1 selected=false -++++++++cell name='Cell at level 1' selected=false -++++++++++staticText name='Cell at level 1' -++++++++++++inlineTextBox name='Cell at level 1' -++++++row hierarchicalLevel=2 selected=false -++++++++cell name='Cell at level 2' selected=false -++++++++++staticText name='Cell at level 2' -++++++++++++inlineTextBox name='Cell at level 2' +++heading name='Level 2' hierarchicalLevel=2 +++++staticText name='Level 2' +++++++inlineTextBox name='Level 2' +++heading name='Level 9' hierarchicalLevel=9 +++++staticText name='Level 9' +++++++inlineTextBox name='Level 9' +++heading name='Level 1' hierarchicalLevel=1 +++++staticText name='Level 1' +++++++inlineTextBox name='Level 1' +++heading name='Level 3' hierarchicalLevel=3 +++++staticText name='Level 3' +++++++inlineTextBox name='Level 3' +++heading name='Level 3' hierarchicalLevel=3 +++++staticText name='Level 3' +++++++inlineTextBox name='Level 3' +++heading name='Level 4' hierarchicalLevel=4 +++++staticText name='Level 4' +++++++inlineTextBox name='Level 4' +++heading name='Level 5' hierarchicalLevel=5 +++++staticText name='Level 5' +++++++inlineTextBox name='Level 5' +++tree +++++treeItem name='Tree item at level 1' hierarchicalLevel=1 selected=false +++++++staticText name='Tree item at level 1' +++++++++inlineTextBox name='Tree item at level 1' +++++++group +++++++++treeItem name='Tree item at level 2' hierarchicalLevel=2 selected=false +++++++++++staticText name='Tree item at level 2' +++++++++++++inlineTextBox name='Tree item at level 2' +++++treeItem name='Tree item at level 3' hierarchicalLevel=3 selected=false +++++++staticText name='Tree item at level 3' +++++++++inlineTextBox name='Tree item at level 3' +++treeGrid +++++row hierarchicalLevel=1 selected=false +++++++cell name='Cell at level 1' selected=false +++++++++staticText name='Cell at level 1' +++++++++++inlineTextBox name='Cell at level 1' +++++row hierarchicalLevel=2 selected=false +++++++cell name='Cell at level 2' selected=false +++++++++staticText name='Cell at level 2' +++++++++++inlineTextBox name='Cell at level 2'
diff --git a/content/test/data/accessibility/aria/aria-list-expected-blink.txt b/content/test/data/accessibility/aria/aria-list-expected-blink.txt index baf0064..50b8b63 100644 --- a/content/test/data/accessibility/aria/aria-list-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-list-expected-blink.txt
@@ -1,12 +1,11 @@ rootWebArea -++genericContainer ignored -++++list -++++++listItem name='1' -++++++++staticText name='Item 1' -++++++++++inlineTextBox name='Item 1' -++++++listItem name='2' -++++++++staticText name='Item 2' -++++++++++inlineTextBox name='Item 2' -++++++listItem name='3' -++++++++staticText name='Item 3' -++++++++++inlineTextBox name='Item 3' +++list +++++listItem name='1' +++++++staticText name='Item 1' +++++++++inlineTextBox name='Item 1' +++++listItem name='2' +++++++staticText name='Item 2' +++++++++inlineTextBox name='Item 2' +++++listItem name='3' +++++++staticText name='Item 3' +++++++++inlineTextBox name='Item 3' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-listbox-activedescendant-expected-blink.txt b/content/test/data/accessibility/aria/aria-listbox-activedescendant-expected-blink.txt index 4edb2873..e59f2d6 100644 --- a/content/test/data/accessibility/aria/aria-listbox-activedescendant-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-listbox-activedescendant-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++listBox activedescendantId=listBoxOption -++++++listBoxOption name='1' selected=false -++++++listBoxOption name='2' selected=false -++++++listBoxOption name='3' selected=true +++listBox activedescendantId=listBoxOption +++++listBoxOption name='1' selected=false +++++listBoxOption name='2' selected=false +++++listBoxOption name='3' selected=true \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-listbox-aria-selected-expected-blink.txt b/content/test/data/accessibility/aria/aria-listbox-aria-selected-expected-blink.txt index db16ef389..dfa19798 100644 --- a/content/test/data/accessibility/aria/aria-listbox-aria-selected-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-listbox-aria-selected-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++listBox multiselectable activedescendantId=listBoxOption -++++++listBoxOption name='Item 1' selected=false -++++++listBoxOption name='Item 2' selected=false -++++++listBoxOption name='Item 3' selected=false -++++++listBoxOption name='Item 4' selected=true -++++++listBoxOption name='Item 5' selected=true +++listBox multiselectable activedescendantId=listBoxOption +++++listBoxOption name='Item 1' selected=false +++++listBoxOption name='Item 2' selected=false +++++listBoxOption name='Item 3' selected=false +++++listBoxOption name='Item 4' selected=true +++++listBoxOption name='Item 5' selected=true
diff --git a/content/test/data/accessibility/aria/aria-listbox-childfocus-expected-blink.txt b/content/test/data/accessibility/aria/aria-listbox-childfocus-expected-blink.txt index 7654939..62c3abce 100644 --- a/content/test/data/accessibility/aria/aria-listbox-childfocus-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-listbox-childfocus-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++listBox -++++++listBoxOption name='1' selected=false -++++++listBoxOption name='2' selected=true -++++++listBoxOption name='3' selected=false +++listBox +++++listBoxOption name='1' selected=false +++++listBoxOption name='2' selected=true +++++listBoxOption name='3' selected=false \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-listbox-expected-blink.txt b/content/test/data/accessibility/aria/aria-listbox-expected-blink.txt index 69652b3..dc833e6 100644 --- a/content/test/data/accessibility/aria/aria-listbox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-listbox-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++listBox setSize=4 -++++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false -++++++splitter horizontal -++++++listBoxOption name='Second group item 1' setSize=4 posInSet=3 selected=false -++++++listBoxOption name='Second group item 2' setSize=4 posInSet=4 selected=false +++listBox setSize=4 +++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false +++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false +++++splitter horizontal +++++listBoxOption name='Second group item 1' setSize=4 posInSet=3 selected=false +++++listBoxOption name='Second group item 2' setSize=4 posInSet=4 selected=false
diff --git a/content/test/data/accessibility/aria/aria-listitem-expected-blink.txt b/content/test/data/accessibility/aria/aria-listitem-expected-blink.txt index 8f38469..2ae18cf 100644 --- a/content/test/data/accessibility/aria/aria-listitem-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-listitem-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++list -++++++listItem name='1' -++++++++staticText name='Item 1' -++++++++++inlineTextBox name='Item 1' -++++++listItem name='2' -++++++++staticText name='Item 2' -++++++++++inlineTextBox name='Item 2' +++list +++++listItem name='1' +++++++staticText name='Item 1' +++++++++inlineTextBox name='Item 1' +++++listItem name='2' +++++++staticText name='Item 2' +++++++++inlineTextBox name='Item 2' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-live-expected-blink.txt b/content/test/data/accessibility/aria/aria-live-expected-blink.txt index 861d23e973..9a282e3f 100644 --- a/content/test/data/accessibility/aria/aria-live-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-live-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++alert containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true +++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++alert containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-live-nested-expected-blink.txt b/content/test/data/accessibility/aria/aria-live-nested-expected-blink.txt index 08845dc..b7f43c61 100644 --- a/content/test/data/accessibility/aria/aria-live-nested-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-live-nested-expected-blink.txt
@@ -1,15 +1,13 @@ rootWebArea -++genericContainer ignored -++++group containerLiveStatus='polite' liveStatus='polite' -++++++group containerLiveStatus='off' liveStatus='off' -++++++++staticText containerLiveStatus='off' name='Nested - off' -++++++++++inlineTextBox containerLiveStatus='off' name='Nested - off' +++group containerLiveStatus='polite' liveStatus='polite' ++++group containerLiveStatus='off' liveStatus='off' -++++++group containerLiveStatus='polite' liveStatus='polite' -++++++++staticText containerLiveStatus='polite' name='Nested - polite' -++++++++++inlineTextBox containerLiveStatus='polite' name='Nested - polite' +++++++staticText containerLiveStatus='off' name='Nested - off' +++++++++inlineTextBox name='Nested - off' +++group containerLiveStatus='off' liveStatus='off' ++++group containerLiveStatus='polite' liveStatus='polite' -++++++genericContainer ignored containerLiveStatus='polite' -++++++++group containerLiveStatus='assertive' liveStatus='assertive' -++++++++++staticText containerLiveStatus='assertive' name='Nested - assertive' -++++++++++++inlineTextBox name='Nested - assertive' +++++++staticText containerLiveStatus='polite' name='Nested - polite' +++++++++inlineTextBox name='Nested - polite' +++group containerLiveStatus='polite' liveStatus='polite' +++++group containerLiveStatus='assertive' liveStatus='assertive' +++++++staticText containerLiveStatus='assertive' name='Nested - assertive' +++++++++inlineTextBox name='Nested - assertive' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-live-with-content-expected-blink.txt b/content/test/data/accessibility/aria/aria-live-with-content-expected-blink.txt index 5d8cb80f..929cc74 100644 --- a/content/test/data/accessibility/aria/aria-live-with-content-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-live-with-content-expected-blink.txt
@@ -1,11 +1,10 @@ rootWebArea -++genericContainer ignored -++++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++staticText containerLiveRelevant='additions text' containerLiveStatus='off' name='Off' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++++inlineTextBox name='Off' -++++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++staticText containerLiveRelevant='additions text' containerLiveStatus='polite' name='Polite' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++++inlineTextBox name='Polite' -++++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++staticText containerLiveRelevant='additions text' containerLiveStatus='assertive' name='Assertive' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++++inlineTextBox name='Assertive' +++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++staticText containerLiveRelevant='additions text' containerLiveStatus='off' name='Off' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++inlineTextBox name='Off' +++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++staticText containerLiveRelevant='additions text' containerLiveStatus='polite' name='Polite' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++inlineTextBox name='Polite' +++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++staticText containerLiveRelevant='additions text' containerLiveStatus='assertive' name='Assertive' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++inlineTextBox name='Assertive' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-log-expected-blink.txt b/content/test/data/accessibility/aria/aria-log-expected-blink.txt index 56f12e4..34feffd 100644 --- a/content/test/data/accessibility/aria/aria-log-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-log-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++log +++log \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-main-expected-blink.txt b/content/test/data/accessibility/aria/aria-main-expected-blink.txt index 816e7c5..b19eee86 100644 --- a/content/test/data/accessibility/aria/aria-main-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-main-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++main +++main \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-marquee-expected-blink.txt b/content/test/data/accessibility/aria/aria-marquee-expected-blink.txt index 50b3875..795ccf19 100644 --- a/content/test/data/accessibility/aria/aria-marquee-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-marquee-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-math-expected-blink.txt b/content/test/data/accessibility/aria/aria-math-expected-blink.txt index b75d17b9..0899533b 100644 --- a/content/test/data/accessibility/aria/aria-math-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-math-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++math +++math \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-menu-expected-blink.txt b/content/test/data/accessibility/aria/aria-menu-expected-blink.txt index 47c0c6a..819d35a 100644 --- a/content/test/data/accessibility/aria/aria-menu-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-menu-expected-blink.txt
@@ -1,11 +1,10 @@ rootWebArea -++genericContainer ignored -++++menuBar horizontal -++++++menuItem name='File' controlsIds=menu -++++++menuItem name='Edit' -++++++menuItem name='View' -++++menu name='File' -++++++menuItem name='New' -++++++menuItem name='Open' -++++++menuItem name='Save' -++++++menuItem name='Quit' +++menuBar horizontal +++++menuItem name='File' controlsIds=menu +++++menuItem name='Edit' +++++menuItem name='View' +++menu name='File' +++++menuItem name='New' +++++menuItem name='Open' +++++menuItem name='Save' +++++menuItem name='Quit'
diff --git a/content/test/data/accessibility/aria/aria-menubar-expected-blink.txt b/content/test/data/accessibility/aria/aria-menubar-expected-blink.txt index d483f40..0d1724a 100644 --- a/content/test/data/accessibility/aria/aria-menubar-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-menubar-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++menuBar horizontal -++++++menuItem name='File' -++++++menuItem name='Edit' -++++++menuItem name='View' +++menuBar horizontal +++++menuItem name='File' +++++menuItem name='Edit' +++++menuItem name='View' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-menuitem-expected-blink.txt b/content/test/data/accessibility/aria/aria-menuitem-expected-blink.txt index af43935e..a0c5973 100644 --- a/content/test/data/accessibility/aria/aria-menuitem-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-menuitem-expected-blink.txt
@@ -1,12 +1,11 @@ rootWebArea -++genericContainer ignored -++++menu -++++++menuItem name='File' -++++++menuItem name='Edit' -++++++menuItem name='Complex menuitem' -++++++++staticText name='Complex ' -++++++++++inlineTextBox name='Complex ' -++++++++textField -++++++++++genericContainer -++++++++staticText name=' menuitem' -++++++++++inlineTextBox name=' menuitem' +++menu +++++menuItem name='File' +++++menuItem name='Edit' +++++menuItem name='Complex menuitem' +++++++staticText name='Complex ' +++++++++inlineTextBox name='Complex ' +++++++textField +++++++++genericContainer +++++++staticText name=' menuitem' +++++++++inlineTextBox name=' menuitem' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-menuitemcheckbox-expected-blink.txt b/content/test/data/accessibility/aria/aria-menuitemcheckbox-expected-blink.txt index 6a589b2..08e65f8 100644 --- a/content/test/data/accessibility/aria/aria-menuitemcheckbox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-menuitemcheckbox-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++menu -++++++menuItemCheckBox name='Menu item 1' checkedState=false -++++++menuItemCheckBox name='Menu item 2' checkedState=true -++++++menuItemCheckBox name='Menu item 3' checkedState=mixed +++menu +++++menuItemCheckBox name='Menu item 1' checkedState=false +++++menuItemCheckBox name='Menu item 2' checkedState=true +++++menuItemCheckBox name='Menu item 3' checkedState=mixed \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-menuitemradio-expected-blink.txt b/content/test/data/accessibility/aria/aria-menuitemradio-expected-blink.txt index e5d4c17..76ed6c4 100644 --- a/content/test/data/accessibility/aria/aria-menuitemradio-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-menuitemradio-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++menu -++++++menuItemRadio name='Menu item 1' checkedState=false -++++++menuItemRadio name='Menu item 2' checkedState=true -++++++menuItemRadio name='Menu item 3' checkedState=mixed +++menu +++++menuItemRadio name='Menu item 1' checkedState=false +++++menuItemRadio name='Menu item 2' checkedState=true +++++menuItemRadio name='Menu item 3' checkedState=mixed \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-meter-expected-blink.txt b/content/test/data/accessibility/aria/aria-meter-expected-blink.txt index 46aee75d..9c57ede 100644 --- a/content/test/data/accessibility/aria/aria-meter-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-meter-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++meter name='funding' value='half-way' valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++++staticText name='We're getting there!' -++++++++inlineTextBox name='We're getting there!' -++++meter name='funding' valueForRange=10.00 minValueForRange=0.00 maxValueForRange=100.00 -++++++staticText name='Not so great.' -++++++++inlineTextBox name='Not so great.' +++meter name='funding' value='half-way' valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++++staticText name='We're getting there!' +++++++inlineTextBox name='We're getting there!' +++meter name='funding' valueForRange=10.00 minValueForRange=0.00 maxValueForRange=100.00 +++++staticText name='Not so great.' +++++++inlineTextBox name='Not so great.'
diff --git a/content/test/data/accessibility/aria/aria-modal-expected-blink.txt b/content/test/data/accessibility/aria/aria-modal-expected-blink.txt index 40993fcd..2fd0f1b 100644 --- a/content/test/data/accessibility/aria/aria-modal-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-modal-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++dialog modal=false -++++++staticText name='Nonmodal' -++++++++inlineTextBox name='Nonmodal' -++++dialog modal=true -++++++staticText name='Modal' -++++++++inlineTextBox name='Modal' +++dialog modal=false +++++staticText name='Nonmodal' +++++++inlineTextBox name='Nonmodal' +++dialog modal=true +++++staticText name='Modal' +++++++inlineTextBox name='Modal'
diff --git a/content/test/data/accessibility/aria/aria-multiline-expected-blink.txt b/content/test/data/accessibility/aria/aria-multiline-expected-blink.txt index ba5071fc..37f1547 100644 --- a/content/test/data/accessibility/aria/aria-multiline-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-multiline-expected-blink.txt
@@ -1,4 +1,3 @@ rootWebArea -++genericContainer ignored -++++textField -++++textField multiline +++textField +++textField multiline
diff --git a/content/test/data/accessibility/aria/aria-multiselectable-expected-blink.txt b/content/test/data/accessibility/aria/aria-multiselectable-expected-blink.txt index eb1bd3e..4d3b48c6 100644 --- a/content/test/data/accessibility/aria/aria-multiselectable-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-multiselectable-expected-blink.txt
@@ -1,4 +1,3 @@ rootWebArea -++genericContainer ignored -++++listBox multiselectable -++++listBox +++listBox multiselectable +++listBox \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-navigation-expected-blink.txt b/content/test/data/accessibility/aria/aria-navigation-expected-blink.txt index 0e3403b..30ab57a 100644 --- a/content/test/data/accessibility/aria/aria-navigation-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-navigation-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++navigation +++navigation \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-none-expected-blink.txt b/content/test/data/accessibility/aria/aria-none-expected-blink.txt index ee4ddd6b..665640d 100644 --- a/content/test/data/accessibility/aria/aria-none-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-none-expected-blink.txt
@@ -1,5 +1,3 @@ rootWebArea -++genericContainer ignored -++++none ignored -++++++staticText name='With aria-role none' -++++++++inlineTextBox name='With aria-role none' +++staticText name='With aria-role none' +++++inlineTextBox name='With aria-role none' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-note-expected-blink.txt b/content/test/data/accessibility/aria/aria-note-expected-blink.txt index 4e230d5..f7f65cf 100644 --- a/content/test/data/accessibility/aria/aria-note-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-note-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++note +++note \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-option-expected-blink.txt b/content/test/data/accessibility/aria/aria-option-expected-blink.txt index 5a9a5023..e4ddff75 100644 --- a/content/test/data/accessibility/aria/aria-option-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-option-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea focusable -++genericContainer ignored -++++listBox -++++++listBoxOption focusable name='option 1' selected=false -++++++listBoxOption focusable name='label 2' selected=false +++listBox +++++listBoxOption focusable name='option 1' selected=false +++++listBoxOption focusable name='label 2' selected=false \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-orientation-expected-blink.txt b/content/test/data/accessibility/aria/aria-orientation-expected-blink.txt index 86567fc..e400131 100644 --- a/content/test/data/accessibility/aria/aria-orientation-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-orientation-expected-blink.txt
@@ -1,38 +1,37 @@ rootWebArea -++genericContainer ignored -++++comboBoxGrouping -++++comboBoxGrouping horizontal -++++comboBoxGrouping vertical -++++listBox vertical -++++listBox horizontal -++++listBox vertical -++++menu vertical -++++menu horizontal -++++menu vertical -++++menuBar horizontal -++++menuBar horizontal -++++menuBar vertical -++++radioGroup -++++radioGroup horizontal -++++radioGroup vertical -++++scrollBar vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++scrollBar horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++scrollBar vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++slider horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++slider horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++slider vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++splitter horizontal -++++splitter horizontal -++++splitter vertical -++++tabList horizontal -++++tabList horizontal -++++tabList vertical -++++toolbar horizontal -++++toolbar horizontal -++++toolbar vertical -++++tree vertical -++++tree horizontal -++++tree vertical -++++treeGrid -++++treeGrid horizontal -++++treeGrid vertical +++comboBoxGrouping +++comboBoxGrouping horizontal +++comboBoxGrouping vertical +++listBox vertical +++listBox horizontal +++listBox vertical +++menu vertical +++menu horizontal +++menu vertical +++menuBar horizontal +++menuBar horizontal +++menuBar vertical +++radioGroup +++radioGroup horizontal +++radioGroup vertical +++scrollBar vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++scrollBar horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++scrollBar vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++slider horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++slider horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++slider vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++splitter horizontal +++splitter horizontal +++splitter vertical +++tabList horizontal +++tabList horizontal +++tabList vertical +++toolbar horizontal +++toolbar horizontal +++toolbar vertical +++tree vertical +++tree horizontal +++tree vertical +++treeGrid +++treeGrid horizontal +++treeGrid vertical
diff --git a/content/test/data/accessibility/aria/aria-owns-expected-blink.txt b/content/test/data/accessibility/aria/aria-owns-expected-blink.txt index cc61ff95..580d01f 100644 --- a/content/test/data/accessibility/aria/aria-owns-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-owns-expected-blink.txt
@@ -1,20 +1,17 @@ rootWebArea -++genericContainer ignored -++++list -++++++listItem -++++++++listMarker name='• ' -++++++++genericContainer -++++++++++staticText name='One' -++++++++++++inlineTextBox name='One' -++++++listItem -++++++++listMarker name='• ' -++++++++genericContainer -++++++++++staticText name='Two' -++++++++++++inlineTextBox name='Two' -++++genericContainer ignored -++++genericContainer ignored -++++++listItem -++++++++listMarker name='• ' -++++++++genericContainer -++++++++++staticText name='Three' -++++++++++++inlineTextBox name='Three' +++list +++++listItem +++++++listMarker name='• ' +++++++genericContainer +++++++++staticText name='One' +++++++++++inlineTextBox name='One' +++++listItem +++++++listMarker name='• ' +++++++genericContainer +++++++++staticText name='Two' +++++++++++inlineTextBox name='Two' +++listItem +++++listMarker name='• ' +++++genericContainer +++++++staticText name='Three' +++++++++inlineTextBox name='Three'
diff --git a/content/test/data/accessibility/aria/aria-owns-list-expected-blink.txt b/content/test/data/accessibility/aria/aria-owns-list-expected-blink.txt index b77562b..624735ea 100644 --- a/content/test/data/accessibility/aria/aria-owns-list-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-owns-list-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++list pageSize=(400, 400) -++++++listItem pageSize=(400, 200) -++++++++staticText name='One' -++++++++++inlineTextBox name='One' -++++++listItem pageSize=(400, 200) -++++++++staticText name='Two' -++++++++++inlineTextBox name='Two' +++list pageSize=(400, 400) +++++listItem pageSize=(400, 200) +++++++staticText name='One' +++++++++inlineTextBox name='One' +++++listItem pageSize=(400, 200) +++++++staticText name='Two' +++++++++inlineTextBox name='Two'
diff --git a/content/test/data/accessibility/aria/aria-posinset-expected-blink.txt b/content/test/data/accessibility/aria/aria-posinset-expected-blink.txt index bc3d335..b3a039bb 100644 --- a/content/test/data/accessibility/aria/aria-posinset-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-posinset-expected-blink.txt
@@ -1,50 +1,49 @@ rootWebArea -++genericContainer ignored -++++article setSize=0 posInSet=0 -++++++staticText name='This is an ARIA article 1.' -++++++++inlineTextBox name='This is an ARIA article 1.' -++++article setSize=0 posInSet=0 -++++++staticText name='This is an ARIA article 2.' -++++++++inlineTextBox name='This is an ARIA article 2.' -++++listBox setSize=2 -++++++listBoxOption name='Item 1' setSize=2 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=2 posInSet=2 selected=false -++++listBox setSize=2 -++++++listBoxOption name='Item 1' setSize=2 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=2 posInSet=2 selected=false -++++form -++++++radioButton setSize=4 posInSet=3 checkedState=false -++++++staticText name='1' -++++++++inlineTextBox name='1' -++++++lineBreak name='<newline>' -++++++++inlineTextBox name='<newline>' -++++++radioButton setSize=4 posInSet=4 checkedState=false -++++++staticText name='2' -++++++++inlineTextBox name='2' -++++radioButton setSize=2 posInSet=1 checkedState=false -++++staticText name='Apple' -++++++inlineTextBox name='Apple' +++article setSize=0 posInSet=0 +++++staticText name='This is an ARIA article 1.' +++++++inlineTextBox name='This is an ARIA article 1.' +++article setSize=0 posInSet=0 +++++staticText name='This is an ARIA article 2.' +++++++inlineTextBox name='This is an ARIA article 2.' +++listBox setSize=2 +++++listBoxOption name='Item 1' setSize=2 posInSet=1 selected=false +++++listBoxOption name='Item 2' setSize=2 posInSet=2 selected=false +++listBox setSize=2 +++++listBoxOption name='Item 1' setSize=2 posInSet=1 selected=false +++++listBoxOption name='Item 2' setSize=2 posInSet=2 selected=false +++form +++++radioButton setSize=4 posInSet=3 checkedState=false +++++staticText name='1' +++++++inlineTextBox name='1' ++++lineBreak name='<newline>' ++++++inlineTextBox name='<newline>' -++++radioButton setSize=2 posInSet=2 checkedState=false -++++staticText name='Banana' -++++++inlineTextBox name='Banana' -++++group name='Cake' setSize=0 -++++++legend -++++++++staticText name='Cake' -++++++++++inlineTextBox name='Cake' -++++++radioButton name='Chiffon cakes' setSize=2 posInSet=1 checkedState=true +++++radioButton setSize=4 posInSet=4 checkedState=false +++++staticText name='2' +++++++inlineTextBox name='2' +++radioButton setSize=2 posInSet=1 checkedState=false +++staticText name='Apple' +++++inlineTextBox name='Apple' +++lineBreak name='<newline>' +++++inlineTextBox name='<newline>' +++radioButton setSize=2 posInSet=2 checkedState=false +++staticText name='Banana' +++++inlineTextBox name='Banana' +++group name='Cake' setSize=0 +++++legend +++++++staticText name='Cake' +++++++++inlineTextBox name='Cake' +++++radioButton name='Chiffon cakes' setSize=2 posInSet=1 checkedState=true +++++lineBreak name='<newline>' +++++++inlineTextBox name='<newline>' +++++radioButton name='Chocolate cakes' setSize=2 posInSet=2 checkedState=false +++form +++++paragraph +++++++button name='changedFromRadio' +++++++labelText +++++++++staticText name='red' +++++++++++inlineTextBox name='red' ++++++lineBreak name='<newline>' ++++++++inlineTextBox name='<newline>' -++++++radioButton name='Chocolate cakes' setSize=2 posInSet=2 checkedState=false -++++form -++++++paragraph -++++++++button name='changedFromRadio' -++++++++labelText -++++++++++staticText name='red' -++++++++++++inlineTextBox name='red' -++++++++lineBreak name='<newline>' -++++++++++inlineTextBox name='<newline>' -++++++++radioButton name='blue' setSize=1 posInSet=1 checkedState=false -++++staticText name='Done' -++++++inlineTextBox name='Done' +++++++radioButton name='blue' setSize=1 posInSet=1 checkedState=false +++staticText name='Done' +++++inlineTextBox name='Done'
diff --git a/content/test/data/accessibility/aria/aria-presentation-expected-blink.txt b/content/test/data/accessibility/aria/aria-presentation-expected-blink.txt index feffaa5..0fe92ae 100644 --- a/content/test/data/accessibility/aria/aria-presentation-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-presentation-expected-blink.txt
@@ -1,5 +1,3 @@ rootWebArea -++genericContainer ignored -++++presentational ignored -++++++staticText name='aria-role presentation' -++++++++inlineTextBox name='aria-role presentation' +++staticText name='aria-role presentation' +++++inlineTextBox name='aria-role presentation' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-pressed-expected-blink.txt b/content/test/data/accessibility/aria/aria-pressed-expected-blink.txt index 950b0df3..a714de0 100644 --- a/content/test/data/accessibility/aria/aria-pressed-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-pressed-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++button name='Regular button' -++++toggleButton name='Toggle button unpressed' checkedState=false -++++toggleButton name='Toggle button pressed' checkedState=true -++++toggleButton name='Toggle button mixed' checkedState=mixed +++button name='Regular button' +++toggleButton name='Toggle button unpressed' checkedState=false +++toggleButton name='Toggle button pressed' checkedState=true +++toggleButton name='Toggle button mixed' checkedState=mixed \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-progressbar-expected-blink.txt b/content/test/data/accessibility/aria/aria-progressbar-expected-blink.txt index 357a5a1..47e2e26 100644 --- a/content/test/data/accessibility/aria/aria-progressbar-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-progressbar-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++progressIndicator valueForRange=3.00 minValueForRange=1.00 maxValueForRange=37.00 -++++progressIndicator value='three' valueForRange=3.00 minValueForRange=1.00 maxValueForRange=96.00 -++++progressIndicator minValueForRange=0.00 maxValueForRange=10.00 +++progressIndicator valueForRange=3.00 minValueForRange=1.00 maxValueForRange=37.00 +++progressIndicator value='three' valueForRange=3.00 minValueForRange=1.00 maxValueForRange=96.00 +++progressIndicator minValueForRange=0.00 maxValueForRange=10.00
diff --git a/content/test/data/accessibility/aria/aria-radio-expected-blink.txt b/content/test/data/accessibility/aria/aria-radio-expected-blink.txt index c413cb9..f0df9f5 100644 --- a/content/test/data/accessibility/aria/aria-radio-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-radio-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++radioButton name='Radio1' checkedState=false +++radioButton name='Radio1' checkedState=false \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-radiogroup-expected-blink.txt b/content/test/data/accessibility/aria/aria-radiogroup-expected-blink.txt index 58753ac..988e632b 100644 --- a/content/test/data/accessibility/aria/aria-radiogroup-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-radiogroup-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++radioGroup name='My group' -++++++radioButton name='Radio 1' checkedState=false radioGroupIds=radioButton,radioButton -++++++radioButton name='Radio 2' checkedState=false radioGroupIds=radioButton,radioButton +++radioGroup name='My group' +++++radioButton name='Radio 1' checkedState=false radioGroupIds=radioButton,radioButton +++++radioButton name='Radio 2' checkedState=false radioGroupIds=radioButton,radioButton \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-readonly-expected-blink.txt b/content/test/data/accessibility/aria/aria-readonly-expected-blink.txt index 4ad5d40..2ab448f9 100644 --- a/content/test/data/accessibility/aria/aria-readonly-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-readonly-expected-blink.txt
@@ -1,31 +1,30 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++textField value='Readonly-false input' -++++++++genericContainer -++++++++++staticText name='Readonly-false input' -++++++++++++inlineTextBox name='Readonly-false input' -++++genericContainer -++++++textField value='Readonly-true input' restriction=readOnly -++++++++genericContainer -++++++++++staticText name='Readonly-true input' -++++++++++++inlineTextBox name='Readonly-true input' -++++genericContainer name='Readonly-false plain div' -++++genericContainer name='Readonly-true plain div' -++++genericContainer multiline name='Readonly-false contenteditable div' -++++genericContainer multiline name='Readonly-true contenteditable div' -++++textField name='Readonly-false role unimplemented textbox' -++++textField name='Readonly-true role unimplemented textbox' restriction=readOnly -++++textField name='Readonly-false contenteditable textbox' -++++textField name='Readonly-true contenteditable textbox' restriction=readOnly -++++checkBox name='Readonly checkbox' restriction=readOnly -++++textFieldWithComboBox name='Readonly combobox' restriction=readOnly haspopup=listbox +++genericContainer +++++textField value='Readonly-false input' ++++++genericContainer -++++listBox name='Readonly listbox' restriction=readOnly -++++radioGroup name='Readonly radiogroup' restriction=readOnly -++++slider horizontal name='Readonly slider' restriction=readOnly -++++spinButton name='Readonly spinbutton' restriction=readOnly -++++menuItemCheckBox name='Readonly menuitemcheckbox' restriction=readOnly -++++menuItemRadio name='Readonly menuitemradio' restriction=readOnly -++++searchBox name='Readonly searchbox' restriction=readOnly -++++switch name='Readonly switch' restriction=readOnly +++++++++staticText name='Readonly-false input' +++++++++++inlineTextBox name='Readonly-false input' +++genericContainer +++++textField value='Readonly-true input' restriction=readOnly +++++++genericContainer +++++++++staticText name='Readonly-true input' +++++++++++inlineTextBox name='Readonly-true input' +++genericContainer name='Readonly-false plain div' +++genericContainer name='Readonly-true plain div' +++genericContainer multiline name='Readonly-false contenteditable div' +++genericContainer multiline name='Readonly-true contenteditable div' +++textField name='Readonly-false role unimplemented textbox' +++textField name='Readonly-true role unimplemented textbox' restriction=readOnly +++textField name='Readonly-false contenteditable textbox' +++textField name='Readonly-true contenteditable textbox' restriction=readOnly +++checkBox name='Readonly checkbox' restriction=readOnly +++textFieldWithComboBox name='Readonly combobox' restriction=readOnly haspopup=listbox +++++genericContainer +++listBox name='Readonly listbox' restriction=readOnly +++radioGroup name='Readonly radiogroup' restriction=readOnly +++slider horizontal name='Readonly slider' restriction=readOnly +++spinButton name='Readonly spinbutton' restriction=readOnly +++menuItemCheckBox name='Readonly menuitemcheckbox' restriction=readOnly +++menuItemRadio name='Readonly menuitemradio' restriction=readOnly +++searchBox name='Readonly searchbox' restriction=readOnly +++switch name='Readonly switch' restriction=readOnly \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-region-expected-blink.txt b/content/test/data/accessibility/aria/aria-region-expected-blink.txt index 0738ec3..f94d0c1 100644 --- a/content/test/data/accessibility/aria/aria-region-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-region-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++region -++++++staticText name='This is an ARIA region.' -++++++++inlineTextBox name='This is an ARIA region.' +++region +++++staticText name='This is an ARIA region.' +++++++inlineTextBox name='This is an ARIA region.' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-relevant-expected-blink.txt b/content/test/data/accessibility/aria/aria-relevant-expected-blink.txt index c74ab31..e036d49 100644 --- a/content/test/data/accessibility/aria/aria-relevant-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-relevant-expected-blink.txt
@@ -1,7 +1,6 @@ rootWebArea -++genericContainer ignored -++++log containerLiveRelevant='additions' liveRelevant='additions' -++++log containerLiveRelevant='removals' liveRelevant='removals' -++++log containerLiveRelevant='text' liveRelevant='text' -++++log containerLiveRelevant='all' liveRelevant='all' -++++log containerLiveRelevant='additions text' liveRelevant='additions text' +++log containerLiveRelevant='additions' liveRelevant='additions' +++log containerLiveRelevant='removals' liveRelevant='removals' +++log containerLiveRelevant='text' liveRelevant='text' +++log containerLiveRelevant='all' liveRelevant='all' +++log containerLiveRelevant='additions text' liveRelevant='additions text' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-required-expected-blink.txt b/content/test/data/accessibility/aria/aria-required-expected-blink.txt index 432a8b66..23318c03 100644 --- a/content/test/data/accessibility/aria/aria-required-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-required-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++radioGroup required -++++++radioButton checkedState=false -++++++radioButton checkedState=false +++radioGroup required +++++radioButton checkedState=false +++++radioButton checkedState=false \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-roledescription-expected-blink.txt b/content/test/data/accessibility/aria/aria-roledescription-expected-blink.txt index dbe39ee..2c3604f0 100644 --- a/content/test/data/accessibility/aria/aria-roledescription-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-roledescription-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++button name='Native button' -++++button name='ARIA button' -++++button name='Clicky button' roleDescription='Clicky' +++button name='Native button' +++button name='ARIA button' +++button name='Clicky button' roleDescription='Clicky'
diff --git a/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt b/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt index af208e1e..0bc2afc 100644 --- a/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt
@@ -1,20 +1,19 @@ rootWebArea -++genericContainer ignored -++++grid ariaRowCount=5 -++++++row selected=false -++++++++columnHeader name='cell 2' ariaCellRowIndex=3 selected=false -++++++++++staticText name='cell 2' -++++++++++++inlineTextBox name='cell 2' -++++++++columnHeader name='cell 3' ariaCellRowIndex=3 selected=false -++++++++++staticText name='cell 3' -++++++++++++inlineTextBox name='cell 3' -++++++++columnHeader name='cell 4' ariaCellRowIndex=3 selected=false -++++++++++staticText name='cell 4' -++++++++++++inlineTextBox name='cell 4' -++++++row ariaCellRowIndex=4 selected=false -++++++++cell name='cell 2' ariaCellRowIndex=4 selected=false -++++++++++staticText name='cell 2' -++++++++++++inlineTextBox name='cell 2' -++++++++cell name='cell 3' ariaCellRowIndex=4 selected=false -++++++++++staticText name='cell 3' -++++++++++++inlineTextBox name='cell 3' +++grid ariaRowCount=5 +++++row selected=false +++++++columnHeader name='cell 2' ariaCellRowIndex=3 selected=false +++++++++staticText name='cell 2' +++++++++++inlineTextBox name='cell 2' +++++++columnHeader name='cell 3' ariaCellRowIndex=3 selected=false +++++++++staticText name='cell 3' +++++++++++inlineTextBox name='cell 3' +++++++columnHeader name='cell 4' ariaCellRowIndex=3 selected=false +++++++++staticText name='cell 4' +++++++++++inlineTextBox name='cell 4' +++++row ariaCellRowIndex=4 selected=false +++++++cell name='cell 2' ariaCellRowIndex=4 selected=false +++++++++staticText name='cell 2' +++++++++++inlineTextBox name='cell 2' +++++++cell name='cell 3' ariaCellRowIndex=4 selected=false +++++++++staticText name='cell 3' +++++++++++inlineTextBox name='cell 3'
diff --git a/content/test/data/accessibility/aria/aria-row-expected-blink.txt b/content/test/data/accessibility/aria/aria-row-expected-blink.txt index ffb6c1f..64884c7 100644 --- a/content/test/data/accessibility/aria/aria-row-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-row-expected-blink.txt
@@ -1,24 +1,23 @@ rootWebArea -++genericContainer ignored -++++grid -++++++row selected=false -++++++++columnHeader name='Browser' selected=false -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' selected=false -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row selected=false -++++++++cell name='Chrome' selected=false -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' selected=false -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' -++++++row selected=false -++++++++cell name='Safari' selected=false -++++++++++staticText name='Safari' -++++++++++++inlineTextBox name='Safari' -++++++++cell name='WebKit' selected=false -++++++++++staticText name='WebKit' -++++++++++++inlineTextBox name='WebKit' +++grid +++++row selected=false +++++++columnHeader name='Browser' selected=false +++++++++staticText name='Browser' +++++++++++inlineTextBox name='Browser' +++++++columnHeader name='Rendering Engine' selected=false +++++++++staticText name='Rendering Engine' +++++++++++inlineTextBox name='Rendering Engine' +++++row selected=false +++++++cell name='Chrome' selected=false +++++++++staticText name='Chrome' +++++++++++inlineTextBox name='Chrome' +++++++cell name='Blink' selected=false +++++++++staticText name='Blink' +++++++++++inlineTextBox name='Blink' +++++row selected=false +++++++cell name='Safari' selected=false +++++++++staticText name='Safari' +++++++++++inlineTextBox name='Safari' +++++++cell name='WebKit' selected=false +++++++++staticText name='WebKit' +++++++++++inlineTextBox name='WebKit'
diff --git a/content/test/data/accessibility/aria/aria-rowgroup-expected-blink.txt b/content/test/data/accessibility/aria/aria-rowgroup-expected-blink.txt index f472560..2c82341 100644 --- a/content/test/data/accessibility/aria/aria-rowgroup-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-rowgroup-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++grid -++++++row selected=false -++++++row selected=false +++grid +++++row selected=false +++++row selected=false
diff --git a/content/test/data/accessibility/aria/aria-rowheader-expected-blink.txt b/content/test/data/accessibility/aria/aria-rowheader-expected-blink.txt index c3380727..c0164e2 100644 --- a/content/test/data/accessibility/aria/aria-rowheader-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-rowheader-expected-blink.txt
@@ -1,23 +1,22 @@ rootWebArea -++genericContainer ignored -++++grid -++++++row selected=false -++++++++rowHeader name='Browser' selected=false -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++cell name='Chrome' selected=false -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Safari' selected=false -++++++++++staticText name='Safari' -++++++++++++inlineTextBox name='Safari' -++++++row selected=false -++++++++rowHeader name='Rendering Engine' selected=false -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++++cell name='Blink' selected=false -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' -++++++++cell name='WebKit' selected=false -++++++++++staticText name='WebKit' -++++++++++++inlineTextBox name='WebKit' +++grid +++++row selected=false +++++++rowHeader name='Browser' selected=false +++++++++staticText name='Browser' +++++++++++inlineTextBox name='Browser' +++++++cell name='Chrome' selected=false +++++++++staticText name='Chrome' +++++++++++inlineTextBox name='Chrome' +++++++cell name='Safari' selected=false +++++++++staticText name='Safari' +++++++++++inlineTextBox name='Safari' +++++row selected=false +++++++rowHeader name='Rendering Engine' selected=false +++++++++staticText name='Rendering Engine' +++++++++++inlineTextBox name='Rendering Engine' +++++++cell name='Blink' selected=false +++++++++staticText name='Blink' +++++++++++inlineTextBox name='Blink' +++++++cell name='WebKit' selected=false +++++++++staticText name='WebKit' +++++++++++inlineTextBox name='WebKit'
diff --git a/content/test/data/accessibility/aria/aria-scrollbar-expected-blink.txt b/content/test/data/accessibility/aria/aria-scrollbar-expected-blink.txt index cbfb0e1..5106995 100644 --- a/content/test/data/accessibility/aria/aria-scrollbar-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-scrollbar-expected-blink.txt
@@ -1,4 +1,3 @@ rootWebArea -++genericContainer ignored -++++scrollBar vertical valueForRange=55.00 minValueForRange=0.00 maxValueForRange=100.00 -++++scrollBar horizontal valueForRange=55.00 minValueForRange=0.00 maxValueForRange=100.00 +++scrollBar vertical valueForRange=55.00 minValueForRange=0.00 maxValueForRange=100.00 +++scrollBar horizontal valueForRange=55.00 minValueForRange=0.00 maxValueForRange=100.00
diff --git a/content/test/data/accessibility/aria/aria-search-expected-blink.txt b/content/test/data/accessibility/aria/aria-search-expected-blink.txt index d4bb577..737e496 100644 --- a/content/test/data/accessibility/aria/aria-search-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-search-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++search -++++++staticText name='ARIA role search.' -++++++++inlineTextBox name='ARIA role search.' +++search +++++staticText name='ARIA role search.' +++++++inlineTextBox name='ARIA role search.' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-searchbox-expected-blink.txt b/content/test/data/accessibility/aria/aria-searchbox-expected-blink.txt index 9919ac41..85ad33f7 100644 --- a/content/test/data/accessibility/aria/aria-searchbox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-searchbox-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++searchBox value='ARIA role searchbox.' -++++++staticText name='ARIA role searchbox.' -++++++++inlineTextBox name='ARIA role searchbox.' +++searchBox value='ARIA role searchbox.' +++++staticText name='ARIA role searchbox.' +++++++inlineTextBox name='ARIA role searchbox.'
diff --git a/content/test/data/accessibility/aria/aria-selected-expected-blink.txt b/content/test/data/accessibility/aria/aria-selected-expected-blink.txt index bf5832b..a3d4b02 100644 --- a/content/test/data/accessibility/aria/aria-selected-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-selected-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++listBox -++++++listBoxOption name='1' selected=true -++++++listBoxOption name='2' selected=false +++listBox +++++listBoxOption name='1' selected=true +++++listBoxOption name='2' selected=false \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-separator-expected-blink.txt b/content/test/data/accessibility/aria/aria-separator-expected-blink.txt index 7112681..e3cf25fc 100644 --- a/content/test/data/accessibility/aria/aria-separator-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-separator-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++staticText name='Before' -++++++inlineTextBox name='Before' -++++splitter horizontal -++++splitter horizontal valueForRange=1.00 minValueForRange=1.00 maxValueForRange=3.00 -++++staticText name='After' -++++++inlineTextBox name='After' +++staticText name='Before' +++++inlineTextBox name='Before' +++splitter horizontal +++splitter horizontal valueForRange=1.00 minValueForRange=1.00 maxValueForRange=3.00 +++staticText name='After' +++++inlineTextBox name='After' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt b/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt index b717448..a0eefff 100644 --- a/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt
@@ -1,15 +1,14 @@ rootWebArea -++genericContainer ignored -++++listBox setSize=4 -++++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false -++++++listBoxOption invisible name='Hidden' selected=false -++++++listBoxOption name='Item 3' setSize=4 posInSet=3 selected=false -++++++listBoxOption name='Item 4' setSize=4 posInSet=4 selected=false -++++listBox setSize=5 -++++++listBoxOption name='Item 1' setSize=5 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=5 posInSet=2 selected=false -++++++listBoxOption invisible name='Hidden' selected=false -++++++listBoxOption name='Item 3' setSize=5 posInSet=3 selected=false -++++++listBoxOption name='Item 4' setSize=5 posInSet=4 selected=false -++++++listBoxOption name='Item 5' setSize=5 posInSet=5 selected=false +++listBox setSize=4 +++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false +++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false +++++listBoxOption invisible name='Hidden' selected=false +++++listBoxOption name='Item 3' setSize=4 posInSet=3 selected=false +++++listBoxOption name='Item 4' setSize=4 posInSet=4 selected=false +++listBox setSize=5 +++++listBoxOption name='Item 1' setSize=5 posInSet=1 selected=false +++++listBoxOption name='Item 2' setSize=5 posInSet=2 selected=false +++++listBoxOption invisible name='Hidden' selected=false +++++listBoxOption name='Item 3' setSize=5 posInSet=3 selected=false +++++listBoxOption name='Item 4' setSize=5 posInSet=4 selected=false +++++listBoxOption name='Item 5' setSize=5 posInSet=5 selected=false
diff --git a/content/test/data/accessibility/aria/aria-setsize-expected-blink.txt b/content/test/data/accessibility/aria/aria-setsize-expected-blink.txt index 6268477..4459055 100644 --- a/content/test/data/accessibility/aria/aria-setsize-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-setsize-expected-blink.txt
@@ -1,13 +1,12 @@ rootWebArea -++genericContainer ignored -++++listBox setSize=4 -++++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false -++++++listBoxOption name='Item 3' setSize=4 posInSet=3 selected=false -++++++listBoxOption name='Item 4' setSize=4 posInSet=4 selected=false -++++listBox setSize=5 -++++++listBoxOption name='Item 1' setSize=5 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=5 posInSet=2 selected=false -++++++listBoxOption name='Item 3' setSize=5 posInSet=3 selected=false -++++++listBoxOption name='Item 4' setSize=5 posInSet=4 selected=false -++++++listBoxOption name='Item 5' setSize=5 posInSet=5 selected=false +++listBox setSize=4 +++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false +++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false +++++listBoxOption name='Item 3' setSize=4 posInSet=3 selected=false +++++listBoxOption name='Item 4' setSize=4 posInSet=4 selected=false +++listBox setSize=5 +++++listBoxOption name='Item 1' setSize=5 posInSet=1 selected=false +++++listBoxOption name='Item 2' setSize=5 posInSet=2 selected=false +++++listBoxOption name='Item 3' setSize=5 posInSet=3 selected=false +++++listBoxOption name='Item 4' setSize=5 posInSet=4 selected=false +++++listBoxOption name='Item 5' setSize=5 posInSet=5 selected=false
diff --git a/content/test/data/accessibility/aria/aria-slider-expected-blink.txt b/content/test/data/accessibility/aria/aria-slider-expected-blink.txt index ab0e361e..8e8bd03 100644 --- a/content/test/data/accessibility/aria/aria-slider-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-slider-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++slider horizontal valueForRange=5.00 minValueForRange=1.00 maxValueForRange=10.00 +++slider horizontal valueForRange=5.00 minValueForRange=1.00 maxValueForRange=10.00
diff --git a/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-blink.txt b/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-blink.txt index 660a1288..99675e2 100644 --- a/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-blink.txt
@@ -1,122 +1,121 @@ rootWebArea -++genericContainer ignored -++++grid -++++++row selected=false -++++++++columnHeader name='Alphabet' selected=false -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row selected=false -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row selected=false -++++++++cell name='B' selected=false -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row selected=false -++++++++columnHeader name='Alphabet' selected=false -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row selected=false -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row selected=false -++++++++cell name='B' selected=false -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row selected=false -++++++++columnHeader name='Alphabet' selected=false -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row selected=false -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row selected=false -++++++++cell name='B' selected=false -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row selected=false -++++++++columnHeader name='Alphabet' selected=false -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row selected=false -++++++++cell name='B' selected=false -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++++row selected=false -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++grid -++++++row selected=false -++++++++columnHeader name='Alphabet' selected=false -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row selected=false -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row selected=false -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++grid -++++++row selected=false -++++++++rowHeader name='Alphabet' selected=false -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' selected=false -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row selected=false -++++++++rowHeader name='Alphabet' selected=false -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' selected=false -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row selected=false -++++++++rowHeader name='Alphabet' selected=false -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' selected=false -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row selected=false -++++++++rowHeader name='Alphabet' selected=false -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='B' selected=false -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++grid -++++++row selected=false -++++++++rowHeader name='Alphabet' selected=false -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='A' selected=false -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' +++grid +++++row selected=false +++++++columnHeader name='Alphabet' selected=false +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++row selected=false +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++row selected=false +++++++cell name='B' selected=false +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++grid +++++row selected=false +++++++columnHeader name='Alphabet' selected=false +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++row selected=false +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++row selected=false +++++++cell name='B' selected=false +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++grid +++++row selected=false +++++++columnHeader name='Alphabet' selected=false +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++row selected=false +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++row selected=false +++++++cell name='B' selected=false +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++grid +++++row selected=false +++++++columnHeader name='Alphabet' selected=false +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++row selected=false +++++++cell name='B' selected=false +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++++row selected=false +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++grid +++++row selected=false +++++++columnHeader name='Alphabet' selected=false +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++row selected=false +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++row selected=false +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++grid +++++row selected=false +++++++rowHeader name='Alphabet' selected=false +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++++cell name='B' selected=false +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++grid +++++row selected=false +++++++rowHeader name='Alphabet' selected=false +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++++cell name='B' selected=false +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++grid +++++row selected=false +++++++rowHeader name='Alphabet' selected=false +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++++cell name='B' selected=false +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++grid +++++row selected=false +++++++rowHeader name='Alphabet' selected=false +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++++cell name='B' selected=false +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++grid +++++row selected=false +++++++rowHeader name='Alphabet' selected=false +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++++cell name='A' selected=false +++++++++staticText name='A' +++++++++++inlineTextBox name='A'
diff --git a/content/test/data/accessibility/aria/aria-sort-html-table-expected-blink.txt b/content/test/data/accessibility/aria/aria-sort-html-table-expected-blink.txt index 9c7a14a3..30445e2 100644 --- a/content/test/data/accessibility/aria/aria-sort-html-table-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-sort-html-table-expected-blink.txt
@@ -1,139 +1,137 @@ rootWebArea -++genericContainer ignored -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++table name='Data table' -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++table name='Data table' -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++none ignored -++++++genericContainer +++table name='Data table' +++++row +++++++columnHeader name='Alphabet' ++++++++staticText name='Alphabet' ++++++++++inlineTextBox name='Alphabet' +++++row +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++row +++++++cell name='B' +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++table name='Data table' +++++row +++++++columnHeader name='Alphabet' +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++row +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++row +++++++cell name='B' +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++table name='Data table' +++++row +++++++columnHeader name='Alphabet' +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++row +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++row +++++++cell name='B' +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++table name='Data table' +++++row +++++++columnHeader name='Alphabet' +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++row +++++++cell name='B' +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++++row +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++table name='Data table' +++++row +++++++columnHeader name='Alphabet' +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++row +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++row +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++table name='Data table' +++++row +++++++rowHeader name='Alphabet' +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++++cell name='B' +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++table name='Data table' +++++row +++++++rowHeader name='Alphabet' +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++++cell name='B' +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++table name='Data table' +++++row +++++++rowHeader name='Alphabet' +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++++cell name='B' +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++table name='Data table' +++++row +++++++rowHeader name='Alphabet' +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++++cell name='B' +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++table name='Data table' +++++row +++++++rowHeader name='Alphabet' +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++table name='Data table' +++++row +++++++columnHeader name='Alphabet' +++++++++staticText name='Alphabet' +++++++++++inlineTextBox name='Alphabet' +++++row +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++row +++++++cell name='B' +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++genericContainer +++++staticText name='Alphabet' +++++++inlineTextBox name='Alphabet'
diff --git a/content/test/data/accessibility/aria/aria-status-expected-blink.txt b/content/test/data/accessibility/aria/aria-status-expected-blink.txt index dd2477aa..e60bea6 100644 --- a/content/test/data/accessibility/aria/aria-status-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-status-expected-blink.txt
@@ -1,4 +1,3 @@ rootWebArea -++genericContainer ignored -++++status containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true -++++status containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++status containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true +++status containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-switch-expected-blink.txt b/content/test/data/accessibility/aria/aria-switch-expected-blink.txt index 80524b8..b25b4d3 100644 --- a/content/test/data/accessibility/aria/aria-switch-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-switch-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++switch name='Switch1' checkedState=false -++++switch name='Switch2' checkedState=false -++++switch name='Switch3' checkedState=true -++++switch name='Switch4' checkedState=true +++switch name='Switch1' checkedState=false +++switch name='Switch2' checkedState=false +++switch name='Switch3' checkedState=true +++switch name='Switch4' checkedState=true
diff --git a/content/test/data/accessibility/aria/aria-tab-expected-blink.txt b/content/test/data/accessibility/aria/aria-tab-expected-blink.txt index 53ce736..e8cd121 100644 --- a/content/test/data/accessibility/aria/aria-tab-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tab-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++tabList horizontal setSize=2 -++++++tab name='Tab 1' setSize=2 posInSet=1 selected=false -++++++tab name='Tab 2' setSize=2 posInSet=2 selected=false +++tabList horizontal setSize=2 +++++tab name='Tab 1' setSize=2 posInSet=1 selected=false +++++tab name='Tab 2' setSize=2 posInSet=2 selected=false
diff --git a/content/test/data/accessibility/aria/aria-table-expected-blink.txt b/content/test/data/accessibility/aria/aria-table-expected-blink.txt index 364cbe9e..ee500c52a 100644 --- a/content/test/data/accessibility/aria/aria-table-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-table-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++table -++++++row selected=false -++++++++columnHeader name='Browser' selected=false -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' selected=false -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row selected=false -++++++++cell name='Chrome' selected=false -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' selected=false -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' +++table +++++row selected=false +++++++columnHeader name='Browser' selected=false +++++++++staticText name='Browser' +++++++++++inlineTextBox name='Browser' +++++++columnHeader name='Rendering Engine' selected=false +++++++++staticText name='Rendering Engine' +++++++++++inlineTextBox name='Rendering Engine' +++++row selected=false +++++++cell name='Chrome' selected=false +++++++++staticText name='Chrome' +++++++++++inlineTextBox name='Chrome' +++++++cell name='Blink' selected=false +++++++++staticText name='Blink' +++++++++++inlineTextBox name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-tablist-expected-blink.txt b/content/test/data/accessibility/aria/aria-tablist-expected-blink.txt index afb12b73..26c4988 100644 --- a/content/test/data/accessibility/aria/aria-tablist-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tablist-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++tabList horizontal -++++++tab name='Tab 1' selected=false -++++++tab name='Tab 2' selected=false +++tabList horizontal +++++tab name='Tab 1' selected=false +++++tab name='Tab 2' selected=false \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-tabpanel-expected-blink.txt b/content/test/data/accessibility/aria/aria-tabpanel-expected-blink.txt index e0046b1d..e4702b3bf 100644 --- a/content/test/data/accessibility/aria/aria-tabpanel-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tabpanel-expected-blink.txt
@@ -1,11 +1,10 @@ rootWebArea -++genericContainer ignored -++++tabPanel -++++++tab name='Item' selected=false -++++++++heading name='Item' hierarchicalLevel=3 -++++++++++staticText name='Item' -++++++++++++inlineTextBox name='Item' -++++++tab name='Prices' selected=false -++++++++heading name='Prices' hierarchicalLevel=3 -++++++++++staticText name='Prices' -++++++++++++inlineTextBox name='Prices' +++tabPanel +++++tab name='Item' selected=false +++++++heading name='Item' hierarchicalLevel=3 +++++++++staticText name='Item' +++++++++++inlineTextBox name='Item' +++++tab name='Prices' selected=false +++++++heading name='Prices' hierarchicalLevel=3 +++++++++staticText name='Prices' +++++++++++inlineTextBox name='Prices' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-term-expected-blink.txt b/content/test/data/accessibility/aria/aria-term-expected-blink.txt index d4c2d302..5ff8c71 100644 --- a/content/test/data/accessibility/aria/aria-term-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-term-expected-blink.txt
@@ -1,15 +1,14 @@ rootWebArea -++genericContainer ignored -++++list -++++++term -++++++++staticText name='Term1' -++++++++++inlineTextBox name='Term1' -++++++definition -++++++++staticText name='Definition1' -++++++++++inlineTextBox name='Definition1' -++++++term -++++++++staticText name='Term2' -++++++++++inlineTextBox name='Term2' -++++++definition -++++++++staticText name='Definition2' -++++++++++inlineTextBox name='Definition2' +++list +++++term +++++++staticText name='Term1' +++++++++inlineTextBox name='Term1' +++++definition +++++++staticText name='Definition1' +++++++++inlineTextBox name='Definition1' +++++term +++++++staticText name='Term2' +++++++++inlineTextBox name='Term2' +++++definition +++++++staticText name='Definition2' +++++++++inlineTextBox name='Definition2' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-textbox-expected-blink.txt b/content/test/data/accessibility/aria/aria-textbox-expected-blink.txt index eabc414..fced2723 100644 --- a/content/test/data/accessibility/aria/aria-textbox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-textbox-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++textField value='TextBox1' -++++++staticText name='TextBox1' -++++++++inlineTextBox name='TextBox1' -++++textField multiline value='TextBox2' -++++++staticText name='TextBox2' -++++++++inlineTextBox name='TextBox2' +++textField value='TextBox1' +++++staticText name='TextBox1' +++++++inlineTextBox name='TextBox1' +++textField multiline value='TextBox2' +++++staticText name='TextBox2' +++++++inlineTextBox name='TextBox2'
diff --git a/content/test/data/accessibility/aria/aria-timer-expected-blink.txt b/content/test/data/accessibility/aria/aria-timer-expected-blink.txt index 82f043fe..554b469 100644 --- a/content/test/data/accessibility/aria/aria-timer-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-timer-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++timer -++++++staticText name='This test is for aria-role = timer' -++++++++inlineTextBox name='This test is for aria-role = timer' +++timer +++++staticText name='This test is for aria-role = timer' +++++++inlineTextBox name='This test is for aria-role = timer' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-togglebutton-expected-blink.txt b/content/test/data/accessibility/aria/aria-togglebutton-expected-blink.txt index 2cd13a91..0d60db3 100644 --- a/content/test/data/accessibility/aria/aria-togglebutton-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-togglebutton-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++button name='Regular button' -++++toggleButton name='Toggle button' checkedState=false -++++toggleButton name='Toggle button' checkedState=true -++++toggleButton name='Toggle button' checkedState=mixed +++button name='Regular button' +++toggleButton name='Toggle button' checkedState=false +++toggleButton name='Toggle button' checkedState=true +++toggleButton name='Toggle button' checkedState=mixed
diff --git a/content/test/data/accessibility/aria/aria-toolbar-expected-blink.txt b/content/test/data/accessibility/aria/aria-toolbar-expected-blink.txt index 98387db..e2383e2 100644 --- a/content/test/data/accessibility/aria/aria-toolbar-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-toolbar-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++toolbar horizontal -++++++staticText name='A toolbar' -++++++++inlineTextBox name='A toolbar' +++toolbar horizontal +++++staticText name='A toolbar' +++++++inlineTextBox name='A toolbar' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-tooltip-expected-blink.txt b/content/test/data/accessibility/aria/aria-tooltip-expected-blink.txt index f539e1f..fa9261c 100644 --- a/content/test/data/accessibility/aria/aria-tooltip-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tooltip-expected-blink.txt
@@ -1,7 +1,6 @@ rootWebArea -++genericContainer ignored -++++textField description='Your username should be your email id' descriptionFrom=relatedElement -++++++genericContainer -++++tooltip name='Your username should be your email id' -++++++staticText name='Your username should be your email id' -++++++++inlineTextBox name='Your username should be your email id' +++textField description='Your username should be your email id' descriptionFrom=relatedElement +++++genericContainer +++tooltip name='Your username should be your email id' +++++staticText name='Your username should be your email id' +++++++inlineTextBox name='Your username should be your email id' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-tree-expected-blink.txt b/content/test/data/accessibility/aria/aria-tree-expected-blink.txt index 20b3b90..df2a948d 100644 --- a/content/test/data/accessibility/aria/aria-tree-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tree-expected-blink.txt
@@ -1,29 +1,28 @@ rootWebArea -++genericContainer ignored -++++tree setSize=2 -++++++treeItem name='Animals' hierarchicalLevel=1 setSize=2 posInSet=1 checkedState=mixed selected=false -++++++++link name='Animals' -++++++++++staticText name='Animals' -++++++++++++inlineTextBox name='Animals' -++++++++group setSize=2 -++++++++++treeItem name='Domesticated' hierarchicalLevel=2 setSize=2 posInSet=1 selected=false -++++++++++++link name='Domesticated' -++++++++++++++staticText name='Domesticated' -++++++++++++++++inlineTextBox name='Domesticated' -++++++++++++group setSize=2 -++++++++++++++treeItem name='Dog' hierarchicalLevel=3 setSize=2 posInSet=1 checkedState=true selected=false -++++++++++++++++link name='Dog' -++++++++++++++++++staticText name='Dog' -++++++++++++++++++++inlineTextBox name='Dog' -++++++++++++++treeItem name='Cat' hierarchicalLevel=3 setSize=2 posInSet=2 checkedState=false selected=false -++++++++++++++++link name='Cat' -++++++++++++++++++staticText name='Cat' -++++++++++++++++++++inlineTextBox name='Cat' -++++++++++treeItem name='Wild' hierarchicalLevel=2 setSize=2 posInSet=2 selected=false -++++++++++++link name='Wild' -++++++++++++++staticText name='Wild' -++++++++++++++++inlineTextBox name='Wild' -++++++treeItem name='Plants' hierarchicalLevel=1 setSize=2 posInSet=2 selected=false -++++++++link name='Plants' -++++++++++staticText name='Plants' -++++++++++++inlineTextBox name='Plants' +++tree setSize=2 +++++treeItem name='Animals' hierarchicalLevel=1 setSize=2 posInSet=1 checkedState=mixed selected=false +++++++link name='Animals' +++++++++staticText name='Animals' +++++++++++inlineTextBox name='Animals' +++++++group setSize=2 +++++++++treeItem name='Domesticated' hierarchicalLevel=2 setSize=2 posInSet=1 selected=false +++++++++++link name='Domesticated' +++++++++++++staticText name='Domesticated' +++++++++++++++inlineTextBox name='Domesticated' +++++++++++group setSize=2 +++++++++++++treeItem name='Dog' hierarchicalLevel=3 setSize=2 posInSet=1 checkedState=true selected=false +++++++++++++++link name='Dog' +++++++++++++++++staticText name='Dog' +++++++++++++++++++inlineTextBox name='Dog' +++++++++++++treeItem name='Cat' hierarchicalLevel=3 setSize=2 posInSet=2 checkedState=false selected=false +++++++++++++++link name='Cat' +++++++++++++++++staticText name='Cat' +++++++++++++++++++inlineTextBox name='Cat' +++++++++treeItem name='Wild' hierarchicalLevel=2 setSize=2 posInSet=2 selected=false +++++++++++link name='Wild' +++++++++++++staticText name='Wild' +++++++++++++++inlineTextBox name='Wild' +++++treeItem name='Plants' hierarchicalLevel=1 setSize=2 posInSet=2 selected=false +++++++link name='Plants' +++++++++staticText name='Plants' +++++++++++inlineTextBox name='Plants'
diff --git a/content/test/data/accessibility/aria/aria-treegrid-expected-blink.txt b/content/test/data/accessibility/aria/aria-treegrid-expected-blink.txt index 4b446cf..5b41a71 100644 --- a/content/test/data/accessibility/aria/aria-treegrid-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-treegrid-expected-blink.txt
@@ -1,16 +1,15 @@ rootWebArea -++genericContainer ignored -++++treeGrid -++++++row hierarchicalLevel=1 selected=false -++++++++cell name='Cell at level 1' selected=false -++++++++++staticText name='Cell at level 1' -++++++++++++inlineTextBox name='Cell at level 1' -++++++row hierarchicalLevel=2 selected=false -++++++++cell name='Cell at level 2' selected=false -++++++++++staticText name='Cell at level 2' -++++++++++++inlineTextBox name='Cell at level 2' -++++treeGrid -++++++row hierarchicalLevel=1 selected=false -++++++++cell name='Cell at level 1' selected=false -++++++++++staticText name='Cell at level 1' -++++++++++++inlineTextBox name='Cell at level 1' +++treeGrid +++++row hierarchicalLevel=1 selected=false +++++++cell name='Cell at level 1' selected=false +++++++++staticText name='Cell at level 1' +++++++++++inlineTextBox name='Cell at level 1' +++++row hierarchicalLevel=2 selected=false +++++++cell name='Cell at level 2' selected=false +++++++++staticText name='Cell at level 2' +++++++++++inlineTextBox name='Cell at level 2' +++treeGrid +++++row hierarchicalLevel=1 selected=false +++++++cell name='Cell at level 1' selected=false +++++++++staticText name='Cell at level 1' +++++++++++inlineTextBox name='Cell at level 1'
diff --git a/content/test/data/accessibility/aria/aria-undefined-expected-blink.txt b/content/test/data/accessibility/aria/aria-undefined-expected-blink.txt index e5e95b1..19ddc0c6 100644 --- a/content/test/data/accessibility/aria/aria-undefined-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-undefined-expected-blink.txt
@@ -1,26 +1,25 @@ rootWebArea -++genericContainer ignored -++++genericContainer name='Atomic undefined' -++++textField name='Autocomplete undefined' -++++genericContainer name='Busy undefined' -++++treeItem name='Checked undefined' selected=false -++++genericContainer name='Current undefined' -++++genericContainer name='Disabled undefined' -++++genericContainer name='Dropeffect undefined' -++++treeItem name='Expanded undefined' selected=false -++++genericContainer name='Grabbed undefined' -++++button name='Haspopup undefined' -++++genericContainer name='Invalid undefined' -++++genericContainer name='Live undefined' -++++dialog name='Modal undefined' modal=false -++++textField name='Multiline undefined' -++++grid name='Multiselectable undefined' -++++scrollBar vertical name='Orientation undefined' -++++button name='Pressed undefined' -++++textField name='Readonly undefined' -++++genericContainer name='Relevant undefined' -++++textField name='Required undefined' -++++tree multiselectable vertical -++++++treeItem name='Selected undefined' selected=false -++++columnHeader name='Sort undefined' selected=false -++++genericContainer name='Hidden undefined, display block' +++genericContainer name='Atomic undefined' +++textField name='Autocomplete undefined' +++genericContainer name='Busy undefined' +++treeItem name='Checked undefined' selected=false +++genericContainer name='Current undefined' +++genericContainer name='Disabled undefined' +++genericContainer name='Dropeffect undefined' +++treeItem name='Expanded undefined' selected=false +++genericContainer name='Grabbed undefined' +++button name='Haspopup undefined' +++genericContainer name='Invalid undefined' +++genericContainer name='Live undefined' +++dialog name='Modal undefined' modal=false +++textField name='Multiline undefined' +++grid name='Multiselectable undefined' +++scrollBar vertical name='Orientation undefined' +++button name='Pressed undefined' +++textField name='Readonly undefined' +++genericContainer name='Relevant undefined' +++textField name='Required undefined' +++tree multiselectable vertical +++++treeItem name='Selected undefined' selected=false +++columnHeader name='Sort undefined' selected=false +++genericContainer name='Hidden undefined, display block'
diff --git a/content/test/data/accessibility/aria/aria-undefined-literal-expected-blink.txt b/content/test/data/accessibility/aria/aria-undefined-literal-expected-blink.txt index 75e98ae..2f1b1dc 100644 --- a/content/test/data/accessibility/aria/aria-undefined-literal-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-undefined-literal-expected-blink.txt
@@ -1,26 +1,25 @@ rootWebArea -++genericContainer ignored -++++genericContainer name='Atomic undefined' -++++textField name='Autocomplete undefined' -++++genericContainer name='Busy undefined' -++++treeItem name='Checked undefined' selected=false -++++genericContainer name='Current undefined' -++++genericContainer name='Disabled undefined' -++++genericContainer name='Dropeffect undefined' dropeffect=none -++++treeItem name='Expanded undefined' selected=false -++++genericContainer name='Grabbed undefined' -++++button name='Haspopup undefined' -++++genericContainer name='Invalid undefined' -++++genericContainer name='Live undefined' -++++dialog name='Modal undefined' modal=false -++++textField name='Multiline undefined' -++++grid name='Multiselectable undefined' -++++scrollBar vertical name='Orientation undefined' -++++button name='Pressed undefined' -++++textField name='Readonly undefined' -++++genericContainer name='Relevant undefined' -++++textField name='Required undefined' -++++tree multiselectable vertical -++++++treeItem name='Selected undefined' selected=false -++++columnHeader name='Sort undefined' selected=false -++++genericContainer name='Hidden undefined, display block' +++genericContainer name='Atomic undefined' +++textField name='Autocomplete undefined' +++genericContainer name='Busy undefined' +++treeItem name='Checked undefined' selected=false +++genericContainer name='Current undefined' +++genericContainer name='Disabled undefined' +++genericContainer name='Dropeffect undefined' dropeffect=none +++treeItem name='Expanded undefined' selected=false +++genericContainer name='Grabbed undefined' +++button name='Haspopup undefined' +++genericContainer name='Invalid undefined' +++genericContainer name='Live undefined' +++dialog name='Modal undefined' modal=false +++textField name='Multiline undefined' +++grid name='Multiselectable undefined' +++scrollBar vertical name='Orientation undefined' +++button name='Pressed undefined' +++textField name='Readonly undefined' +++genericContainer name='Relevant undefined' +++textField name='Required undefined' +++tree multiselectable vertical +++++treeItem name='Selected undefined' selected=false +++columnHeader name='Sort undefined' selected=false +++genericContainer name='Hidden undefined, display block'
diff --git a/content/test/data/accessibility/aria/aria-valuenow-expected-blink.txt b/content/test/data/accessibility/aria/aria-valuenow-expected-blink.txt index 0449dff..8c9f1d4 100644 --- a/content/test/data/accessibility/aria/aria-valuenow-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-valuenow-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++progressIndicator valueForRange=3.00 +++progressIndicator valueForRange=3.00 \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-valuetext-expected-blink.txt b/content/test/data/accessibility/aria/aria-valuetext-expected-blink.txt index 0410238..4c9023b 100644 --- a/content/test/data/accessibility/aria/aria-valuetext-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-valuetext-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++progressIndicator value='three' valueForRange=3.00 minValueForRange=1.00 maxValueForRange=96.00 +++progressIndicator value='three' valueForRange=3.00 minValueForRange=1.00 maxValueForRange=96.00
diff --git a/content/test/data/accessibility/aria/aria1.1-combobox-expected-blink.txt b/content/test/data/accessibility/aria/aria1.1-combobox-expected-blink.txt index 3e55204..c45fbe6b 100644 --- a/content/test/data/accessibility/aria/aria1.1-combobox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria1.1-combobox-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++staticText name='State' -++++++++inlineTextBox name='State' -++++comboBoxGrouping name='State' haspopup=listbox -++++++textField activedescendantId=listBoxOption controlsIds=listBox -++++++++genericContainer -++++listBox -++++++listBoxOption name='Alabama' selected=false -++++++listBoxOption name='Alaska' selected=true -++++comboBoxGrouping name='State' haspopup=listbox -++++++textField activedescendantId=listBoxOption controlsIds=listBox -++++++++genericContainer -++++listBox -++++++listBoxOption name='Alabama' selected=false -++++++listBoxOption name='Alaska' selected=false +++genericContainer +++++staticText name='State' +++++++inlineTextBox name='State' +++comboBoxGrouping name='State' haspopup=listbox +++++textField activedescendantId=listBoxOption controlsIds=listBox +++++++genericContainer +++listBox +++++listBoxOption name='Alabama' selected=false +++++listBoxOption name='Alaska' selected=true +++comboBoxGrouping name='State' haspopup=listbox +++++textField activedescendantId=listBoxOption controlsIds=listBox +++++++genericContainer +++listBox +++++listBoxOption name='Alabama' selected=false +++++listBoxOption name='Alaska' selected=false \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/dpub-roles-expected-blink.txt b/content/test/data/accessibility/aria/dpub-roles-expected-blink.txt index 3deca6e..0791432 100644 --- a/content/test/data/accessibility/aria/dpub-roles-expected-blink.txt +++ b/content/test/data/accessibility/aria/dpub-roles-expected-blink.txt
@@ -1,41 +1,40 @@ rootWebArea -++genericContainer ignored -++++docAbstract name='doc-abstract' -++++docAcknowledgments name='doc-acknowledgments' -++++docAfterword name='doc-afterword' -++++docAppendix name='doc-appendix' -++++docBackLink name='doc-backlink' -++++docBiblioEntry name='doc-biblioentry' -++++docBibliography name='doc-bibliography' -++++docBiblioRef name='doc-biblioref' -++++docChapter name='doc-chapter' -++++docColophon name='doc-colophon' -++++docConclusion name='doc-conclusion' -++++docCover name='doc-cover' -++++docCredit name='doc-credit' -++++docCredits name='doc-credits' -++++docDedication name='doc-dedication' -++++docEndnote name='doc-endnote' -++++docEndnotes name='doc-endnotes' -++++docEpigraph name='doc-epigraph' -++++docEpilogue name='doc-epilogue' -++++docErrata name='doc-errata' -++++docExample name='doc-example' -++++docFootnote name='doc-footnote' -++++docForeword name='doc-foreword' -++++docGlossary name='doc-glossary' -++++docGlossref name='doc-glossref' -++++docIndex name='doc-index' -++++docIntroduction name='doc-introduction' -++++docNoteRef name='doc-noteref' -++++docNotice name='doc-notice' -++++docPageBreak name='doc-pagebreak' -++++docPageList name='doc-pagelist' -++++docPart name='doc-part' -++++docPreface name='doc-preface' -++++docPrologue name='doc-prologue' -++++docPullquote name='doc-pullquote' -++++docQna name='doc-qna' -++++docSubtitle name='doc-subtitle' -++++docTip name='doc-tip' -++++docToc name='doc-toc' +++docAbstract name='doc-abstract' +++docAcknowledgments name='doc-acknowledgments' +++docAfterword name='doc-afterword' +++docAppendix name='doc-appendix' +++docBackLink name='doc-backlink' +++docBiblioEntry name='doc-biblioentry' +++docBibliography name='doc-bibliography' +++docBiblioRef name='doc-biblioref' +++docChapter name='doc-chapter' +++docColophon name='doc-colophon' +++docConclusion name='doc-conclusion' +++docCover name='doc-cover' +++docCredit name='doc-credit' +++docCredits name='doc-credits' +++docDedication name='doc-dedication' +++docEndnote name='doc-endnote' +++docEndnotes name='doc-endnotes' +++docEpigraph name='doc-epigraph' +++docEpilogue name='doc-epilogue' +++docErrata name='doc-errata' +++docExample name='doc-example' +++docFootnote name='doc-footnote' +++docForeword name='doc-foreword' +++docGlossary name='doc-glossary' +++docGlossref name='doc-glossref' +++docIndex name='doc-index' +++docIntroduction name='doc-introduction' +++docNoteRef name='doc-noteref' +++docNotice name='doc-notice' +++docPageBreak name='doc-pagebreak' +++docPageList name='doc-pagelist' +++docPart name='doc-part' +++docPreface name='doc-preface' +++docPrologue name='doc-prologue' +++docPullquote name='doc-pullquote' +++docQna name='doc-qna' +++docSubtitle name='doc-subtitle' +++docTip name='doc-tip' +++docToc name='doc-toc' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/graphics-roles-expected-blink.txt b/content/test/data/accessibility/aria/graphics-roles-expected-blink.txt index 79187b32..51311ae 100644 --- a/content/test/data/accessibility/aria/graphics-roles-expected-blink.txt +++ b/content/test/data/accessibility/aria/graphics-roles-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++graphicsDocument name='graphics-document' -++++graphicsObject name='graphics-object' -++++graphicsSymbol name='graphics-symbol' +++graphicsDocument name='graphics-document' +++graphicsObject name='graphics-object' +++graphicsSymbol name='graphics-symbol'
diff --git a/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-blink.txt b/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-blink.txt index 152b30b..c0e07c4 100644 --- a/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-blink.txt +++ b/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++textField name='aria-placeholder1' -++++++genericContainer -++++textField name='placeholder2' -++++++genericContainer -++++textField name='aria-label3' placeholder='placeholder3' -++++++genericContainer -++++textField name='aria-label4' placeholder='aria-placeholder4' -++++++genericContainer -++++textField description='aria-description5' name='aria-label5' placeholder='placeholder5' descriptionFrom=relatedElement -++++++genericContainer +++textField name='aria-placeholder1' ++++genericContainer -++++++staticText name='aria-description5' -++++++++inlineTextBox name='aria-description5' -++++textField description='title6' name='aria-placeholder6' descriptionFrom=attribute -++++++genericContainer +++textField name='placeholder2' +++++genericContainer +++textField name='aria-label3' placeholder='placeholder3' +++++genericContainer +++textField name='aria-label4' placeholder='aria-placeholder4' +++++genericContainer +++textField description='aria-description5' name='aria-label5' placeholder='placeholder5' descriptionFrom=relatedElement +++++genericContainer +++genericContainer +++++staticText name='aria-description5' +++++++inlineTextBox name='aria-description5' +++textField description='title6' name='aria-placeholder6' descriptionFrom=attribute +++++genericContainer \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/label-with-selected-option-expected-blink.txt b/content/test/data/accessibility/aria/label-with-selected-option-expected-blink.txt index 46789bc..6af34113 100644 --- a/content/test/data/accessibility/aria/label-with-selected-option-expected-blink.txt +++ b/content/test/data/accessibility/aria/label-with-selected-option-expected-blink.txt
@@ -1,37 +1,9 @@ rootWebArea -++genericContainer ignored -++++genericContainer ignored -++++++checkBox name='Test 1: Flash the screen 2 times.' checkedState=false -++++++listBox ignored -++++++++listBoxOption ignored name='1' selected=false -++++++++listBoxOption ignored name='2' selected=true -++++++++listBoxOption ignored name='3' selected=false -++++genericContainer ignored -++++++checkBox name='Test 2: Flash the screen 2 times.' checkedState=false -++++++comboBoxGrouping ignored -++++++++textField -++++++++listBox ignored -++++++++++listBoxOption ignored name='1' selected=false -++++++++++listBoxOption ignored name='2' selected=true -++++++++++listBoxOption ignored name='3' selected=false -++++genericContainer ignored -++++++checkBox name='Test 3: Flash the screen two times.' checkedState=false -++++++listBox ignored -++++++++listBoxOption ignored name='1' selected=false -++++++++listBoxOption ignored name='two' selected=true -++++++++listBoxOption ignored name='3' selected=false -++++genericContainer ignored -++++++checkBox name='Test 4: Flash the screen two times.' checkedState=false -++++++comboBoxGrouping ignored -++++++++textField -++++++++listBox ignored -++++++++++listBoxOption ignored name='1' selected=false -++++++++++listBoxOption ignored name='two' selected=true -++++++++++listBoxOption ignored name='3' selected=false -++++genericContainer ignored -++++++checkBox name='Test 5: Flash the screen two times.' checkedState=false -++++++comboBoxMenuButton name='two' -++++++++listBox ignored -++++++++++listBoxOption ignored name='1' selected=false -++++++++++listBoxOption ignored name='two' selected=true -++++++++++listBoxOption ignored name='3' selected=false +++checkBox name='Test 1: Flash the screen 2 times.' checkedState=false +++checkBox name='Test 2: Flash the screen 2 times.' checkedState=false +++textField +++checkBox name='Test 3: Flash the screen two times.' checkedState=false +++checkBox name='Test 4: Flash the screen two times.' checkedState=false +++textField +++checkBox name='Test 5: Flash the screen two times.' checkedState=false +++comboBoxMenuButton name='two'
diff --git a/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt b/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt index 44a5916..88f459b 100644 --- a/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt +++ b/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt
@@ -1,36 +1,35 @@ rootWebArea -++genericContainer ignored -++++grid ariaColumnCount=5 ariaRowCount=4 tableRowCount=3 tableColumnCount=3 -++++++row selected=false -++++++++columnHeader name='Month' ariaCellColumnIndex=2 ariaCellRowIndex=2 selected=false -++++++++++staticText name='Month' -++++++++++++inlineTextBox name='Month' -++++++++columnHeader name='Day' ariaCellColumnIndex=3 ariaCellRowIndex=2 selected=false -++++++++++staticText name='Day' -++++++++++++inlineTextBox name='Day' -++++++++columnHeader name='Weather' ariaCellColumnIndex=5 ariaCellRowIndex=2 selected=false -++++++++++staticText name='Weather' -++++++++++++inlineTextBox name='Weather' -++++++row selected=false -++++++++cell name='January' ariaCellColumnIndex=2 ariaCellRowIndex=3 selected=false -++++++++++staticText name='January' -++++++++++++inlineTextBox name='January' -++++++++cell name='01' ariaCellColumnIndex=3 ariaCellRowIndex=3 selected=false -++++++++++staticText name='01' -++++++++++++inlineTextBox name='01' -++++++++cell name='Sunny' ariaCellColumnIndex=5 ariaCellRowIndex=3 selected=false -++++++++++staticText name='Sunny' -++++++++++++inlineTextBox name='Sunny' -++++++row selected=false -++++++++cell name='January' ariaCellColumnIndex=2 ariaCellRowIndex=4 selected=false -++++++++++staticText name='January' -++++++++++++inlineTextBox name='January' -++++++++cell name='02' ariaCellColumnIndex=3 ariaCellRowIndex=4 selected=false -++++++++++staticText name='02' -++++++++++++inlineTextBox name='02' -++++++++cell name='Rainy' ariaCellColumnIndex=5 ariaCellRowIndex=4 selected=false -++++++++++staticText name='Rainy' -++++++++++++inlineTextBox name='Rainy' -++++paragraph -++++++staticText name='done' -++++++++inlineTextBox name='done' +++grid ariaColumnCount=5 ariaRowCount=4 tableRowCount=3 tableColumnCount=3 +++++row selected=false +++++++columnHeader name='Month' ariaCellColumnIndex=2 ariaCellRowIndex=2 selected=false +++++++++staticText name='Month' +++++++++++inlineTextBox name='Month' +++++++columnHeader name='Day' ariaCellColumnIndex=3 ariaCellRowIndex=2 selected=false +++++++++staticText name='Day' +++++++++++inlineTextBox name='Day' +++++++columnHeader name='Weather' ariaCellColumnIndex=5 ariaCellRowIndex=2 selected=false +++++++++staticText name='Weather' +++++++++++inlineTextBox name='Weather' +++++row selected=false +++++++cell name='January' ariaCellColumnIndex=2 ariaCellRowIndex=3 selected=false +++++++++staticText name='January' +++++++++++inlineTextBox name='January' +++++++cell name='01' ariaCellColumnIndex=3 ariaCellRowIndex=3 selected=false +++++++++staticText name='01' +++++++++++inlineTextBox name='01' +++++++cell name='Sunny' ariaCellColumnIndex=5 ariaCellRowIndex=3 selected=false +++++++++staticText name='Sunny' +++++++++++inlineTextBox name='Sunny' +++++row selected=false +++++++cell name='January' ariaCellColumnIndex=2 ariaCellRowIndex=4 selected=false +++++++++staticText name='January' +++++++++++inlineTextBox name='January' +++++++cell name='02' ariaCellColumnIndex=3 ariaCellRowIndex=4 selected=false +++++++++staticText name='02' +++++++++++inlineTextBox name='02' +++++++cell name='Rainy' ariaCellColumnIndex=5 ariaCellRowIndex=4 selected=false +++++++++staticText name='Rainy' +++++++++++inlineTextBox name='Rainy' +++paragraph +++++staticText name='done' +++++++inlineTextBox name='done'
diff --git a/content/test/data/accessibility/css/color-expected-blink.txt b/content/test/data/accessibility/css/color-expected-blink.txt index 4ec571f..2071684 100644 --- a/content/test/data/accessibility/css/color-expected-blink.txt +++ b/content/test/data/accessibility/css/color-expected-blink.txt
@@ -1,16 +1,15 @@ rootWebArea backgroundColor=-1 color=-16777216 -++genericContainer ignored backgroundColor=-1 color=-16777216 -++++paragraph backgroundColor=-16776961 color=-65536 -++++++staticText name='Red on blue.' backgroundColor=-16776961 color=-65536 -++++++++inlineTextBox name='Red on blue.' color=-16777216 -++++genericContainer multiline value='Default. Blue background. Green text.' backgroundColor=-1 color=-16777216 -++++++staticText name='Default.' backgroundColor=-1 color=-16777216 -++++++++inlineTextBox name='Default.' color=-16777216 -++++++staticText name=' ' backgroundColor=-1 color=-16777216 -++++++++inlineTextBox name=' ' color=-16777216 -++++++staticText name='Blue background.' backgroundColor=-16776961 color=-16777216 -++++++++inlineTextBox name='Blue background.' color=-16777216 -++++++staticText name=' ' backgroundColor=-1 color=-16777216 -++++++++inlineTextBox name=' ' color=-16777216 -++++++staticText name='Green text.' backgroundColor=-1 color=-16711936 -++++++++inlineTextBox name='Green text.' color=-16777216 +++paragraph backgroundColor=-16776961 color=-65536 +++++staticText name='Red on blue.' backgroundColor=-16776961 color=-65536 +++++++inlineTextBox name='Red on blue.' color=-16777216 +++genericContainer multiline value='Default. Blue background. Green text.' backgroundColor=-1 color=-16777216 +++++staticText name='Default.' backgroundColor=-1 color=-16777216 +++++++inlineTextBox name='Default.' color=-16777216 +++++staticText name=' ' backgroundColor=-1 color=-16777216 +++++++inlineTextBox name=' ' color=-16777216 +++++staticText name='Blue background.' backgroundColor=-16776961 color=-16777216 +++++++inlineTextBox name='Blue background.' color=-16777216 +++++staticText name=' ' backgroundColor=-1 color=-16777216 +++++++inlineTextBox name=' ' color=-16777216 +++++staticText name='Green text.' backgroundColor=-1 color=-16711936 +++++++inlineTextBox name='Green text.' color=-16777216
diff --git a/content/test/data/accessibility/css/display-to-block-expected-blink.txt b/content/test/data/accessibility/css/display-to-block-expected-blink.txt index 187d11c..30467267 100644 --- a/content/test/data/accessibility/css/display-to-block-expected-blink.txt +++ b/content/test/data/accessibility/css/display-to-block-expected-blink.txt
@@ -1,9 +1,6 @@ rootWebArea -++genericContainer ignored -++++genericContainer ignored -++++++genericContainer -++++++++staticText name='Cats' -++++++++++inlineTextBox name='Cats' -++++++genericContainer -++++++++checkBox name='done' checkedState=false -++++++genericContainer ignored +++genericContainer +++++staticText name='Cats' +++++++inlineTextBox name='Cats' +++genericContainer +++++checkBox name='done' checkedState=false
diff --git a/content/test/data/accessibility/css/display-to-inline-expected-blink.txt b/content/test/data/accessibility/css/display-to-inline-expected-blink.txt index 6abd4a4..e20e85c 100644 --- a/content/test/data/accessibility/css/display-to-inline-expected-blink.txt +++ b/content/test/data/accessibility/css/display-to-inline-expected-blink.txt
@@ -1,8 +1,5 @@ rootWebArea -++genericContainer ignored -++++genericContainer ignored -++++++staticText name='Cats ' -++++++++inlineTextBox name='Cats ' -++++++genericContainer -++++++++checkBox name='done' checkedState=false -++++++genericContainer ignored +++staticText name='Cats ' +++++inlineTextBox name='Cats ' +++genericContainer +++++checkBox name='done' checkedState=false
diff --git a/content/test/data/accessibility/css/font-family-expected-blink.txt b/content/test/data/accessibility/css/font-family-expected-blink.txt index 783f358..b150f49 100644 --- a/content/test/data/accessibility/css/font-family-expected-blink.txt +++ b/content/test/data/accessibility/css/font-family-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea fontFamily='Times New Roman' -++genericContainer ignored fontFamily='-webkit-serif' -++++navigation fontFamily='-webkit-serif' -++++++paragraph fontFamily='-webkit-monospace' -++++++++staticText fontFamily='-webkit-monospace' name='Monospace' -++++++++++inlineTextBox fontFamily='-webkit-monospace' name='Monospace' -++++++presentational ignored fontFamily='-webkit-sans-serif' -++++++++staticText fontFamily='-webkit-sans-serif' name='Sans serif' -++++++++++inlineTextBox fontFamily='-webkit-sans-serif' name='Sans serif' +++navigation fontFamily='-webkit-serif' +++++paragraph fontFamily='-webkit-monospace' +++++++staticText fontFamily='-webkit-monospace' name='Monospace' +++++++++inlineTextBox fontFamily='-webkit-monospace' name='Monospace' +++++staticText fontFamily='-webkit-sans-serif' name='Sans serif' +++++++inlineTextBox fontFamily='-webkit-sans-serif' name='Sans serif' +<-- End-of-file --> \ No newline at end of file
diff --git a/content/test/data/accessibility/css/font-style-expected-blink.txt b/content/test/data/accessibility/css/font-style-expected-blink.txt index f9f266d..b6123a4 100644 --- a/content/test/data/accessibility/css/font-style-expected-blink.txt +++ b/content/test/data/accessibility/css/font-style-expected-blink.txt
@@ -1,54 +1,53 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='The ' -++++++++inlineTextBox name='The ' -++++++staticText name='quick' textStyle=1 -++++++++inlineTextBox name='quick' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='brown' textStyle=2 -++++++++inlineTextBox name='brown' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='fox' textStyle=4 -++++++++inlineTextBox name='fox' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='jumped' textStyle=3 -++++++++inlineTextBox name='jumped' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='over' textStyle=6 -++++++++inlineTextBox name='over' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='dog' textStyle=7 -++++++++inlineTextBox name='dog' -++++genericContainer multiline value='Normal bold italic underline line-through subscript superscript' -++++++staticText name='Normal' -++++++++inlineTextBox name='Normal' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='bold' textStyle=1 -++++++++inlineTextBox name='bold' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='italic' textStyle=2 -++++++++inlineTextBox name='italic' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='underline' textStyle=4 -++++++++inlineTextBox name='underline' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='line-through' textStyle=8 -++++++++inlineTextBox name='line-through' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='subscript' textPosition=subscript -++++++++inlineTextBox name='subscript' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='superscript' textPosition=superscript -++++++++inlineTextBox name='superscript' +++paragraph +++++staticText name='The ' +++++++inlineTextBox name='The ' +++++staticText name='quick' textStyle=1 +++++++inlineTextBox name='quick' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='brown' textStyle=2 +++++++inlineTextBox name='brown' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='fox' textStyle=4 +++++++inlineTextBox name='fox' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='jumped' textStyle=3 +++++++inlineTextBox name='jumped' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='over' textStyle=6 +++++++inlineTextBox name='over' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='dog' textStyle=7 +++++++inlineTextBox name='dog' +++genericContainer multiline value='Normal bold italic underline line-through subscript superscript' +++++staticText name='Normal' +++++++inlineTextBox name='Normal' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='bold' textStyle=1 +++++++inlineTextBox name='bold' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='italic' textStyle=2 +++++++inlineTextBox name='italic' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='underline' textStyle=4 +++++++inlineTextBox name='underline' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='line-through' textStyle=8 +++++++inlineTextBox name='line-through' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='subscript' textPosition=subscript +++++++inlineTextBox name='subscript' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='superscript' textPosition=superscript +++++++inlineTextBox name='superscript'
diff --git a/content/test/data/accessibility/css/inline-position-relative-expected-blink.txt b/content/test/data/accessibility/css/inline-position-relative-expected-blink.txt index 65bfd04..6af34a76 100644 --- a/content/test/data/accessibility/css/inline-position-relative-expected-blink.txt +++ b/content/test/data/accessibility/css/inline-position-relative-expected-blink.txt
@@ -1,8 +1,6 @@ rootWebArea pageLocation=(0, 0) -++genericContainer ignored -++++genericContainer pageLocation=(0, 0) -++++++genericContainer ignored -++++++++staticText pageLocation=(0, 0) name='Before' -++++++++++inlineTextBox pageLocation=(0, 0) name='Before' -++++++staticText pageLocation=(100, 0) name='After' -++++++++inlineTextBox pageLocation=(100, 0) name='After' +++genericContainer pageLocation=(0, 0) +++++staticText pageLocation=(0, 0) name='Before' +++++++inlineTextBox pageLocation=(0, 0) name='Before' +++++staticText pageLocation=(100, 0) name='After' +++++++inlineTextBox pageLocation=(100, 0) name='After' \ No newline at end of file
diff --git a/content/test/data/accessibility/css/language-expected-blink.txt b/content/test/data/accessibility/css/language-expected-blink.txt index 3c844ff..dbeb548 100644 --- a/content/test/data/accessibility/css/language-expected-blink.txt +++ b/content/test/data/accessibility/css/language-expected-blink.txt
@@ -1,8 +1,6 @@ rootWebArea language='en-US' -++genericContainer ignored language='en-US' -++++paragraph language='es-ES' -++++++staticText language='es-ES' name='Espanyol' -++++++++inlineTextBox language='es-ES' name='Espanyol' -++++presentational ignored language='fr-FR' -++++++staticText language='fr-FR' name='Comment allez-vous?' -++++++++inlineTextBox language='fr-FR' name='Comment allez-vous?' +++paragraph language='es-ES' +++++staticText language='es-ES' name='Espanyol' +++++++inlineTextBox language='es-ES' name='Espanyol' +++staticText language='fr-FR' name='Comment allez-vous?' +++++inlineTextBox language='fr-FR' name='Comment allez-vous?'
diff --git a/content/test/data/accessibility/css/pseudo-element-alternative-text-expected-blink.txt b/content/test/data/accessibility/css/pseudo-element-alternative-text-expected-blink.txt index 0d8e4d8f..0a094aa 100644 --- a/content/test/data/accessibility/css/pseudo-element-alternative-text-expected-blink.txt +++ b/content/test/data/accessibility/css/pseudo-element-alternative-text-expected-blink.txt
@@ -1,7 +1,6 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++image name='alternative text' -++++++staticText name='DOM text' -++++++++inlineTextBox name='DOM text' -++++++image +++genericContainer +++++image name='alternative text' +++++staticText name='DOM text' +++++++inlineTextBox name='DOM text' +++++image
diff --git a/content/test/data/accessibility/css/table-incomplete-expected-blink.txt b/content/test/data/accessibility/css/table-incomplete-expected-blink.txt index 359688a..ad8308c2 100644 --- a/content/test/data/accessibility/css/table-incomplete-expected-blink.txt +++ b/content/test/data/accessibility/css/table-incomplete-expected-blink.txt
@@ -1,10 +1,9 @@ rootWebArea -++genericContainer ignored -++++table -++++++row selected=false -++++++++cell name='Fred' selected=false -++++++++++staticText name='Fred' -++++++++++++inlineTextBox name='Fred' -++++++++cell name='Jackson' selected=false -++++++++++staticText name='Jackson' -++++++++++++inlineTextBox name='Jackson' +++table +++++row selected=false +++++++cell name='Fred' selected=false +++++++++staticText name='Fred' +++++++++++inlineTextBox name='Fred' +++++++cell name='Jackson' selected=false +++++++++staticText name='Jackson' +++++++++++inlineTextBox name='Jackson'
diff --git a/content/test/data/accessibility/css/transform-expected-blink.txt b/content/test/data/accessibility/css/transform-expected-blink.txt index 1d926a1..bb5705b0d 100644 --- a/content/test/data/accessibility/css/transform-expected-blink.txt +++ b/content/test/data/accessibility/css/transform-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea pageLocation=(0, 0) -++genericContainer ignored -++++genericContainer pageLocation=(0, 50) -++++++paragraph pageLocation=(0, 50) -++++++++staticText pageLocation=(0, 50) name='content' -++++++++++inlineTextBox pageLocation=(0, 50) name='content' +++genericContainer pageLocation=(0, 50) +++++paragraph pageLocation=(0, 50) +++++++staticText pageLocation=(0, 50) name='content' +++++++++inlineTextBox pageLocation=(0, 50) name='content'
diff --git a/content/test/data/accessibility/event/aria-combo-box-delay-show-list-expected-mac.txt b/content/test/data/accessibility/event/aria-combo-box-delay-show-list-expected-mac.txt.html similarity index 100% rename from content/test/data/accessibility/event/aria-combo-box-delay-show-list-expected-mac.txt rename to content/test/data/accessibility/event/aria-combo-box-delay-show-list-expected-mac.txt.html
diff --git a/content/test/data/accessibility/event/aria-combo-box-delay-show-list-expected-win.txt b/content/test/data/accessibility/event/aria-combo-box-delay-show-list-expected-win.txt deleted file mode 100644 index 55aef2f..0000000 --- a/content/test/data/accessibility/event/aria-combo-box-delay-show-list-expected-win.txt +++ /dev/null
@@ -1,5 +0,0 @@ -EVENT_OBJECT_FOCUS on <li#op1> role=ROLE_SYSTEM_LISTITEM name="Apple" SELECTED,FOCUSED,FOCUSABLE,SELECTABLE PosInSet=1 SetSize=1 -EVENT_OBJECT_HIDE on <body> role=BODY -IA2_EVENT_ACTIVE_DESCENDANT_CHANGED on <input> role=ROLE_SYSTEM_COMBOBOX EXPANDED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SELECTABLE_TEXT,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION -IA2_EVENT_TEXT_INSERTED on <#document> role=ROLE_SYSTEM_DOCUMENT value~=[doc-url] FOCUSABLE new_text={'<obj><obj>' start=0 end=2} -IA2_EVENT_TEXT_REMOVED on <#document> role=ROLE_SYSTEM_DOCUMENT value~=[doc-url] FOCUSABLE old_text={'<obj>' start=0 end=1}
diff --git a/content/test/data/accessibility/event/aria-combo-box-delay-show-list-expected-win.txt.html b/content/test/data/accessibility/event/aria-combo-box-delay-show-list-expected-win.txt.html new file mode 100644 index 0000000..6647c3d --- /dev/null +++ b/content/test/data/accessibility/event/aria-combo-box-delay-show-list-expected-win.txt.html
@@ -0,0 +1,3 @@ +EVENT_OBJECT_FOCUS on <li#op1> role=ROLE_SYSTEM_LISTITEM name="Apple" SELECTED,FOCUSED,FOCUSABLE,SELECTABLE +IA2_EVENT_ACTIVE_DESCENDANT_CHANGED on <input> role=ROLE_SYSTEM_COMBOBOX EXPANDED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SELECTABLE_TEXT,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION +IA2_EVENT_TEXT_INSERTED on <div#container> role=DIV new_text={'<obj>' start=0 end=1}
diff --git a/content/test/data/accessibility/event/css-visibility-expected-win.txt b/content/test/data/accessibility/event/css-visibility-expected-win.txt index a267f80..d04c621 100644 --- a/content/test/data/accessibility/event/css-visibility-expected-win.txt +++ b/content/test/data/accessibility/event/css-visibility-expected-win.txt
@@ -1,4 +1,4 @@ -EVENT_OBJECT_HIDE on <div.a> role=DIV level=2 +EVENT_OBJECT_HIDE on <div.a> role=DIV name="Heading" level=2 EVENT_OBJECT_REORDER on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL EVENT_OBJECT_SHOW on <div.b> role=ROLE_SYSTEM_GROUPING name="Banner" IA2_EVENT_TEXT_INSERTED on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL new_text={'<obj>' start=0 end=1}
diff --git a/content/test/data/accessibility/event/tabindex-removed-on-aria-hidden-expected-win.txt b/content/test/data/accessibility/event/tabindex-removed-on-aria-hidden-expected-win.txt index e7aca91..537b4b6 100644 --- a/content/test/data/accessibility/event/tabindex-removed-on-aria-hidden-expected-win.txt +++ b/content/test/data/accessibility/event/tabindex-removed-on-aria-hidden-expected-win.txt
@@ -1,3 +1,3 @@ -EVENT_OBJECT_HIDE on <div#d> role=DIV INVISIBLE +EVENT_OBJECT_HIDE on <div#d> role=DIV INVISIBLE,FOCUSABLE EVENT_OBJECT_REORDER on <#document> role=ROLE_SYSTEM_DOCUMENT value~=[doc-url] FOCUSED,FOCUSABLE IA2_EVENT_TEXT_REMOVED on <#document> role=ROLE_SYSTEM_DOCUMENT value~=[doc-url] FOCUSED,FOCUSABLE old_text={'<obj>' start=0 end=1}
diff --git a/content/test/data/accessibility/html/a-name-calc-expected-blink.txt b/content/test/data/accessibility/html/a-name-calc-expected-blink.txt index 68d657b..c99ac754 100644 --- a/content/test/data/accessibility/html/a-name-calc-expected-blink.txt +++ b/content/test/data/accessibility/html/a-name-calc-expected-blink.txt
@@ -1,23 +1,22 @@ rootWebArea -++genericContainer ignored -++++link name='InnerText0' nameFrom=contents -++++++staticText name='InnerText0' nameFrom=contents -++++++++inlineTextBox name='InnerText0' nameFrom=contents -++++staticText name=' ' nameFrom=contents -++++++inlineTextBox name=' ' nameFrom=contents -++++link description='Title1' name='InnerText1' nameFrom=contents descriptionFrom=attribute -++++++staticText name='InnerText1' nameFrom=contents -++++++++inlineTextBox name='InnerText1' nameFrom=contents -++++staticText name=' ' nameFrom=contents -++++++inlineTextBox name=' ' nameFrom=contents -++++link name='Title2' nameFrom=attribute -++++++staticText name='InnerText2' nameFrom=contents -++++++++inlineTextBox name='InnerText2' nameFrom=contents -++++staticText name=' ' nameFrom=contents -++++++inlineTextBox name=' ' nameFrom=contents -++++link name='LabelledBy3' nameFrom=relatedElement -++++++staticText name='InnerText3' nameFrom=contents -++++++++inlineTextBox name='InnerText3' nameFrom=contents -++++link name='Title4' nameFrom=title -++++link name='Label5' nameFrom=attribute -++++link name='LabelledBy6' nameFrom=relatedElement +++link name='InnerText0' nameFrom=contents +++++staticText name='InnerText0' nameFrom=contents +++++++inlineTextBox name='InnerText0' nameFrom=contents +++staticText name=' ' nameFrom=contents +++++inlineTextBox name=' ' nameFrom=contents +++link description='Title1' name='InnerText1' nameFrom=contents descriptionFrom=attribute +++++staticText name='InnerText1' nameFrom=contents +++++++inlineTextBox name='InnerText1' nameFrom=contents +++staticText name=' ' nameFrom=contents +++++inlineTextBox name=' ' nameFrom=contents +++link name='Title2' nameFrom=attribute +++++staticText name='InnerText2' nameFrom=contents +++++++inlineTextBox name='InnerText2' nameFrom=contents +++staticText name=' ' nameFrom=contents +++++inlineTextBox name=' ' nameFrom=contents +++link name='LabelledBy3' nameFrom=relatedElement +++++staticText name='InnerText3' nameFrom=contents +++++++inlineTextBox name='InnerText3' nameFrom=contents +++link name='Title4' nameFrom=title +++link name='Label5' nameFrom=attribute +++link name='LabelledBy6' nameFrom=relatedElement
diff --git a/content/test/data/accessibility/html/a-name-expected-blink.txt b/content/test/data/accessibility/html/a-name-expected-blink.txt index c01e14e..80372bce 100644 --- a/content/test/data/accessibility/html/a-name-expected-blink.txt +++ b/content/test/data/accessibility/html/a-name-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++anchor name='named anchor' -++++++staticText name='named anchor' -++++++++inlineTextBox name='named anchor' -++++link name='both a named anchor and a link' -++++++staticText name='both a named anchor and a link' -++++++++inlineTextBox name='both a named anchor and a link' +++anchor name='named anchor' +++++staticText name='named anchor' +++++++inlineTextBox name='named anchor' +++link name='both a named anchor and a link' +++++staticText name='both a named anchor and a link' +++++++inlineTextBox name='both a named anchor and a link' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/a-onclick-expected-blink.txt b/content/test/data/accessibility/html/a-onclick-expected-blink.txt index 9b45cd7..41a1ed47 100644 --- a/content/test/data/accessibility/html/a-onclick-expected-blink.txt +++ b/content/test/data/accessibility/html/a-onclick-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++link name='link with no href but onclick' defaultActionVerb=jump -++++++staticText name='link with no href but onclick' defaultActionVerb=clickAncestor -++++++++inlineTextBox name='link with no href but onclick' -++++link name='link with no href and click handler added via script' defaultActionVerb=jump -++++++staticText name='link with no href and click handler added via script' defaultActionVerb=clickAncestor -++++++++inlineTextBox name='link with no href and click handler added via script' +++link name='link with no href but onclick' defaultActionVerb=jump +++++staticText name='link with no href but onclick' defaultActionVerb=clickAncestor +++++++inlineTextBox name='link with no href but onclick' +++link name='link with no href and click handler added via script' defaultActionVerb=jump +++++staticText name='link with no href and click handler added via script' defaultActionVerb=clickAncestor +++++++inlineTextBox name='link with no href and click handler added via script' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/abbr-expected-blink.txt b/content/test/data/accessibility/html/abbr-expected-blink.txt index 2171ead8..c68f15b 100644 --- a/content/test/data/accessibility/html/abbr-expected-blink.txt +++ b/content/test/data/accessibility/html/abbr-expected-blink.txt
@@ -1,10 +1,9 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='The ' -++++++++inlineTextBox name='The ' -++++++abbr name='World Health Organization' -++++++++staticText name='WHO' -++++++++++inlineTextBox name='WHO' -++++++staticText name=' was founded in 1948.' -++++++++inlineTextBox name=' was founded in 1948.' +++paragraph +++++staticText name='The ' +++++++inlineTextBox name='The ' +++++abbr name='World Health Organization' +++++++staticText name='WHO' +++++++++inlineTextBox name='WHO' +++++staticText name=' was founded in 1948.' +++++++inlineTextBox name=' was founded in 1948.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/absolute-offscreen-expected-blink.txt b/content/test/data/accessibility/html/absolute-offscreen-expected-blink.txt index af89137..a7c06cbdb 100644 --- a/content/test/data/accessibility/html/absolute-offscreen-expected-blink.txt +++ b/content/test/data/accessibility/html/absolute-offscreen-expected-blink.txt
@@ -1,14 +1,14 @@ rootWebArea clipsChildren=true -++genericContainer ignored -++++genericContainer size=(0, 0) pageSize=(50, 20) unclippedSize=(50, 20) -++++++genericContainer pageSize=(50, 20) unclippedSize=(50, 20) -++++++++staticText name='Visible' -++++++++++inlineTextBox name='Visible' -++++genericContainer size=(0, 0) pageSize=(1, 1) clipsChildren=true -++++++genericContainer offscreen pageSize=(1, 1) unclippedSize=(50, 20) -++++++++staticText offscreen pageSize=(1, 1) name='Invisible' -++++++++++inlineTextBox offscreen pageSize=(1, 1) name='Invisible' -++++genericContainer clipsChildren=true -++++++genericContainer offscreen pageSize=(50, 1) unclippedSize=(50, 20) -++++++++staticText offscreen name='Invisible' -++++++++++inlineTextBox offscreen name='Invisible' +++genericContainer size=(0, 0) pageSize=(50, 20) unclippedSize=(50, 20) +++++genericContainer pageSize=(50, 20) unclippedSize=(50, 20) +++++++staticText name='Visible' +++++++++inlineTextBox name='Visible' +++genericContainer size=(0, 0) pageSize=(1, 1) clipsChildren=true +++++genericContainer offscreen pageSize=(1, 1) unclippedSize=(50, 20) +++++++staticText offscreen pageSize=(1, 1) name='Invisible' +++++++++inlineTextBox offscreen pageSize=(1, 1) name='Invisible' +++genericContainer clipsChildren=true +++++genericContainer offscreen pageSize=(50, 1) unclippedSize=(50, 20) +++++++staticText offscreen name='Invisible' +++++++++inlineTextBox offscreen name='Invisible' +<-- End-of-file --> \ No newline at end of file
diff --git a/content/test/data/accessibility/html/action-verbs-expected-blink.txt b/content/test/data/accessibility/html/action-verbs-expected-blink.txt index 0a4de04..bf24fa3 100644 --- a/content/test/data/accessibility/html/action-verbs-expected-blink.txt +++ b/content/test/data/accessibility/html/action-verbs-expected-blink.txt
@@ -1,41 +1,40 @@ rootWebArea name='Action verbs' -++genericContainer ignored +++genericContainer +++++staticText name='Generic div' +++++++inlineTextBox name='Generic div' +++heading name='Heading' hierarchicalLevel=1 +++++staticText name='Heading' +++++++inlineTextBox name='Heading' +++button name='Button' defaultActionVerb=press +++link name='Link' defaultActionVerb=jump +++++staticText name='Link' defaultActionVerb=clickAncestor +++++++inlineTextBox name='Link' +++textField defaultActionVerb=activate ++++genericContainer -++++++staticText name='Generic div' -++++++++inlineTextBox name='Generic div' -++++heading name='Heading' hierarchicalLevel=1 -++++++staticText name='Heading' -++++++++inlineTextBox name='Heading' -++++button name='Button' defaultActionVerb=press -++++link name='Link' defaultActionVerb=jump -++++++staticText name='Link' defaultActionVerb=clickAncestor -++++++++inlineTextBox name='Link' -++++textField defaultActionVerb=activate -++++++genericContainer -++++searchBox defaultActionVerb=activate -++++++genericContainer -++++textField multiline defaultActionVerb=activate -++++++genericContainer -++++textField defaultActionVerb=activate -++++checkBox defaultActionVerb=check checkedState=false -++++checkBox defaultActionVerb=uncheck checkedState=true -++++radioButton defaultActionVerb=check checkedState=false -++++switch name='ARIA Switch' defaultActionVerb=check checkedState=false -++++details -++++++disclosureTriangle collapsed name='Summary' defaultActionVerb=press -++++++++staticText name='Summary' -++++++++++inlineTextBox name='Summary' -++++popUpButton collapsed value='Pop-up button' defaultActionVerb=open haspopup=menu -++++++menuListPopup invisible -++++++++menuListOption name='Pop-up button' defaultActionVerb=select selected=true -++++genericContainer defaultActionVerb=click -++++++staticText name='Div with click handler' defaultActionVerb=clickAncestor -++++++++inlineTextBox name='Div with click handler' -++++group defaultActionVerb=click -++++++paragraph defaultActionVerb=clickAncestor -++++++++staticText name='Paragraph with click handler on parent' defaultActionVerb=clickAncestor -++++++++++inlineTextBox name='Paragraph with click handler on parent' -++++menu -++++++menuItem name='Menu item 1' defaultActionVerb=select -++++++menuItemCheckBox name='Menu item 2' defaultActionVerb=uncheck checkedState=true -++++++menuItemRadio name='Menu item 3' defaultActionVerb=check checkedState=false +++searchBox defaultActionVerb=activate +++++genericContainer +++textField multiline defaultActionVerb=activate +++++genericContainer +++textField defaultActionVerb=activate +++checkBox defaultActionVerb=check checkedState=false +++checkBox defaultActionVerb=uncheck checkedState=true +++radioButton defaultActionVerb=check checkedState=false +++switch name='ARIA Switch' defaultActionVerb=check checkedState=false +++details +++++disclosureTriangle collapsed name='Summary' defaultActionVerb=press +++++++staticText name='Summary' +++++++++inlineTextBox name='Summary' +++popUpButton collapsed value='Pop-up button' defaultActionVerb=open haspopup=menu +++++menuListPopup invisible +++++++menuListOption name='Pop-up button' defaultActionVerb=select selected=true +++genericContainer defaultActionVerb=click +++++staticText name='Div with click handler' defaultActionVerb=clickAncestor +++++++inlineTextBox name='Div with click handler' +++group defaultActionVerb=click +++++paragraph defaultActionVerb=clickAncestor +++++++staticText name='Paragraph with click handler on parent' defaultActionVerb=clickAncestor +++++++++inlineTextBox name='Paragraph with click handler on parent' +++menu +++++menuItem name='Menu item 1' defaultActionVerb=select +++++menuItemCheckBox name='Menu item 2' defaultActionVerb=uncheck checkedState=true +++++menuItemRadio name='Menu item 3' defaultActionVerb=check checkedState=false \ No newline at end of file
diff --git a/content/test/data/accessibility/html/address-expected-blink.txt b/content/test/data/accessibility/html/address-expected-blink.txt index 28da951..cc35b42 100644 --- a/content/test/data/accessibility/html/address-expected-blink.txt +++ b/content/test/data/accessibility/html/address-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++staticText name='Please contact John Citizen for more information.' -++++++++inlineTextBox name='Please contact John Citizen for more information.' +++genericContainer +++++staticText name='Please contact John Citizen for more information.' +++++++inlineTextBox name='Please contact John Citizen for more information.'
diff --git a/content/test/data/accessibility/html/article-expected-blink.txt b/content/test/data/accessibility/html/article-expected-blink.txt index 84a6c34..dcf5b9f 100644 --- a/content/test/data/accessibility/html/article-expected-blink.txt +++ b/content/test/data/accessibility/html/article-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++article -++++++staticText name='This is an article element.' -++++++++inlineTextBox name='This is an article element.' +++article +++++staticText name='This is an article element.' +++++++inlineTextBox name='This is an article element.'
diff --git a/content/test/data/accessibility/html/aside-expected-blink.txt b/content/test/data/accessibility/html/aside-expected-blink.txt index 71468ffe..8d99b50 100644 --- a/content/test/data/accessibility/html/aside-expected-blink.txt +++ b/content/test/data/accessibility/html/aside-expected-blink.txt
@@ -1,12 +1,11 @@ rootWebArea -++genericContainer ignored +++paragraph +++++staticText name='The aside tag defines some content aside from the content it is placed in.' +++++++inlineTextBox name='The aside tag defines some content aside from the content it is placed in.' +++complementary +++++heading name='Aside tag' hierarchicalLevel=4 +++++++staticText name='Aside tag' +++++++++inlineTextBox name='Aside tag' ++++paragraph -++++++staticText name='The aside tag defines some content aside from the content it is placed in.' -++++++++inlineTextBox name='The aside tag defines some content aside from the content it is placed in.' -++++complementary -++++++heading name='Aside tag' hierarchicalLevel=4 -++++++++staticText name='Aside tag' -++++++++++inlineTextBox name='Aside tag' -++++++paragraph -++++++++staticText name='The aside content should be related to the surrounding content.' -++++++++++inlineTextBox name='The aside content should be related to the surrounding content.' +++++++staticText name='The aside content should be related to the surrounding content.' +++++++++inlineTextBox name='The aside content should be related to the surrounding content.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/b-expected-blink.txt b/content/test/data/accessibility/html/b-expected-blink.txt index d93c310..2d7d50ee 100644 --- a/content/test/data/accessibility/html/b-expected-blink.txt +++ b/content/test/data/accessibility/html/b-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='Some ' -++++++++inlineTextBox name='Some ' -++++++staticText name='bold' textStyle=1 -++++++++inlineTextBox name='bold' -++++++staticText name=' text' -++++++++inlineTextBox name=' text' +++paragraph +++++staticText name='Some ' +++++++inlineTextBox name='Some ' +++++staticText name='bold' textStyle=1 +++++++inlineTextBox name='bold' +++++staticText name=' text' +++++++inlineTextBox name=' text' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/blockquote-expected-blink.txt b/content/test/data/accessibility/html/blockquote-expected-blink.txt index 0697bf4..ffa8de7b 100644 --- a/content/test/data/accessibility/html/blockquote-expected-blink.txt +++ b/content/test/data/accessibility/html/blockquote-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++blockquote -++++++paragraph -++++++++staticText name='First blockquote has a child element.' -++++++++++inlineTextBox name='First blockquote has a child element.' -++++blockquote -++++++staticText name='Second blockquote has no child.' -++++++++inlineTextBox name='Second blockquote has no child.' +++blockquote +++++paragraph +++++++staticText name='First blockquote has a child element.' +++++++++inlineTextBox name='First blockquote has a child element.' +++blockquote +++++staticText name='Second blockquote has no child.' +++++++inlineTextBox name='Second blockquote has no child.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/body-expected-blink.txt b/content/test/data/accessibility/html/body-expected-blink.txt index 927d40b..523cdc2 100644 --- a/content/test/data/accessibility/html/body-expected-blink.txt +++ b/content/test/data/accessibility/html/body-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='This test is for body tag' -++++++++inlineTextBox name='This test is for body tag' +++paragraph +++++staticText name='This test is for body tag' +++++++inlineTextBox name='This test is for body tag' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/body-tabindex-expected-blink.txt b/content/test/data/accessibility/html/body-tabindex-expected-blink.txt index c873c46..6b445d7 100644 --- a/content/test/data/accessibility/html/body-tabindex-expected-blink.txt +++ b/content/test/data/accessibility/html/body-tabindex-expected-blink.txt
@@ -1,5 +1,5 @@ rootWebArea -++genericContainer ignored name='This test is for the body tag with a tabindex' -++++paragraph -++++++staticText name='This test is for the body tag with a tabindex' -++++++++inlineTextBox name='This test is for the body tag with a tabindex' +++paragraph +++++staticText name='This test is for the body tag with a tabindex' +++++++inlineTextBox name='This test is for the body tag with a tabindex' +
diff --git a/content/test/data/accessibility/html/bounds-absolute-expected-blink.txt b/content/test/data/accessibility/html/bounds-absolute-expected-blink.txt index a7132025..919c65e 100644 --- a/content/test/data/accessibility/html/bounds-absolute-expected-blink.txt +++ b/content/test/data/accessibility/html/bounds-absolute-expected-blink.txt
@@ -1,6 +1,6 @@ rootWebArea clipsChildren=true -++genericContainer ignored -++++genericContainer size=(200, 200) pageSize=(200, 200) unclippedSize=(200, 200) clipsChildren=true -++++++dialog size=(200, 200) pageLocation=(150, 50) pageSize=(200, 200) unclippedLocation=(150, 50) unclippedSize=(200, 200) -++++++++button size=(160, 50) pageSize=(160, 50) name='Button 1' -++++++++button size=(160, 50) pageSize=(160, 50) name='Button 2' +++genericContainer size=(200, 200) pageSize=(200, 200) unclippedSize=(200, 200) clipsChildren=true +++++dialog size=(200, 200) pageLocation=(150, 50) pageSize=(200, 200) unclippedLocation=(150, 50) unclippedSize=(200, 200) +++++++button size=(160, 50) pageSize=(160, 50) name='Button 1' +++++++button size=(160, 50) pageSize=(160, 50) name='Button 2' +<-- End-of-file --> \ No newline at end of file
diff --git a/content/test/data/accessibility/html/bounds-clips-expected-blink.txt b/content/test/data/accessibility/html/bounds-clips-expected-blink.txt index 1eb8a28..d623d6d 100644 --- a/content/test/data/accessibility/html/bounds-clips-expected-blink.txt +++ b/content/test/data/accessibility/html/bounds-clips-expected-blink.txt
@@ -1,22 +1,20 @@ rootWebArea -++genericContainer ignored +++genericContainer +++++staticText name='Visible' +++++++inlineTextBox name='Visible' +++genericContainer size=(200, 100) +++++staticText name='Also visible' +++++++inlineTextBox name='Also visible' +++genericContainer +++++staticText name='Also visible' +++++++inlineTextBox name='Also ' +++++++inlineTextBox name='visible' +++genericContainer +++++staticText offscreen name='Hidden' +++++++inlineTextBox offscreen name='Hidden' +++genericContainer size=(10, 10) ++++genericContainer -++++++staticText name='Visible' -++++++++inlineTextBox name='Visible' -++++genericContainer ignored -++++++genericContainer size=(200, 100) -++++++++staticText name='Also visible' -++++++++++inlineTextBox name='Also visible' -++++genericContainer ignored -++++++genericContainer -++++++++staticText name='Also visible' -++++++++++inlineTextBox name='Also ' -++++++++++inlineTextBox name='visible' -++++genericContainer -++++++staticText offscreen name='Hidden' -++++++++inlineTextBox offscreen name='Hidden' -++++genericContainer size=(10, 10) -++++++genericContainer -++++++++staticText offscreen name='Also hidden' -++++++++++inlineTextBox offscreen name='Also ' -++++++++++inlineTextBox offscreen name='hidden' +++++++staticText offscreen name='Also hidden' +++++++++inlineTextBox offscreen name='Also ' +++++++++inlineTextBox offscreen name='hidden' +<-- End-of-file --> \ No newline at end of file
diff --git a/content/test/data/accessibility/html/bounds-fixed-expected-blink.txt b/content/test/data/accessibility/html/bounds-fixed-expected-blink.txt index a7132025..919c65e 100644 --- a/content/test/data/accessibility/html/bounds-fixed-expected-blink.txt +++ b/content/test/data/accessibility/html/bounds-fixed-expected-blink.txt
@@ -1,6 +1,6 @@ rootWebArea clipsChildren=true -++genericContainer ignored -++++genericContainer size=(200, 200) pageSize=(200, 200) unclippedSize=(200, 200) clipsChildren=true -++++++dialog size=(200, 200) pageLocation=(150, 50) pageSize=(200, 200) unclippedLocation=(150, 50) unclippedSize=(200, 200) -++++++++button size=(160, 50) pageSize=(160, 50) name='Button 1' -++++++++button size=(160, 50) pageSize=(160, 50) name='Button 2' +++genericContainer size=(200, 200) pageSize=(200, 200) unclippedSize=(200, 200) clipsChildren=true +++++dialog size=(200, 200) pageLocation=(150, 50) pageSize=(200, 200) unclippedLocation=(150, 50) unclippedSize=(200, 200) +++++++button size=(160, 50) pageSize=(160, 50) name='Button 1' +++++++button size=(160, 50) pageSize=(160, 50) name='Button 2' +<-- End-of-file --> \ No newline at end of file
diff --git a/content/test/data/accessibility/html/bounds-inherits-expected-blink.txt b/content/test/data/accessibility/html/bounds-inherits-expected-blink.txt index e5bcc22..66c17c9 100644 --- a/content/test/data/accessibility/html/bounds-inherits-expected-blink.txt +++ b/content/test/data/accessibility/html/bounds-inherits-expected-blink.txt
@@ -1,5 +1,5 @@ rootWebArea -++genericContainer ignored -++++genericContainer size=(200, 200) -++++++genericContainer size=(0, 0) -++++++++genericContainer offscreen size=(0, 0) +++genericContainer size=(200, 200) +++++genericContainer size=(0, 0) +++++++genericContainer offscreen size=(0, 0) +<-- End-of-file -->
diff --git a/content/test/data/accessibility/html/br-expected-blink.txt b/content/test/data/accessibility/html/br-expected-blink.txt index ff473dd7..2342cef 100644 --- a/content/test/data/accessibility/html/br-expected-blink.txt +++ b/content/test/data/accessibility/html/br-expected-blink.txt
@@ -1,15 +1,15 @@ rootWebArea -++genericContainer ignored +++lineBreak size=(0, 0) name='<newline>' +++++inlineTextBox name='<newline>' +++staticText name='Text line 1' +++++inlineTextBox name='Text line 1' +++paragraph +++++staticText name='Text line 2' +++++++inlineTextBox name='Text line 2' ++++lineBreak size=(0, 0) name='<newline>' ++++++inlineTextBox name='<newline>' -++++staticText name='Text line 1' -++++++inlineTextBox name='Text line 1' -++++paragraph -++++++staticText name='Text line 2' -++++++++inlineTextBox name='Text line 2' -++++++lineBreak size=(0, 0) name='<newline>' -++++++++inlineTextBox name='<newline>' -++++++staticText name='Text line 3' -++++++++inlineTextBox name='Text line 3' -++++lineBreak size=(0, 0) name='<newline>' -++++++inlineTextBox name='<newline>' +++++staticText name='Text line 3' +++++++inlineTextBox name='Text line 3' +++lineBreak size=(0, 0) name='<newline>' +++++inlineTextBox name='<newline>' +<-- End-of-file --> \ No newline at end of file
diff --git a/content/test/data/accessibility/html/button-alt-changed-expected-blink.txt b/content/test/data/accessibility/html/button-alt-changed-expected-blink.txt index 51e911b..4b306f40 100644 --- a/content/test/data/accessibility/html/button-alt-changed-expected-blink.txt +++ b/content/test/data/accessibility/html/button-alt-changed-expected-blink.txt
@@ -1,4 +1,3 @@ rootWebArea -++genericContainer ignored -++++genericContainer name='Done' -++++button name='After' +++genericContainer name='Done' +++button name='After'
diff --git a/content/test/data/accessibility/html/button-content-changed-expected-blink.txt b/content/test/data/accessibility/html/button-content-changed-expected-blink.txt index 51e911b..4b306f40 100644 --- a/content/test/data/accessibility/html/button-content-changed-expected-blink.txt +++ b/content/test/data/accessibility/html/button-content-changed-expected-blink.txt
@@ -1,4 +1,3 @@ rootWebArea -++genericContainer ignored -++++genericContainer name='Done' -++++button name='After' +++genericContainer name='Done' +++button name='After'
diff --git a/content/test/data/accessibility/html/button-expected-blink.txt b/content/test/data/accessibility/html/button-expected-blink.txt index cc5312f..c139492 100644 --- a/content/test/data/accessibility/html/button-expected-blink.txt +++ b/content/test/data/accessibility/html/button-expected-blink.txt
@@ -1,3 +1,3 @@ rootWebArea ++genericContainer -++++button name='Click me!' +++++button name='Click me!' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/button-name-calc-expected-blink.txt b/content/test/data/accessibility/html/button-name-calc-expected-blink.txt index 957aa72b..6ef3d2fd 100644 --- a/content/test/data/accessibility/html/button-name-calc-expected-blink.txt +++ b/content/test/data/accessibility/html/button-name-calc-expected-blink.txt
@@ -1,11 +1,10 @@ rootWebArea -++genericContainer ignored -++++button name='InnerText0' -++++button description='Title1' name='InnerText1' descriptionFrom=attribute -++++button description='Title2' name='AriaLabel2' descriptionFrom=attribute -++++button description='Title3' name='LabelledBy3' descriptionFrom=attribute -++++button description='DescribedBy4' name='LabelledBy4' descriptionFrom=relatedElement -++++button description='DescribedBy5' name='InnerText5' descriptionFrom=relatedElement -++++button name='Outer inner' -++++button name='Outer inner1' -++++button name='Outer grandchild' +++button name='InnerText0' +++button description='Title1' name='InnerText1' descriptionFrom=attribute +++button description='Title2' name='AriaLabel2' descriptionFrom=attribute +++button description='Title3' name='LabelledBy3' descriptionFrom=attribute +++button description='DescribedBy4' name='LabelledBy4' descriptionFrom=relatedElement +++button description='DescribedBy5' name='InnerText5' descriptionFrom=relatedElement +++button name='Outer inner' +++button name='Outer inner1' +++button name='Outer grandchild'
diff --git a/content/test/data/accessibility/html/button-submit-expected-blink.txt b/content/test/data/accessibility/html/button-submit-expected-blink.txt index 33f43ba..6f852167 100644 --- a/content/test/data/accessibility/html/button-submit-expected-blink.txt +++ b/content/test/data/accessibility/html/button-submit-expected-blink.txt
@@ -1,13 +1,12 @@ rootWebArea -++genericContainer ignored -++++form -++++++textField -++++++++genericContainer -++++++button default name='First submit in a form is a valid default button' -++++++button name='Second submit in a form not a valid default button' -++++form -++++++textField -++++++++genericContainer -++++++button default name='First button in form is a valid default button' -++++++button name='Second button in form not a valid default button' -++++button name='Submit outside of form not a valid default button' +++form +++++textField +++++++genericContainer +++++button default name='First submit in a form is a valid default button' +++++button name='Second submit in a form not a valid default button' +++form +++++textField +++++++genericContainer +++++button default name='First button in form is a valid default button' +++++button name='Second button in form not a valid default button' +++button name='Submit outside of form not a valid default button'
diff --git a/content/test/data/accessibility/html/button-with-listbox-popup-expected-blink.txt b/content/test/data/accessibility/html/button-with-listbox-popup-expected-blink.txt index 25f6161..6096db6 100644 --- a/content/test/data/accessibility/html/button-with-listbox-popup-expected-blink.txt +++ b/content/test/data/accessibility/html/button-with-listbox-popup-expected-blink.txt
@@ -1,13 +1,12 @@ rootWebArea -++genericContainer ignored +++genericContainer ++++genericContainer -++++++genericContainer -++++++++staticText name='Choose one:' -++++++++++inlineTextBox name='Choose one:' -++++++popUpButton name='Choose one: Foo' -++++++++staticText name='Foo' -++++++++++inlineTextBox name='Foo' -++++++listBox name='Choose one:' -++++++++listBoxOption name='Baz' selected=false -++++++++listBoxOption name='Bar' selected=false -++++++++listBoxOption name='Foo' selected=false +++++++staticText name='Choose one:' +++++++++inlineTextBox name='Choose one:' +++++popUpButton name='Choose one: Foo' +++++++staticText name='Foo' +++++++++inlineTextBox name='Foo' +++++listBox name='Choose one:' +++++++listBoxOption name='Baz' selected=false +++++++listBoxOption name='Bar' selected=false +++++++listBoxOption name='Foo' selected=false
diff --git a/content/test/data/accessibility/html/caption-expected-blink.txt b/content/test/data/accessibility/html/caption-expected-blink.txt index 124e1c2..f9b6abe 100644 --- a/content/test/data/accessibility/html/caption-expected-blink.txt +++ b/content/test/data/accessibility/html/caption-expected-blink.txt
@@ -1,28 +1,27 @@ rootWebArea -++genericContainer ignored -++++table name='Browser and Engine' -++++++caption -++++++++staticText name='Browser and Engine' -++++++++++inlineTextBox name='Browser and ' +++table name='Browser and Engine' +++++caption +++++++staticText name='Browser and Engine' +++++++++inlineTextBox name='Browser and ' +++++++++inlineTextBox name='Engine' +++++row +++++++columnHeader name='Browser' +++++++++staticText name='Browser' +++++++++++inlineTextBox name='Browser' +++++++columnHeader name='Engine' +++++++++staticText name='Engine' ++++++++++inlineTextBox name='Engine' -++++++row -++++++++columnHeader name='Browser' -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Engine' -++++++++++staticText name='Engine' -++++++++++++inlineTextBox name='Engine' -++++++row -++++++++cell name='Chrome' -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' -++++++row -++++++++cell name='Safari' -++++++++++staticText name='Safari' -++++++++++++inlineTextBox name='Safari' -++++++++cell name='WebKit' -++++++++++staticText name='WebKit' -++++++++++++inlineTextBox name='WebKit' +++++row +++++++cell name='Chrome' +++++++++staticText name='Chrome' +++++++++++inlineTextBox name='Chrome' +++++++cell name='Blink' +++++++++staticText name='Blink' +++++++++++inlineTextBox name='Blink' +++++row +++++++cell name='Safari' +++++++++staticText name='Safari' +++++++++++inlineTextBox name='Safari' +++++++cell name='WebKit' +++++++++staticText name='WebKit' +++++++++++inlineTextBox name='WebKit'
diff --git a/content/test/data/accessibility/html/checkbox-name-calc-expected-blink.txt b/content/test/data/accessibility/html/checkbox-name-calc-expected-blink.txt index 780aef34..849ff4f 100644 --- a/content/test/data/accessibility/html/checkbox-name-calc-expected-blink.txt +++ b/content/test/data/accessibility/html/checkbox-name-calc-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++checkBox name='Title0' checkedState=false -++++checkBox description='Title1' name='Label1' descriptionFrom=attribute checkedState=false -++++checkBox description='Title2' name='AriaLabel2' descriptionFrom=attribute checkedState=false -++++checkBox description='Title3' name='LabelledBy3' descriptionFrom=attribute checkedState=false -++++checkBox description='DescribedBy4' name='LabelledBy4' descriptionFrom=relatedElement checkedState=false -++++checkBox description='DescribedBy5' descriptionFrom=relatedElement checkedState=false +++checkBox name='Title0' checkedState=false +++checkBox description='Title1' name='Label1' descriptionFrom=attribute checkedState=false +++checkBox description='Title2' name='AriaLabel2' descriptionFrom=attribute checkedState=false +++checkBox description='Title3' name='LabelledBy3' descriptionFrom=attribute checkedState=false +++checkBox description='DescribedBy4' name='LabelledBy4' descriptionFrom=relatedElement checkedState=false +++checkBox description='DescribedBy5' descriptionFrom=relatedElement checkedState=false \ No newline at end of file
diff --git a/content/test/data/accessibility/html/cite-expected-blink.txt b/content/test/data/accessibility/html/cite-expected-blink.txt index d6804292d..296dafa5 100644 --- a/content/test/data/accessibility/html/cite-expected-blink.txt +++ b/content/test/data/accessibility/html/cite-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++image name='Pipe' -++++paragraph -++++++staticText name='The pipe' -++++++++inlineTextBox name='The pipe' -++++++staticText name=' clicked by SomeOne.' -++++++++inlineTextBox name=' clicked by SomeOne.' +++image name='Pipe' +++paragraph +++++staticText name='The pipe' +++++++inlineTextBox name='The pipe' +++++staticText name=' clicked by SomeOne.' +++++++inlineTextBox name=' clicked by SomeOne.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/col-expected-blink.txt b/content/test/data/accessibility/html/col-expected-blink.txt index fb46664..a349d2dc 100644 --- a/content/test/data/accessibility/html/col-expected-blink.txt +++ b/content/test/data/accessibility/html/col-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++table -++++++row -++++++++columnHeader name='Browser' -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row -++++++++cell name='Chrome' -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' +++table +++++row +++++++columnHeader name='Browser' +++++++++staticText name='Browser' +++++++++++inlineTextBox name='Browser' +++++++columnHeader name='Rendering Engine' +++++++++staticText name='Rendering Engine' +++++++++++inlineTextBox name='Rendering Engine' +++++row +++++++cell name='Chrome' +++++++++staticText name='Chrome' +++++++++++inlineTextBox name='Chrome' +++++++cell name='Blink' +++++++++staticText name='Blink' +++++++++++inlineTextBox name='Blink'
diff --git a/content/test/data/accessibility/html/colgroup-expected-blink.txt b/content/test/data/accessibility/html/colgroup-expected-blink.txt index a7217ef..42fbed0d 100644 --- a/content/test/data/accessibility/html/colgroup-expected-blink.txt +++ b/content/test/data/accessibility/html/colgroup-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++table -++++++row -++++++++columnHeader name='Single' -++++++++++staticText name='Single' -++++++++++++inlineTextBox name='Single' -++++++++columnHeader name='Pair' -++++++++++staticText name='Pair' -++++++++++++inlineTextBox name='Pair' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='AA' -++++++++++staticText name='AA' -++++++++++++inlineTextBox name='AA' +++table +++++row +++++++columnHeader name='Single' +++++++++staticText name='Single' +++++++++++inlineTextBox name='Single' +++++++columnHeader name='Pair' +++++++++staticText name='Pair' +++++++++++inlineTextBox name='Pair' +++++row +++++++cell name='A' +++++++++staticText name='A' +++++++++++inlineTextBox name='A' +++++++cell name='AA' +++++++++staticText name='AA' +++++++++++inlineTextBox name='AA'
diff --git a/content/test/data/accessibility/html/contenteditable-descendants-expected-blink.txt b/content/test/data/accessibility/html/contenteditable-descendants-expected-blink.txt index 1d3eff2a..58fcee4 100644 --- a/content/test/data/accessibility/html/contenteditable-descendants-expected-blink.txt +++ b/content/test/data/accessibility/html/contenteditable-descendants-expected-blink.txt
@@ -1,33 +1,32 @@ rootWebArea -++genericContainer ignored -++++genericContainer editable multiline richlyEditable value='A contenteditable with a link and an and a .<newline><newline>Always expose editable tables as tables.<newline>Editable list item.' editableRoot=true -++++++paragraph editable richlyEditable -++++++++staticText editable richlyEditable name='A contenteditable with a ' -++++++++++inlineTextBox name='A contenteditable with a ' -++++++++link editable linked richlyEditable name='link' -++++++++++staticText editable linked richlyEditable name='link' -++++++++++++inlineTextBox name='link' -++++++++staticText editable richlyEditable name=' and an ' -++++++++++inlineTextBox name=' and an ' -++++++++image editable richlyEditable name='Image' -++++++++staticText editable richlyEditable name=' and a ' -++++++++++inlineTextBox name=' and a ' -++++++++button editable richlyEditable name='Button' -++++++++staticText editable richlyEditable name='.' -++++++++++inlineTextBox name='.' -++++++table editable richlyEditable -++++++++row editable richlyEditable -++++++++++cell editable richlyEditable name='Always expose editable tables as tables.' -++++++++++++staticText editable richlyEditable name='Always expose editable tables as tables.' -++++++++++++++inlineTextBox name='Always expose editable tables as tables.' -++++++list editable richlyEditable -++++++++listItem editable richlyEditable -++++++++++listMarker editable richlyEditable name='1. ' -++++++++++staticText editable richlyEditable name='Editable list item.' -++++++++++++inlineTextBox name='Editable list item.' -++++paragraph -++++++staticText name='Non-editable paragraph.' -++++++++inlineTextBox name='Non-editable paragraph.' -++++paragraph editable multiline richlyEditable value='Should keep the role but change the state.' editableRoot=true -++++++staticText editable richlyEditable name='Should keep the role but change the state.' -++++++++inlineTextBox name='Should keep the role but change the state.' +++genericContainer editable multiline richlyEditable value='A contenteditable with a link and an and a .<newline><newline>Always expose editable tables as tables.<newline>Editable list item.' editableRoot=true +++++paragraph editable richlyEditable +++++++staticText editable richlyEditable name='A contenteditable with a ' +++++++++inlineTextBox name='A contenteditable with a ' +++++++link editable linked richlyEditable name='link' +++++++++staticText editable linked richlyEditable name='link' +++++++++++inlineTextBox name='link' +++++++staticText editable richlyEditable name=' and an ' +++++++++inlineTextBox name=' and an ' +++++++image editable richlyEditable name='Image' +++++++staticText editable richlyEditable name=' and a ' +++++++++inlineTextBox name=' and a ' +++++++button editable richlyEditable name='Button' +++++++staticText editable richlyEditable name='.' +++++++++inlineTextBox name='.' +++++table editable richlyEditable +++++++row editable richlyEditable +++++++++cell editable richlyEditable name='Always expose editable tables as tables.' +++++++++++staticText editable richlyEditable name='Always expose editable tables as tables.' +++++++++++++inlineTextBox name='Always expose editable tables as tables.' +++++list editable richlyEditable +++++++listItem editable richlyEditable +++++++++listMarker editable richlyEditable name='1. ' +++++++++staticText editable richlyEditable name='Editable list item.' +++++++++++inlineTextBox name='Editable list item.' +++paragraph +++++staticText name='Non-editable paragraph.' +++++++inlineTextBox name='Non-editable paragraph.' +++paragraph editable multiline richlyEditable value='Should keep the role but change the state.' editableRoot=true +++++staticText editable richlyEditable name='Should keep the role but change the state.' +++++++inlineTextBox name='Should keep the role but change the state.'
diff --git a/content/test/data/accessibility/html/contenteditable-descendants-with-selection-expected-blink.txt b/content/test/data/accessibility/html/contenteditable-descendants-with-selection-expected-blink.txt index 337519f7..c8b358b 100644 --- a/content/test/data/accessibility/html/contenteditable-descendants-with-selection-expected-blink.txt +++ b/content/test/data/accessibility/html/contenteditable-descendants-with-selection-expected-blink.txt
@@ -1,27 +1,26 @@ rootWebArea -++genericContainer ignored -++++genericContainer editable multiline richlyEditable value='A contenteditable with a link and an and a .<newline><newline>Always expose editable tables as tables.<newline>Editable list item.' editableRoot=true TreeData.textSelStartOffset=0 TreeData.textSelEndOffset=3 -++++++paragraph editable richlyEditable -++++++++staticText editable richlyEditable name='A contenteditable with a ' -++++++++++inlineTextBox name='A contenteditable with a ' -++++++++link editable richlyEditable name='link' -++++++++++staticText editable richlyEditable name='link' -++++++++++++inlineTextBox name='link' -++++++++staticText editable richlyEditable name=' and an ' -++++++++++inlineTextBox name=' and an ' -++++++++image editable richlyEditable name='Image' -++++++++staticText editable richlyEditable name=' and a ' -++++++++++inlineTextBox name=' and a ' -++++++++button editable richlyEditable name='Button' -++++++++staticText editable richlyEditable name='.' -++++++++++inlineTextBox name='.' -++++++table editable richlyEditable -++++++++row editable richlyEditable -++++++++++cell editable richlyEditable name='Always expose editable tables as tables.' -++++++++++++staticText editable richlyEditable name='Always expose editable tables as tables.' -++++++++++++++inlineTextBox name='Always expose editable tables as tables.' -++++++list editable richlyEditable -++++++++listItem editable richlyEditable -++++++++++listMarker editable richlyEditable name='1. ' -++++++++++staticText editable richlyEditable name='Editable list item.' -++++++++++++inlineTextBox name='Editable list item.' +++genericContainer editable multiline richlyEditable value='A contenteditable with a link and an and a .<newline><newline>Always expose editable tables as tables.<newline>Editable list item.' editableRoot=true TreeData.textSelStartOffset=0 TreeData.textSelEndOffset=3 +++++paragraph editable richlyEditable +++++++staticText editable richlyEditable name='A contenteditable with a ' +++++++++inlineTextBox name='A contenteditable with a ' +++++++link editable richlyEditable name='link' +++++++++staticText editable richlyEditable name='link' +++++++++++inlineTextBox name='link' +++++++staticText editable richlyEditable name=' and an ' +++++++++inlineTextBox name=' and an ' +++++++image editable richlyEditable name='Image' +++++++staticText editable richlyEditable name=' and a ' +++++++++inlineTextBox name=' and a ' +++++++button editable richlyEditable name='Button' +++++++staticText editable richlyEditable name='.' +++++++++inlineTextBox name='.' +++++table editable richlyEditable +++++++row editable richlyEditable +++++++++cell editable richlyEditable name='Always expose editable tables as tables.' +++++++++++staticText editable richlyEditable name='Always expose editable tables as tables.' +++++++++++++inlineTextBox name='Always expose editable tables as tables.' +++++list editable richlyEditable +++++++listItem editable richlyEditable +++++++++listMarker editable richlyEditable name='1. ' +++++++++staticText editable richlyEditable name='Editable list item.' +++++++++++inlineTextBox name='Editable list item.'
diff --git a/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-blink.txt b/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-blink.txt index 85380046..4bf712d1 100644 --- a/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-blink.txt +++ b/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-blink.txt
@@ -1,17 +1,15 @@ rootWebArea -++genericContainer ignored -++++genericContainer editable multiline richlyEditable value='This is editable.<newline><newline>This is not editable.<newline><newline><newline>But this one is.<newline><newline>So is this one.' editableRoot=true -++++++paragraph editable richlyEditable -++++++++staticText editable richlyEditable name='This is editable.' -++++++++++inlineTextBox name='This is editable.' -++++++genericContainer ignored -++++++++staticText name='This is not editable.' -++++++++++inlineTextBox name='This is not editable.' -++++++++lineBreak name='<newline>' -++++++++++inlineTextBox name='<newline>' -++++++++paragraph editable multiline richlyEditable value='But this one is.' editableRoot=true -++++++++++staticText editable richlyEditable name='But this one is.' -++++++++++++inlineTextBox name='But this one is.' -++++++paragraph editable multiline richlyEditable value='So is this one.' -++++++++staticText editable richlyEditable name='So is this one.' -++++++++++inlineTextBox name='So is this one.' +++genericContainer editable multiline richlyEditable value='This is editable.<newline><newline>This is not editable.<newline><newline><newline>But this one is.<newline><newline>So is this one.' editableRoot=true +++++paragraph editable richlyEditable +++++++staticText editable richlyEditable name='This is editable.' +++++++++inlineTextBox name='This is editable.' +++++staticText name='This is not editable.' +++++++inlineTextBox name='This is not editable.' +++++lineBreak name='<newline>' +++++++inlineTextBox name='<newline>' +++++paragraph editable multiline richlyEditable value='But this one is.' editableRoot=true +++++++staticText editable richlyEditable name='But this one is.' +++++++++inlineTextBox name='But this one is.' +++++paragraph editable multiline richlyEditable value='So is this one.' +++++++staticText editable richlyEditable name='So is this one.' +++++++++inlineTextBox name='So is this one.'
diff --git a/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-blink.txt b/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-blink.txt index 6793560..d82c315 100644 --- a/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-blink.txt +++ b/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++genericContainer editable multiline richlyEditable name='label' -++++genericContainer editable multiline richlyEditable description='description' descriptionFrom=relatedElement -++++genericContainer editable multiline richlyEditable name='title' -++++paragraph -++++++staticText name='description' -++++++++inlineTextBox name='description' +++genericContainer editable multiline richlyEditable name='label' +++genericContainer editable multiline richlyEditable description='description' descriptionFrom=relatedElement +++genericContainer editable multiline richlyEditable name='title' +++paragraph +++++staticText name='description' +++++++inlineTextBox name='description' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/dd-expected-blink.txt b/content/test/data/accessibility/html/dd-expected-blink.txt index e46bab3..2a91cf6 100644 --- a/content/test/data/accessibility/html/dd-expected-blink.txt +++ b/content/test/data/accessibility/html/dd-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++descriptionList -++++++descriptionListTerm -++++++++staticText name='Coffee' -++++++++++inlineTextBox name='Coffee' -++++++descriptionListDetail -++++++++staticText name='Black hot drink' -++++++++++inlineTextBox name='Black hot drink' +++descriptionList +++++descriptionListTerm +++++++staticText name='Coffee' +++++++++inlineTextBox name='Coffee' +++++descriptionListDetail +++++++staticText name='Black hot drink' +++++++++inlineTextBox name='Black hot drink' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/del-expected-blink.txt b/content/test/data/accessibility/html/del-expected-blink.txt index 606d3e30..1b7ca4f 100644 --- a/content/test/data/accessibility/html/del-expected-blink.txt +++ b/content/test/data/accessibility/html/del-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='I am ' -++++++++inlineTextBox name='I am ' -++++++contentDeletion -++++++++staticText name='vegetarian' -++++++++++inlineTextBox name='vegetarian' +++paragraph +++++staticText name='I am ' +++++++inlineTextBox name='I am ' +++++contentDeletion +++++++staticText name='vegetarian' +++++++++inlineTextBox name='vegetarian'
diff --git a/content/test/data/accessibility/html/details-expected-blink.txt b/content/test/data/accessibility/html/details-expected-blink.txt index 7b99cff..1d3b41f 100644 --- a/content/test/data/accessibility/html/details-expected-blink.txt +++ b/content/test/data/accessibility/html/details-expected-blink.txt
@@ -1,13 +1,12 @@ rootWebArea -++genericContainer ignored -++++details -++++++disclosureTriangle collapsed name='details tag' -++++++++staticText name='details tag' -++++++++++inlineTextBox name='details tag' -++++details -++++++disclosureTriangle name='details tag open' -++++++++staticText name='details tag open' -++++++++++inlineTextBox name='details tag open' -++++++paragraph -++++++++staticText name='The details tag with open specifies that the details should be visible (open) to the user.' -++++++++++inlineTextBox name='The details tag with open specifies that the details should be visible (open) to the user.' +++details +++++disclosureTriangle collapsed name='details tag' +++++++staticText name='details tag' +++++++++inlineTextBox name='details tag' +++details +++++disclosureTriangle name='details tag open' +++++++staticText name='details tag open' +++++++++inlineTextBox name='details tag open' +++++paragraph +++++++staticText name='The details tag with open specifies that the details should be visible (open) to the user.' +++++++++inlineTextBox name='The details tag with open specifies that the details should be visible (open) to the user.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/dialog-expected-blink.txt b/content/test/data/accessibility/html/dialog-expected-blink.txt index 200c3f5..ad6c8e6 100644 --- a/content/test/data/accessibility/html/dialog-expected-blink.txt +++ b/content/test/data/accessibility/html/dialog-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++dialog -++++++staticText name='Text in dialog' -++++++++inlineTextBox name='Text in dialog' +++dialog +++++staticText name='Text in dialog' +++++++inlineTextBox name='Text in dialog' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/disabled-expected-blink.txt b/content/test/data/accessibility/html/disabled-expected-blink.txt index ab82071..39f3e37 100644 --- a/content/test/data/accessibility/html/disabled-expected-blink.txt +++ b/content/test/data/accessibility/html/disabled-expected-blink.txt
@@ -1,16 +1,15 @@ rootWebArea -++genericContainer ignored -++++checkBox name='Enabled' checkedState=false -++++checkBox name='Disabled' restriction=disabled checkedState=false -++++button name='Enabled' -++++button name='Disabled' restriction=disabled -++++form -++++++staticText name='Enabled form ' -++++++++inlineTextBox name='Enabled form ' -++++++checkBox name='Checkbox' checkedState=false -++++++button name='Button' -++++form restriction=disabled -++++++staticText name='Disabled form ' -++++++++inlineTextBox name='Disabled form ' -++++++checkBox name='Checkbox' restriction=disabled checkedState=false -++++++button name='Button' restriction=disabled +++checkBox name='Enabled' checkedState=false +++checkBox name='Disabled' restriction=disabled checkedState=false +++button name='Enabled' +++button name='Disabled' restriction=disabled +++form +++++staticText name='Enabled form ' +++++++inlineTextBox name='Enabled form ' +++++checkBox name='Checkbox' checkedState=false +++++button name='Button' +++form restriction=disabled +++++staticText name='Disabled form ' +++++++inlineTextBox name='Disabled form ' +++++checkBox name='Checkbox' restriction=disabled checkedState=false +++++button name='Button' restriction=disabled \ No newline at end of file
diff --git a/content/test/data/accessibility/html/div-expected-blink.txt b/content/test/data/accessibility/html/div-expected-blink.txt index 4d6ca68..8154e313 100644 --- a/content/test/data/accessibility/html/div-expected-blink.txt +++ b/content/test/data/accessibility/html/div-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++staticText name='Unfocusable div' -++++++++inlineTextBox name='Unfocusable div' -++++genericContainer name='Focusable div' -++++++staticText name='Focusable div' -++++++++inlineTextBox name='Focusable div' +++genericContainer +++++staticText name='Unfocusable div' +++++++inlineTextBox name='Unfocusable div' +++genericContainer name='Focusable div' +++++staticText name='Focusable div' +++++++inlineTextBox name='Focusable div' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/dl-expected-blink.txt b/content/test/data/accessibility/html/dl-expected-blink.txt index 0ffc3fac..a7114fe2 100644 --- a/content/test/data/accessibility/html/dl-expected-blink.txt +++ b/content/test/data/accessibility/html/dl-expected-blink.txt
@@ -1,12 +1,11 @@ rootWebArea -++genericContainer ignored -++++descriptionList -++++++descriptionListTerm -++++++++staticText name='Term' -++++++++++inlineTextBox name='Term' -++++++descriptionListDetail -++++++++staticText name='Description' -++++++++++inlineTextBox name='Description' -++++definition -++++++staticText name='Definition' -++++++++inlineTextBox name='Definition' +++descriptionList +++++descriptionListTerm +++++++staticText name='Term' +++++++++inlineTextBox name='Term' +++++descriptionListDetail +++++++staticText name='Description' +++++++++inlineTextBox name='Description' +++definition +++++staticText name='Definition' +++++++inlineTextBox name='Definition' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/dt-expected-blink.txt b/content/test/data/accessibility/html/dt-expected-blink.txt index e46bab3..2a91cf6 100644 --- a/content/test/data/accessibility/html/dt-expected-blink.txt +++ b/content/test/data/accessibility/html/dt-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++descriptionList -++++++descriptionListTerm -++++++++staticText name='Coffee' -++++++++++inlineTextBox name='Coffee' -++++++descriptionListDetail -++++++++staticText name='Black hot drink' -++++++++++inlineTextBox name='Black hot drink' +++descriptionList +++++descriptionListTerm +++++++staticText name='Coffee' +++++++++inlineTextBox name='Coffee' +++++descriptionListDetail +++++++staticText name='Black hot drink' +++++++++inlineTextBox name='Black hot drink' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/fieldset-expected-blink.txt b/content/test/data/accessibility/html/fieldset-expected-blink.txt index 2d4601a..f7133d35 100644 --- a/content/test/data/accessibility/html/fieldset-expected-blink.txt +++ b/content/test/data/accessibility/html/fieldset-expected-blink.txt
@@ -1,7 +1,6 @@ rootWebArea -++genericContainer ignored -++++form -++++++group name='Browser Engines:' -++++++++legend -++++++++++staticText name='Browser Engines:' -++++++++++++inlineTextBox name='Browser Engines:' +++form +++++group name='Browser Engines:' +++++++legend +++++++++staticText name='Browser Engines:' +++++++++++inlineTextBox name='Browser Engines:' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/figcaption-expected-blink.txt b/content/test/data/accessibility/html/figcaption-expected-blink.txt index de83cb1..8732fcd4 100644 --- a/content/test/data/accessibility/html/figcaption-expected-blink.txt +++ b/content/test/data/accessibility/html/figcaption-expected-blink.txt
@@ -1,7 +1,6 @@ rootWebArea -++genericContainer ignored -++++figure name='Fig.1 - A green Box' -++++++image name='This is a green box.' -++++++figcaption -++++++++staticText name='Fig.1 - A green Box' -++++++++++inlineTextBox name='Fig.1 - A green Box' +++figure name='Fig.1 - A green Box' +++++image name='This is a green box.' +++++figcaption +++++++staticText name='Fig.1 - A green Box' +++++++++inlineTextBox name='Fig.1 - A green Box' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/figure-expected-blink.txt b/content/test/data/accessibility/html/figure-expected-blink.txt index d3523fb..f7a97076 100644 --- a/content/test/data/accessibility/html/figure-expected-blink.txt +++ b/content/test/data/accessibility/html/figure-expected-blink.txt
@@ -1,4 +1,3 @@ rootWebArea -++genericContainer ignored -++++figure -++++++image name='Sunspots' +++figure +++++image name='Sunspots' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/footer-expected-blink.txt b/content/test/data/accessibility/html/footer-expected-blink.txt index f0de920..afa2b9b 100644 --- a/content/test/data/accessibility/html/footer-expected-blink.txt +++ b/content/test/data/accessibility/html/footer-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++footer -++++++staticText name='Footer element' -++++++++inlineTextBox name='Footer element' +++footer +++++staticText name='Footer element' +++++++inlineTextBox name='Footer element' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/footer-inside-other-section-expected-blink.txt b/content/test/data/accessibility/html/footer-inside-other-section-expected-blink.txt index 5fb97d6..1564408 100644 --- a/content/test/data/accessibility/html/footer-inside-other-section-expected-blink.txt +++ b/content/test/data/accessibility/html/footer-inside-other-section-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++article -++++++genericContainer -++++++++paragraph -++++++++++staticText name='footer inside article.' -++++++++++++inlineTextBox name='footer inside article.' -++++region -++++++genericContainer -++++++++paragraph -++++++++++staticText name='footer inside section.' -++++++++++++inlineTextBox name='footer inside section.' -++++main -++++++genericContainer -++++++++paragraph -++++++++++staticText name='footer inside main.' -++++++++++++inlineTextBox name='footer inside main.' +++article +++++genericContainer +++++++paragraph +++++++++staticText name='footer inside article.' +++++++++++inlineTextBox name='footer inside article.' +++region +++++genericContainer +++++++paragraph +++++++++staticText name='footer inside section.' +++++++++++inlineTextBox name='footer inside section.' +++main +++++genericContainer +++++++paragraph +++++++++staticText name='footer inside main.' +++++++++++inlineTextBox name='footer inside main.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/form-expected-blink.txt b/content/test/data/accessibility/html/form-expected-blink.txt index 0f11462..c32fa97 100644 --- a/content/test/data/accessibility/html/form-expected-blink.txt +++ b/content/test/data/accessibility/html/form-expected-blink.txt
@@ -1,4 +1,3 @@ rootWebArea -++genericContainer ignored -++++form -++++++button default name='Submit' +++form +++++button default name='Submit'
diff --git a/content/test/data/accessibility/html/form-validation-message-after-hide-timeout-expected-blink.txt b/content/test/data/accessibility/html/form-validation-message-after-hide-timeout-expected-blink.txt index a5396ef..f055b85 100644 --- a/content/test/data/accessibility/html/form-validation-message-after-hide-timeout-expected-blink.txt +++ b/content/test/data/accessibility/html/form-validation-message-after-hide-timeout-expected-blink.txt
@@ -1,12 +1,11 @@ rootWebArea -++genericContainer ignored -++++form -++++++labelText -++++++++staticText name='Pet name:' -++++++++++inlineTextBox name='Pet name:' -++++++textField required name='Pet name:' errormessageId=alert invalidState=true -++++++++genericContainer +++form +++++labelText +++++++staticText name='Pet name:' +++++++++inlineTextBox name='Pet name:' +++++textField required name='Pet name:' errormessageId=alert invalidState=true ++++++genericContainer -++++++++staticText name='ready' -++++++++++inlineTextBox name='ready' +++++genericContainer +++++++staticText name='ready' +++++++++inlineTextBox name='ready' ++alert invisible containerLiveRelevant='additions' containerLiveStatus='assertive' liveRelevant='additions' liveStatus='assertive' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true
diff --git a/content/test/data/accessibility/html/form-validation-message-expected-blink.txt b/content/test/data/accessibility/html/form-validation-message-expected-blink.txt index fcfdb84..36557eec 100644 --- a/content/test/data/accessibility/html/form-validation-message-expected-blink.txt +++ b/content/test/data/accessibility/html/form-validation-message-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++form -++++++labelText -++++++++staticText name='Pet name:' -++++++++++inlineTextBox name='Pet name:' -++++++textField required name='Pet name:' errormessageId=alert invalidState=true -++++++++genericContainer +++form +++++labelText +++++++staticText name='Pet name:' +++++++++inlineTextBox name='Pet name:' +++++textField required name='Pet name:' errormessageId=alert invalidState=true +++++++genericContainer ++alert containerLiveRelevant='additions' containerLiveStatus='assertive' name='Please enter pet name' liveRelevant='additions' liveStatus='assertive' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true
diff --git a/content/test/data/accessibility/html/frameset-expected-blink.txt b/content/test/data/accessibility/html/frameset-expected-blink.txt index 26ba151..a5df2e9 100644 --- a/content/test/data/accessibility/html/frameset-expected-blink.txt +++ b/content/test/data/accessibility/html/frameset-expected-blink.txt
@@ -1,28 +1,26 @@ rootWebArea ++iframe ++++rootWebArea -++++++genericContainer ignored -++++++++paragraph -++++++++++staticText name='My favorite browser is ' -++++++++++++inlineTextBox name='My favorite browser is ' -++++++++++contentDeletion -++++++++++++staticText name='ABC' -++++++++++++++inlineTextBox name='ABC' -++++++++++staticText name=' ' -++++++++++++inlineTextBox name=' ' -++++++++++contentInsertion -++++++++++++staticText name='Chrome' -++++++++++++++inlineTextBox name='Chrome' -++++++++++staticText name='!' -++++++++++++inlineTextBox name='!' +++++++paragraph +++++++++staticText name='My favorite browser is ' +++++++++++inlineTextBox name='My favorite browser is ' +++++++++contentDeletion +++++++++++staticText name='ABC' +++++++++++++inlineTextBox name='ABC' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++contentInsertion +++++++++++staticText name='Chrome' +++++++++++++inlineTextBox name='Chrome' +++++++++staticText name='!' +++++++++++inlineTextBox name='!' ++iframe ++++rootWebArea -++++++genericContainer ignored -++++++++paragraph -++++++++++staticText name='This test is to check ' -++++++++++++inlineTextBox name='This test is to check ' -++++++++++mark -++++++++++++staticText name='mark tag' -++++++++++++++inlineTextBox name='mark tag' -++++++++++staticText name='.' -++++++++++++inlineTextBox name='.' +++++++paragraph +++++++++staticText name='This test is to check ' +++++++++++inlineTextBox name='This test is to check ' +++++++++mark +++++++++++staticText name='mark tag' +++++++++++++inlineTextBox name='mark tag' +++++++++staticText name='.' +++++++++++inlineTextBox name='.'
diff --git a/content/test/data/accessibility/html/header-expected-blink.txt b/content/test/data/accessibility/html/header-expected-blink.txt index acaa5ef..235b808 100644 --- a/content/test/data/accessibility/html/header-expected-blink.txt +++ b/content/test/data/accessibility/html/header-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++banner -++++++staticText name='Chromium Browser' -++++++++inlineTextBox name='Chromium Browser' +++banner +++++staticText name='Chromium Browser' +++++++inlineTextBox name='Chromium Browser' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/header-inside-other-section-expected-blink.txt b/content/test/data/accessibility/html/header-inside-other-section-expected-blink.txt index f268d32f..0a5439a6 100644 --- a/content/test/data/accessibility/html/header-inside-other-section-expected-blink.txt +++ b/content/test/data/accessibility/html/header-inside-other-section-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++article -++++++genericContainer -++++++++paragraph -++++++++++staticText name='Header inside article.' -++++++++++++inlineTextBox name='Header inside article.' -++++region -++++++genericContainer -++++++++paragraph -++++++++++staticText name='Header inside section.' -++++++++++++inlineTextBox name='Header inside section.' -++++main -++++++genericContainer -++++++++paragraph -++++++++++staticText name='Header inside main.' -++++++++++++inlineTextBox name='Header inside main.' +++article +++++genericContainer +++++++paragraph +++++++++staticText name='Header inside article.' +++++++++++inlineTextBox name='Header inside article.' +++region +++++genericContainer +++++++paragraph +++++++++staticText name='Header inside section.' +++++++++++inlineTextBox name='Header inside section.' +++main +++++genericContainer +++++++paragraph +++++++++staticText name='Header inside main.' +++++++++++inlineTextBox name='Header inside main.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/heading-expected-blink.txt b/content/test/data/accessibility/html/heading-expected-blink.txt index f46427e4..634f065c 100644 --- a/content/test/data/accessibility/html/heading-expected-blink.txt +++ b/content/test/data/accessibility/html/heading-expected-blink.txt
@@ -1,20 +1,19 @@ rootWebArea -++genericContainer ignored -++++heading name='Heading 1' hierarchicalLevel=1 -++++++staticText name='Heading 1' -++++++++inlineTextBox name='Heading 1' -++++heading name='Heading 2' hierarchicalLevel=2 -++++++staticText name='Heading 2' -++++++++inlineTextBox name='Heading 2' -++++heading name='Heading 3' hierarchicalLevel=3 -++++++staticText name='Heading 3' -++++++++inlineTextBox name='Heading 3' -++++heading name='Heading 4' hierarchicalLevel=4 -++++++staticText name='Heading 4' -++++++++inlineTextBox name='Heading 4' -++++heading name='Heading 5' hierarchicalLevel=5 -++++++staticText name='Heading 5' -++++++++inlineTextBox name='Heading 5' -++++heading name='Heading 6' hierarchicalLevel=6 -++++++staticText name='Heading 6' -++++++++inlineTextBox name='Heading 6' +++heading name='Heading 1' hierarchicalLevel=1 +++++staticText name='Heading 1' +++++++inlineTextBox name='Heading 1' +++heading name='Heading 2' hierarchicalLevel=2 +++++staticText name='Heading 2' +++++++inlineTextBox name='Heading 2' +++heading name='Heading 3' hierarchicalLevel=3 +++++staticText name='Heading 3' +++++++inlineTextBox name='Heading 3' +++heading name='Heading 4' hierarchicalLevel=4 +++++staticText name='Heading 4' +++++++inlineTextBox name='Heading 4' +++heading name='Heading 5' hierarchicalLevel=5 +++++staticText name='Heading 5' +++++++inlineTextBox name='Heading 5' +++heading name='Heading 6' hierarchicalLevel=6 +++++staticText name='Heading 6' +++++++inlineTextBox name='Heading 6' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/hr-expected-blink.txt b/content/test/data/accessibility/html/hr-expected-blink.txt index f22f097..3c7c11e 100644 --- a/content/test/data/accessibility/html/hr-expected-blink.txt +++ b/content/test/data/accessibility/html/hr-expected-blink.txt
@@ -1,13 +1,12 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='Before.' -++++++++inlineTextBox name='Before.' -++++splitter horizontal name='Dividing line' -++++paragraph -++++++staticText name='Middle.' -++++++++inlineTextBox name='Middle.' -++++splitter horizontal -++++paragraph -++++++staticText name='After.' -++++++++inlineTextBox name='After.' +++paragraph +++++staticText name='Before.' +++++++inlineTextBox name='Before.' +++splitter horizontal name='Dividing line' +++paragraph +++++staticText name='Middle.' +++++++inlineTextBox name='Middle.' +++splitter horizontal +++paragraph +++++staticText name='After.' +++++++inlineTextBox name='After.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/i-expected-blink.txt b/content/test/data/accessibility/html/i-expected-blink.txt index d2c997e1..fcb4c61 100644 --- a/content/test/data/accessibility/html/i-expected-blink.txt +++ b/content/test/data/accessibility/html/i-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='This is to check ' -++++++++inlineTextBox name='This is to check ' -++++++staticText name='italic property' -++++++++inlineTextBox name='italic property' -++++++staticText name=' using i tag.' -++++++++inlineTextBox name=' using i tag.' +++paragraph +++++staticText name='This is to check ' +++++++inlineTextBox name='This is to check ' +++++staticText name='italic property' +++++++inlineTextBox name='italic property' +++++staticText name=' using i tag.' +++++++inlineTextBox name=' using i tag.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/id-expected-blink.txt b/content/test/data/accessibility/html/id-expected-blink.txt index faabed1..f367acb 100644 --- a/content/test/data/accessibility/html/id-expected-blink.txt +++ b/content/test/data/accessibility/html/id-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='No id' -++++++++inlineTextBox name='No id' -++++paragraph -++++++staticText name='Has id' -++++++++inlineTextBox name='Has id' +++paragraph +++++staticText name='No id' +++++++inlineTextBox name='No id' +++paragraph +++++staticText name='Has id' +++++++inlineTextBox name='Has id' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/iframe-coordinates-expected-blink.txt b/content/test/data/accessibility/html/iframe-coordinates-expected-blink.txt index ced6379..365384f 100644 --- a/content/test/data/accessibility/html/iframe-coordinates-expected-blink.txt +++ b/content/test/data/accessibility/html/iframe-coordinates-expected-blink.txt
@@ -1,18 +1,16 @@ rootWebArea location=(0, 0) scrollX=0 scrollY=0 -++genericContainer ignored location=(0, 0) -++++genericContainer location=(0, 0) size=(300, 150) -++++++button location=(25, 25) size=(250, 50) unclippedSize=(250, 50) name='Button' -++++genericContainer location=(0, 150) size=(300, 150) -++++++button location=(25, 175) size=(250, 50) unclippedSize=(250, 50) name='Button' -++++genericContainer location=(0, 300) size=(300, 150) -++++++iframe location=(0, 300) size=(300, 100) unclippedSize=(300, 100) -++++++++rootWebArea location=(0, 0) size=(300, 100) unclippedSize=(300, 100) scrollX=0 scrollY=0 -++++++++++genericContainer ignored location=(0, 0) size=(300, 100) -++++++++++++genericContainer location=(0, 0) size=(300, 100) unclippedSize=(300, 100) -++++++++++++++button location=(25, 25) size=(250, 50) unclippedSize=(250, 50) name='Ordinary Button' -++++genericContainer location=(0, 450) size=(300, 150) -++++++iframe location=(0, 450) size=(150, 50) -++++++++rootWebArea location=(0, 0) size=(150, 50) scrollX=150 scrollY=50 -++++++++++genericContainer ignored location=(0, 0) -++++++++++++genericContainer location=(0, 0) size=(300, 100) unclippedLocation=(-150, 400) unclippedSize=(300, 100) -++++++++++++++button location=(25, 25) size=(250, 50) unclippedLocation=(-125, 425) unclippedSize=(250, 50) name='Scrolled Button' +++genericContainer location=(0, 0) size=(300, 150) +++++button location=(25, 25) size=(250, 50) unclippedSize=(250, 50) name='Button' +++genericContainer location=(0, 150) size=(300, 150) +++++button location=(25, 175) size=(250, 50) unclippedSize=(250, 50) name='Button' +++genericContainer location=(0, 300) size=(300, 150) +++++iframe location=(0, 300) size=(300, 100) unclippedSize=(300, 100) +++++++rootWebArea location=(0, 0) size=(300, 100) unclippedSize=(300, 100) scrollX=0 scrollY=0 +++++++++genericContainer location=(0, 0) size=(300, 100) unclippedSize=(300, 100) +++++++++++button location=(25, 25) size=(250, 50) unclippedSize=(250, 50) name='Ordinary Button' +++genericContainer location=(0, 450) size=(300, 150) +++++iframe location=(0, 450) size=(150, 50) +++++++rootWebArea location=(0, 0) size=(150, 50) scrollX=150 scrollY=50 +++++++++genericContainer location=(0, 0) size=(300, 100) unclippedLocation=(-150, 400) unclippedSize=(300, 100) +++++++++++button location=(25, 25) size=(250, 50) unclippedLocation=(-125, 425) unclippedSize=(250, 50) name='Scrolled Button' +<-- End-of-file -->
diff --git a/content/test/data/accessibility/html/iframe-cross-process-expected-blink.txt b/content/test/data/accessibility/html/iframe-cross-process-expected-blink.txt index 9299f04..4746eee 100644 --- a/content/test/data/accessibility/html/iframe-cross-process-expected-blink.txt +++ b/content/test/data/accessibility/html/iframe-cross-process-expected-blink.txt
@@ -1,14 +1,13 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='Before frame' -++++++++inlineTextBox name='Before frame' -++++genericContainer -++++++iframe name='Cross-process iframe' -++++++++rootWebArea -++++++++++genericContainer -++++++++++++staticText name='Text in iframe' -++++++++++++++inlineTextBox name='Text in iframe' -++++paragraph -++++++staticText name='After frame' -++++++++inlineTextBox name='After frame' +++paragraph +++++staticText name='Before frame' +++++++inlineTextBox name='Before frame' +++genericContainer +++++iframe name='Cross-process iframe' +++++++rootWebArea +++++++++genericContainer +++++++++++staticText name='Text in iframe' +++++++++++++inlineTextBox name='Text in iframe' +++paragraph +++++staticText name='After frame' +++++++inlineTextBox name='After frame'
diff --git a/content/test/data/accessibility/html/iframe-expected-blink.txt b/content/test/data/accessibility/html/iframe-expected-blink.txt index 739747d..07ad073 100644 --- a/content/test/data/accessibility/html/iframe-expected-blink.txt +++ b/content/test/data/accessibility/html/iframe-expected-blink.txt
@@ -2,4 +2,3 @@ ++genericContainer ++++iframe name='Empty iframe' ++++++rootWebArea -++++++++genericContainer ignored
diff --git a/content/test/data/accessibility/html/iframe-padding-expected-blink.txt b/content/test/data/accessibility/html/iframe-padding-expected-blink.txt index 3624f510..022ad4eb 100644 --- a/content/test/data/accessibility/html/iframe-padding-expected-blink.txt +++ b/content/test/data/accessibility/html/iframe-padding-expected-blink.txt
@@ -1,14 +1,9 @@ rootWebArea pageLocation=(0, 0) -++genericContainer ignored -++++genericContainer ignored -++++++iframe pageLocation=(0, 0) pageSize=(300, 100) -++++++++rootWebArea pageLocation=(0, 0) pageSize=(300, 100) -++++++++++genericContainer ignored -++++++++++++genericContainer pageLocation=(0, 0) pageSize=(300, 100) -++++++++++++++button pageLocation=(25, 25) pageSize=(250, 50) name='Ordinary Button' -++++genericContainer ignored -++++++iframe pageLocation=(30, 230) pageSize=(300, 100) -++++++++rootWebArea pageLocation=(30, 230) pageSize=(300, 100) -++++++++++genericContainer ignored -++++++++++++genericContainer pageLocation=(30, 230) pageSize=(300, 100) -++++++++++++++button pageLocation=(55, 255) pageSize=(250, 50) name='Second Button' +++iframe pageLocation=(0, 0) pageSize=(300, 100) +++++rootWebArea pageLocation=(0, 0) pageSize=(300, 100) +++++++genericContainer pageLocation=(0, 0) pageSize=(300, 100) +++++++++button pageLocation=(25, 25) pageSize=(250, 50) name='Ordinary Button' +++iframe pageLocation=(30, 230) pageSize=(300, 100) +++++rootWebArea pageLocation=(30, 230) pageSize=(300, 100) +++++++genericContainer pageLocation=(30, 230) pageSize=(300, 100) +++++++++button pageLocation=(55, 255) pageSize=(250, 50) name='Second Button'
diff --git a/content/test/data/accessibility/html/iframe-presentational-expected-blink.txt b/content/test/data/accessibility/html/iframe-presentational-expected-blink.txt index 9c399f4..ae9918d 100644 --- a/content/test/data/accessibility/html/iframe-presentational-expected-blink.txt +++ b/content/test/data/accessibility/html/iframe-presentational-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea ++genericContainer ++++iframePresentational -++++++rootWebArea -++++++++genericContainer ignored +++++++rootWebArea \ No newline at end of file
diff --git a/content/test/data/accessibility/html/iframe-transform-cross-process-expected-blink.txt b/content/test/data/accessibility/html/iframe-transform-cross-process-expected-blink.txt index 9ef3039..0603c365 100644 --- a/content/test/data/accessibility/html/iframe-transform-cross-process-expected-blink.txt +++ b/content/test/data/accessibility/html/iframe-transform-cross-process-expected-blink.txt
@@ -1,10 +1,7 @@ rootWebArea pageLocation=(0, 0) -++genericContainer ignored -++++iframe pageLocation=(0, 0) -++++++rootWebArea pageLocation=(0, 0) -++++++++genericContainer ignored -++++++++++image pageLocation=(10, 10) pageSize=(100, 50) -++++iframe pageLocation=(0, 250) transform -++++++rootWebArea pageLocation=(0, 250) -++++++++genericContainer ignored -++++++++++image pageLocation=(15, 265) pageSize=(150, 75) +++iframe pageLocation=(0, 0) +++++rootWebArea pageLocation=(0, 0) +++++++image pageLocation=(10, 10) pageSize=(100, 50) +++iframe pageLocation=(0, 250) transform +++++rootWebArea pageLocation=(0, 250) +++++++image pageLocation=(15, 265) pageSize=(150, 75)
diff --git a/content/test/data/accessibility/html/iframe-transform-expected-blink.txt b/content/test/data/accessibility/html/iframe-transform-expected-blink.txt index 9ef3039..0603c365 100644 --- a/content/test/data/accessibility/html/iframe-transform-expected-blink.txt +++ b/content/test/data/accessibility/html/iframe-transform-expected-blink.txt
@@ -1,10 +1,7 @@ rootWebArea pageLocation=(0, 0) -++genericContainer ignored -++++iframe pageLocation=(0, 0) -++++++rootWebArea pageLocation=(0, 0) -++++++++genericContainer ignored -++++++++++image pageLocation=(10, 10) pageSize=(100, 50) -++++iframe pageLocation=(0, 250) transform -++++++rootWebArea pageLocation=(0, 250) -++++++++genericContainer ignored -++++++++++image pageLocation=(15, 265) pageSize=(150, 75) +++iframe pageLocation=(0, 0) +++++rootWebArea pageLocation=(0, 0) +++++++image pageLocation=(10, 10) pageSize=(100, 50) +++iframe pageLocation=(0, 250) transform +++++rootWebArea pageLocation=(0, 250) +++++++image pageLocation=(15, 265) pageSize=(150, 75)
diff --git a/content/test/data/accessibility/html/iframe-transform-nested-cross-process-expected-blink.txt b/content/test/data/accessibility/html/iframe-transform-nested-cross-process-expected-blink.txt index 4443758..8cb9c0b 100644 --- a/content/test/data/accessibility/html/iframe-transform-nested-cross-process-expected-blink.txt +++ b/content/test/data/accessibility/html/iframe-transform-nested-cross-process-expected-blink.txt
@@ -1,9 +1,6 @@ rootWebArea pageLocation=(0, 0) -++genericContainer ignored -++++iframe pageLocation=(0, 100) transform -++++++rootWebArea pageLocation=(0, 100) -++++++++genericContainer ignored -++++++++++iframe pageLocation=(200, 100) transform -++++++++++++rootWebArea pageLocation=(200, 100) -++++++++++++++genericContainer ignored -++++++++++++++++image pageLocation=(240, 140) pageSize=(400, 200) +++iframe pageLocation=(0, 100) transform +++++rootWebArea pageLocation=(0, 100) +++++++iframe pageLocation=(200, 100) transform +++++++++rootWebArea pageLocation=(200, 100) +++++++++++image pageLocation=(240, 140) pageSize=(400, 200)
diff --git a/content/test/data/accessibility/html/iframe-transform-nested-expected-blink.txt b/content/test/data/accessibility/html/iframe-transform-nested-expected-blink.txt index 4443758..8cb9c0b 100644 --- a/content/test/data/accessibility/html/iframe-transform-nested-expected-blink.txt +++ b/content/test/data/accessibility/html/iframe-transform-nested-expected-blink.txt
@@ -1,9 +1,6 @@ rootWebArea pageLocation=(0, 0) -++genericContainer ignored -++++iframe pageLocation=(0, 100) transform -++++++rootWebArea pageLocation=(0, 100) -++++++++genericContainer ignored -++++++++++iframe pageLocation=(200, 100) transform -++++++++++++rootWebArea pageLocation=(200, 100) -++++++++++++++genericContainer ignored -++++++++++++++++image pageLocation=(240, 140) pageSize=(400, 200) +++iframe pageLocation=(0, 100) transform +++++rootWebArea pageLocation=(0, 100) +++++++iframe pageLocation=(200, 100) transform +++++++++rootWebArea pageLocation=(200, 100) +++++++++++image pageLocation=(240, 140) pageSize=(400, 200)
diff --git a/content/test/data/accessibility/html/iframe-transform-scrolled-expected-blink.txt b/content/test/data/accessibility/html/iframe-transform-scrolled-expected-blink.txt index 7871c1c..9baf1cab 100644 --- a/content/test/data/accessibility/html/iframe-transform-scrolled-expected-blink.txt +++ b/content/test/data/accessibility/html/iframe-transform-scrolled-expected-blink.txt
@@ -2,6 +2,5 @@ ++genericContainer pageLocation=(0, 0) ++++iframe pageLocation=(300, 300) transform ++++++rootWebArea pageLocation=(300, 300) scrollX=150 scrollY=50 -++++++++genericContainer ignored -++++++++++genericContainer pageLocation=(300, 300) -++++++++++++button pageLocation=(300, 300) pageSize=(250, 50) name='Scrolled Button' +++++++++genericContainer pageLocation=(300, 300) +++++++++++button pageLocation=(300, 300) pageSize=(250, 50) name='Scrolled Button'
diff --git a/content/test/data/accessibility/html/img-empty-alt-expected-blink.txt b/content/test/data/accessibility/html/img-empty-alt-expected-blink.txt index d51d33a..46cda49 100644 --- a/content/test/data/accessibility/html/img-empty-alt-expected-blink.txt +++ b/content/test/data/accessibility/html/img-empty-alt-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea ++genericContainer -++++presentational ignored name='' ++++image name='' ++++image name='' ++++image
diff --git a/content/test/data/accessibility/html/img-link-empty-alt-expected-blink.txt b/content/test/data/accessibility/html/img-link-empty-alt-expected-blink.txt index b2d8f10b..e62107f 100644 --- a/content/test/data/accessibility/html/img-link-empty-alt-expected-blink.txt +++ b/content/test/data/accessibility/html/img-link-empty-alt-expected-blink.txt
@@ -1,7 +1,6 @@ rootWebArea ++genericContainer ++++link name='unread ' -++++++presentational ignored name='' ++++++staticText name='unread ' ++++++++inlineTextBox name='unread ' ++++link name='read '
diff --git a/content/test/data/accessibility/html/in-page-links-expected-blink.txt b/content/test/data/accessibility/html/in-page-links-expected-blink.txt index 5930556..1f71bc3 100644 --- a/content/test/data/accessibility/html/in-page-links-expected-blink.txt +++ b/content/test/data/accessibility/html/in-page-links-expected-blink.txt
@@ -1,53 +1,52 @@ rootWebArea -++genericContainer ignored -++++link name='Empty anchor' inPageLinkTargetId=anchor -++++++staticText name='Empty anchor' -++++++++inlineTextBox name='Empty anchor' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++link name='Anchor with content' inPageLinkTargetId=anchor +++link name='Empty anchor' inPageLinkTargetId=anchor +++++staticText name='Empty anchor' +++++++inlineTextBox name='Empty anchor' +++staticText name=' ' +++++inlineTextBox name=' ' +++link name='Anchor with content' inPageLinkTargetId=anchor +++++staticText name='Anchor with content' +++++++inlineTextBox name='Anchor with content' +++staticText name=' ' +++++inlineTextBox name=' ' +++link name='Anchor with ID' inPageLinkTargetId=anchor +++++staticText name='Anchor with ID' +++++++inlineTextBox name='Anchor with ID' +++staticText name=' ' +++++inlineTextBox name=' ' +++link name='Empty span' inPageLinkTargetId=genericContainer +++++staticText name='Empty span' +++++++inlineTextBox name='Empty span' +++staticText name=' ' +++++inlineTextBox name=' ' +++link name='Span with content' inPageLinkTargetId=genericContainer +++++staticText name='Span with content' +++++++inlineTextBox name='Span with content' +++staticText name=' ' +++++inlineTextBox name=' ' +++link name='Paragraph with content' inPageLinkTargetId=paragraph +++++staticText name='Paragraph with content' +++++++inlineTextBox name='Paragraph with content' +++paragraph +++++anchor +++++staticText name='After empty anchor' +++++++inlineTextBox name='After empty anchor' +++paragraph +++++anchor name='Anchor with content' ++++++staticText name='Anchor with content' ++++++++inlineTextBox name='Anchor with content' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++link name='Anchor with ID' inPageLinkTargetId=anchor +++paragraph +++++anchor name='Anchor with ID' ++++++staticText name='Anchor with ID' ++++++++inlineTextBox name='Anchor with ID' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++link name='Empty span' inPageLinkTargetId=genericContainer -++++++staticText name='Empty span' -++++++++inlineTextBox name='Empty span' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++link name='Span with content' inPageLinkTargetId=genericContainer +++paragraph +++++genericContainer +++++staticText name='After empty span' +++++++inlineTextBox name='After empty span' +++paragraph +++++genericContainer ++++++staticText name='Span with content' ++++++++inlineTextBox name='Span with content' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++link name='Paragraph with content' inPageLinkTargetId=paragraph -++++++staticText name='Paragraph with content' -++++++++inlineTextBox name='Paragraph with content' -++++paragraph -++++++anchor -++++++staticText name='After empty anchor' -++++++++inlineTextBox name='After empty anchor' -++++paragraph -++++++anchor name='Anchor with content' -++++++++staticText name='Anchor with content' -++++++++++inlineTextBox name='Anchor with content' -++++paragraph -++++++anchor name='Anchor with ID' -++++++++staticText name='Anchor with ID' -++++++++++inlineTextBox name='Anchor with ID' -++++paragraph -++++++genericContainer -++++++staticText name='After empty span' -++++++++inlineTextBox name='After empty span' -++++paragraph -++++++genericContainer -++++++++staticText name='Span with content' -++++++++++inlineTextBox name='Span with content' -++++paragraph -++++++staticText name='Paragraph with content' -++++++++inlineTextBox name='Paragraph with content' +++paragraph +++++staticText name='Paragraph with content' +++++++inlineTextBox name='Paragraph with content' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-button-in-menu-expected-blink.txt b/content/test/data/accessibility/html/input-button-in-menu-expected-blink.txt index 450edaa7..8abf0a2 100644 --- a/content/test/data/accessibility/html/input-button-in-menu-expected-blink.txt +++ b/content/test/data/accessibility/html/input-button-in-menu-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++menuItem name='Button in menu element' -++++menu -++++++menuItem name='Button in element with menu role' +++genericContainer +++++menuItem name='Button in menu element' +++menu +++++menuItem name='Button in element with menu role' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt index 4dc5dfc..83a2836a 100644 --- a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt +++ b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++checkBox name='Checkbox1' checkedState=false -++++++checkBox name='Checkbox2' checkedState=true -++++menu -++++++checkBox name='Checkbox3' checkedState=true -++++++checkBox name='Checkbox4' checkedState=mixed +++genericContainer +++++checkBox name='Checkbox1' checkedState=false +++++checkBox name='Checkbox2' checkedState=true +++menu +++++checkBox name='Checkbox3' checkedState=true +++++checkBox name='Checkbox4' checkedState=mixed \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-date-with-popup-open-expected-blink.txt b/content/test/data/accessibility/html/input-date-with-popup-open-expected-blink.txt index 71aafb7..43a2147 100644 --- a/content/test/data/accessibility/html/input-date-with-popup-open-expected-blink.txt +++ b/content/test/data/accessibility/html/input-date-with-popup-open-expected-blink.txt
@@ -18,30 +18,28 @@ ++++++++++++++inlineTextBox name='2008' ++++++popUpButton name='Show date picker' ++++++rootWebArea -++++++++genericContainer ignored +++++++++genericContainer ++++++++++genericContainer ++++++++++++genericContainer -++++++++++++++genericContainer ignored +++++++++++++++button name='Show month selection panel' +++++++++++++button name='Show previous month' +++++++++++++button name='Today' +++++++++++++button name='Show next month' +++++++++++++grid +++++++++++++++genericContainer ++++++++++++++++genericContainer -++++++++++++++++++button name='Show month selection panel' -++++++++++++++++button name='Show previous month' -++++++++++++++++button name='Today' -++++++++++++++++button name='Show next month' -++++++++++++++grid +++++++++++++++++++staticText name='Sun' ++++++++++++++++genericContainer -++++++++++++++++++genericContainer -++++++++++++++++++++staticText name='Sun' -++++++++++++++++++genericContainer -++++++++++++++++++++staticText name='Mon' -++++++++++++++++++genericContainer -++++++++++++++++++++staticText name='Tue' -++++++++++++++++++genericContainer -++++++++++++++++++++staticText name='Wed' -++++++++++++++++++genericContainer -++++++++++++++++++++staticText name='Thu' -++++++++++++++++++genericContainer -++++++++++++++++++++staticText name='Fri' -++++++++++++++++++genericContainer -++++++++++++++++++++staticText name='Sat' +++++++++++++++++++staticText name='Mon' ++++++++++++++++genericContainer -++++++++++++++++++genericContainer +++++++++++++++++++staticText name='Tue' +++++++++++++++++genericContainer +++++++++++++++++++staticText name='Wed' +++++++++++++++++genericContainer +++++++++++++++++++staticText name='Thu' +++++++++++++++++genericContainer +++++++++++++++++++staticText name='Fri' +++++++++++++++++genericContainer +++++++++++++++++++staticText name='Sat' +++++++++++++++genericContainer +++++++++++++++++genericContainer
diff --git a/content/test/data/accessibility/html/input-image-button-in-menu-expected-blink.txt b/content/test/data/accessibility/html/input-image-button-in-menu-expected-blink.txt index 48098f8..addb15d 100644 --- a/content/test/data/accessibility/html/input-image-button-in-menu-expected-blink.txt +++ b/content/test/data/accessibility/html/input-image-button-in-menu-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++button name='Bullet' -++++menu -++++++button name='Bullet' +++genericContainer +++++button name='Bullet' +++menu +++++button name='Bullet' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-radio-expected-blink.txt b/content/test/data/accessibility/html/input-radio-expected-blink.txt index aaae13d..0fa43c4 100644 --- a/content/test/data/accessibility/html/input-radio-expected-blink.txt +++ b/content/test/data/accessibility/html/input-radio-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++form -++++++radioButton checkedState=false radioGroupIds=radioButton -++++++staticText name='Radio1' -++++++++inlineTextBox name='Radio1' -++++++lineBreak name='<newline>' -++++++++inlineTextBox name='<newline>' -++++++radioButton checkedState=false radioGroupIds=radioButton -++++++staticText name='Radio2' -++++++++inlineTextBox name='Radio2' -++++form -++++++radioButton name='Radio3' checkedState=false radioGroupIds=radioButton,radioButton -++++++radioButton name='Radio4' checkedState=true radioGroupIds=radioButton,radioButton -++++form -++++++radioButton name='Radio5' checkedState=false radioGroupIds=radioButton -++++++radioButton name='Radio6' checkedState=true radioGroupIds=radioButton +++form +++++radioButton checkedState=false radioGroupIds=radioButton +++++staticText name='Radio1' +++++++inlineTextBox name='Radio1' +++++lineBreak name='<newline>' +++++++inlineTextBox name='<newline>' +++++radioButton checkedState=false radioGroupIds=radioButton +++++staticText name='Radio2' +++++++inlineTextBox name='Radio2' +++form +++++radioButton name='Radio3' checkedState=false radioGroupIds=radioButton,radioButton +++++radioButton name='Radio4' checkedState=true radioGroupIds=radioButton,radioButton +++form +++++radioButton name='Radio5' checkedState=false radioGroupIds=radioButton +++++radioButton name='Radio6' checkedState=true radioGroupIds=radioButton \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-radio-in-menu-expected-blink.txt b/content/test/data/accessibility/html/input-radio-in-menu-expected-blink.txt index 85ff50a..94aaa4e5 100644 --- a/content/test/data/accessibility/html/input-radio-in-menu-expected-blink.txt +++ b/content/test/data/accessibility/html/input-radio-in-menu-expected-blink.txt
@@ -1,14 +1,13 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++menuItemRadio checkedState=true -++++++staticText name='Radio0 ' -++++++++inlineTextBox name='Radio0 ' -++++++menuItemRadio checkedState=false -++++++staticText name='Radio1 ' -++++++++inlineTextBox name='Radio1 ' -++++++radioButton name='Radio2' checkedState=false -++++menu -++++++radioButton name='Radio3' checkedState=false -++++++menuItemRadio checkedState=false -++++++menuItemRadio checkedState=true +++genericContainer +++++menuItemRadio checkedState=true +++++staticText name='Radio0 ' +++++++inlineTextBox name='Radio0 ' +++++menuItemRadio checkedState=false +++++staticText name='Radio1 ' +++++++inlineTextBox name='Radio1 ' +++++radioButton name='Radio2' checkedState=false +++menu +++++radioButton name='Radio3' checkedState=false +++++menuItemRadio checkedState=false +++++menuItemRadio checkedState=true \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-submit-expected-blink.txt b/content/test/data/accessibility/html/input-submit-expected-blink.txt index 4516ae7..aa02c8e 100644 --- a/content/test/data/accessibility/html/input-submit-expected-blink.txt +++ b/content/test/data/accessibility/html/input-submit-expected-blink.txt
@@ -1,13 +1,12 @@ rootWebArea -++genericContainer ignored -++++form -++++++textField -++++++++genericContainer -++++++button default name='First submit in a form is a valid default button' -++++++button name='Second submit in a form not a valid default button' -++++form -++++++textField -++++++++genericContainer -++++++button default name='First image button in a form is a valid default button' -++++++button name='Second image button in a form not a valid default button' -++++button name='Submit outside of form not a valid default button' +++form +++++textField +++++++genericContainer +++++button default name='First submit in a form is a valid default button' +++++button name='Second submit in a form not a valid default button' +++form +++++textField +++++++genericContainer +++++button default name='First image button in a form is a valid default button' +++++button name='Second image button in a form not a valid default button' +++button name='Submit outside of form not a valid default button' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-text-name-calc-expected-blink.txt b/content/test/data/accessibility/html/input-text-name-calc-expected-blink.txt index fac8550..5902d255 100644 --- a/content/test/data/accessibility/html/input-text-name-calc-expected-blink.txt +++ b/content/test/data/accessibility/html/input-text-name-calc-expected-blink.txt
@@ -1,22 +1,21 @@ rootWebArea -++genericContainer ignored -++++textField name='Title0' -++++++genericContainer -++++textField description='Title1' name='Label1' descriptionFrom=attribute -++++++genericContainer -++++textField description='Title2' name='AriaLabel2' descriptionFrom=attribute -++++++genericContainer -++++textField description='Title3' name='LabelledBy3' descriptionFrom=attribute -++++++genericContainer -++++textField name='Placeholder4' -++++++genericContainer -++++textField name='ARIA Placeholder4a' -++++++genericContainer -++++textField name='Placeholder4b' -++++++genericContainer -++++textField description='Title5' name='Placeholder5' descriptionFrom=attribute -++++++genericContainer -++++textField description='DescribedBy6' name='LabelledBy6' descriptionFrom=relatedElement -++++++genericContainer -++++textField description='DescribedBy7' name='AriaLabel7' descriptionFrom=relatedElement -++++++genericContainer +++textField name='Title0' +++++genericContainer +++textField description='Title1' name='Label1' descriptionFrom=attribute +++++genericContainer +++textField description='Title2' name='AriaLabel2' descriptionFrom=attribute +++++genericContainer +++textField description='Title3' name='LabelledBy3' descriptionFrom=attribute +++++genericContainer +++textField name='Placeholder4' +++++genericContainer +++textField name='ARIA Placeholder4a' +++++genericContainer +++textField name='Placeholder4b' +++++genericContainer +++textField description='Title5' name='Placeholder5' descriptionFrom=attribute +++++genericContainer +++textField description='DescribedBy6' name='LabelledBy6' descriptionFrom=relatedElement +++++genericContainer +++textField description='DescribedBy7' name='AriaLabel7' descriptionFrom=relatedElement +++++genericContainer \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-types-expected-blink.txt b/content/test/data/accessibility/html/input-types-expected-blink.txt index 6a11448..048d3c9 100644 --- a/content/test/data/accessibility/html/input-types-expected-blink.txt +++ b/content/test/data/accessibility/html/input-types-expected-blink.txt
@@ -70,4 +70,4 @@ ++++++staticText name='Url: ' ++++++++inlineTextBox name='Url: ' ++++++textField name='Url:' -++++++++genericContainer +++++++++genericContainer \ No newline at end of file
diff --git a/content/test/data/accessibility/html/ins-expected-blink.txt b/content/test/data/accessibility/html/ins-expected-blink.txt index 296df33..31227a5 100644 --- a/content/test/data/accessibility/html/ins-expected-blink.txt +++ b/content/test/data/accessibility/html/ins-expected-blink.txt
@@ -1,15 +1,14 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='My favorite browser is ' -++++++++inlineTextBox name='My favorite browser is ' -++++++contentDeletion -++++++++staticText name='ABC' -++++++++++inlineTextBox name='ABC' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++contentInsertion -++++++++staticText name='Chrome' -++++++++++inlineTextBox name='Chrome' -++++++staticText name='!' -++++++++inlineTextBox name='!' +++paragraph +++++staticText name='My favorite browser is ' +++++++inlineTextBox name='My favorite browser is ' +++++contentDeletion +++++++staticText name='ABC' +++++++++inlineTextBox name='ABC' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++contentInsertion +++++++staticText name='Chrome' +++++++++inlineTextBox name='Chrome' +++++staticText name='!' +++++++inlineTextBox name='!'
diff --git a/content/test/data/accessibility/html/label-with-selected-option-expected-blink.txt b/content/test/data/accessibility/html/label-with-selected-option-expected-blink.txt index 552fc2a..a9906a5b 100644 --- a/content/test/data/accessibility/html/label-with-selected-option-expected-blink.txt +++ b/content/test/data/accessibility/html/label-with-selected-option-expected-blink.txt
@@ -1,34 +1,33 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++checkBox name='Test 1: Flash the screen 2 times.' checkedState=false -++++++popUpButton collapsed value='2' -++++++++menuListPopup invisible -++++++++++menuListOption invisible name='1' selected=false -++++++++++menuListOption name='2' selected=true -++++++++++menuListOption invisible name='3' selected=false -++++genericContainer -++++++checkBox name='Test 2: Flash the screen 2 times.' checkedState=false -++++++listBox activedescendantId=listBoxOption -++++++++listBoxOption name='1' selected=false -++++++++listBoxOption name='2' selected=true -++++++++listBoxOption name='3' selected=false -++++genericContainer -++++++checkBox name='Test 3: Flash the screen two times.' checkedState=false -++++++popUpButton collapsed value='two' -++++++++menuListPopup invisible -++++++++++menuListOption invisible name='1' selected=false -++++++++++menuListOption name='two' selected=true -++++++++++menuListOption invisible name='3' selected=false -++++genericContainer -++++++checkBox name='Test 4: Flash the screen two times.' checkedState=false -++++++listBox activedescendantId=listBoxOption -++++++++listBoxOption name='1' selected=false -++++++++listBoxOption name='two' selected=true -++++++++listBoxOption name='3' selected=false -++++genericContainer -++++++checkBox name='Test 5: Flash the screen two 3 times.' checkedState=false -++++++listBox multiselectable activedescendantId=listBoxOption -++++++++listBoxOption name='1' selected=false -++++++++listBoxOption name='two' selected=true -++++++++listBoxOption name='3' selected=true +++genericContainer +++++checkBox name='Test 1: Flash the screen 2 times.' checkedState=false +++++popUpButton collapsed value='2' +++++++menuListPopup invisible +++++++++menuListOption invisible name='1' selected=false +++++++++menuListOption name='2' selected=true +++++++++menuListOption invisible name='3' selected=false +++genericContainer +++++checkBox name='Test 2: Flash the screen 2 times.' checkedState=false +++++listBox activedescendantId=listBoxOption +++++++listBoxOption name='1' selected=false +++++++listBoxOption name='2' selected=true +++++++listBoxOption name='3' selected=false +++genericContainer +++++checkBox name='Test 3: Flash the screen two times.' checkedState=false +++++popUpButton collapsed value='two' +++++++menuListPopup invisible +++++++++menuListOption invisible name='1' selected=false +++++++++menuListOption name='two' selected=true +++++++++menuListOption invisible name='3' selected=false +++genericContainer +++++checkBox name='Test 4: Flash the screen two times.' checkedState=false +++++listBox activedescendantId=listBoxOption +++++++listBoxOption name='1' selected=false +++++++listBoxOption name='two' selected=true +++++++listBoxOption name='3' selected=false +++genericContainer +++++checkBox name='Test 5: Flash the screen two 3 times.' checkedState=false +++++listBox multiselectable activedescendantId=listBoxOption +++++++listBoxOption name='1' selected=false +++++++listBoxOption name='two' selected=true +++++++listBoxOption name='3' selected=true
diff --git a/content/test/data/accessibility/html/landmark-expected-blink.txt b/content/test/data/accessibility/html/landmark-expected-blink.txt index ca84899..eed5d09 100644 --- a/content/test/data/accessibility/html/landmark-expected-blink.txt +++ b/content/test/data/accessibility/html/landmark-expected-blink.txt
@@ -1,229 +1,204 @@ rootWebArea -++genericContainer ignored -++++banner -++++++staticText name='This is a header element.' -++++++++inlineTextBox name='This is a header element.' -++++complementary -++++++staticText name='This is an aside element.' -++++++++inlineTextBox name='This is an aside element.' +++banner +++++staticText name='This is a header element.' +++++++inlineTextBox name='This is a header element.' +++complementary +++++staticText name='This is an aside element.' +++++++inlineTextBox name='This is an aside element.' +++genericContainer +++++staticText name='This is an address element.' +++++++inlineTextBox name='This is an address element.' +++footer +++++staticText name='This is a footer element.' +++++++inlineTextBox name='This is a footer element.' +++form +++++staticText name='This is a form element.' +++++++inlineTextBox name='This is a form element.' +++main +++++staticText name='This is a main element.' +++++++inlineTextBox name='This is a main element.' +++navigation +++++staticText name='This is a nav element.' +++++++inlineTextBox name='This is a nav element.' +++application +++++staticText name='This is an ARIA application landmark.' +++++++inlineTextBox name='This is an ARIA application landmark.' +++banner +++++staticText name='This is an ARIA banner landmark.' +++++++inlineTextBox name='This is an ARIA banner landmark.' +++complementary +++++staticText name='This is an ARIA complementary landmark.' +++++++inlineTextBox name='This is an ARIA complementary landmark.' +++contentInfo +++++staticText name='This is an ARIA contentinfo landmark.' +++++++inlineTextBox name='This is an ARIA contentinfo landmark.' +++form +++++staticText name='This is an ARIA form landmark.' +++++++inlineTextBox name='This is an ARIA form landmark.' +++main +++++staticText name='This is an ARIA main landmark.' +++++++inlineTextBox name='This is an ARIA main landmark.' +++navigation +++++staticText name='This is an ARIA navigation landmark.' +++++++inlineTextBox name='This is an ARIA navigation landmark.' +++search +++++staticText name='This is an ARIA search landmark.' +++++++inlineTextBox name='This is an ARIA search landmark.' +++article ++++genericContainer -++++++staticText name='This is an address element.' -++++++++inlineTextBox name='This is an address element.' -++++footer -++++++staticText name='This is a footer element.' -++++++++inlineTextBox name='This is a footer element.' -++++form -++++++staticText name='This is a form element.' -++++++++inlineTextBox name='This is a form element.' -++++main -++++++staticText name='This is a main element.' -++++++++inlineTextBox name='This is a main element.' -++++navigation -++++++staticText name='This is a nav element.' -++++++++inlineTextBox name='This is a nav element.' -++++application -++++++staticText name='This is an ARIA application landmark.' -++++++++inlineTextBox name='This is an ARIA application landmark.' -++++banner -++++++staticText name='This is an ARIA banner landmark.' -++++++++inlineTextBox name='This is an ARIA banner landmark.' -++++complementary -++++++staticText name='This is an ARIA complementary landmark.' -++++++++inlineTextBox name='This is an ARIA complementary landmark.' -++++contentInfo -++++++staticText name='This is an ARIA contentinfo landmark.' -++++++++inlineTextBox name='This is an ARIA contentinfo landmark.' -++++form -++++++staticText name='This is an ARIA form landmark.' -++++++++inlineTextBox name='This is an ARIA form landmark.' -++++main -++++++staticText name='This is an ARIA main landmark.' -++++++++inlineTextBox name='This is an ARIA main landmark.' -++++navigation -++++++staticText name='This is an ARIA navigation landmark.' -++++++++inlineTextBox name='This is an ARIA navigation landmark.' -++++search -++++++staticText name='This is an ARIA search landmark.' -++++++++inlineTextBox name='This is an ARIA search landmark.' -++++article -++++++genericContainer -++++++++staticText name='This should NOT banner role.' -++++++++++inlineTextBox name='This should NOT banner role.' -++++complementary -++++++genericContainer -++++++++staticText name='This should NOT have banner role.' -++++++++++inlineTextBox name='This should NOT have banner role.' -++++navigation -++++++genericContainer -++++++++staticText name='This should NOT have banner role.' -++++++++++inlineTextBox name='This should NOT have banner role.' -++++region -++++++genericContainer -++++++++staticText name='This should NOT have banner role.' -++++++++++inlineTextBox name='This should NOT have banner role.' -++++blockquote -++++++genericContainer -++++++++staticText name='This should NOT have banner role.' -++++++++++inlineTextBox name='This should NOT have banner role.' -++++details -++++++disclosureTriangle name='Details' -++++++++staticText name='Details' -++++++++++inlineTextBox name='Details' -++++group -++++++genericContainer -++++++++staticText name='This should NOT have banner role.' -++++++++++inlineTextBox name='This should NOT have banner role.' -++++figure -++++++genericContainer -++++++++staticText name='This should NOT have banner role.' -++++++++++inlineTextBox name='This should NOT have banner role.' -++++group -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have banner role.' -++++++++++++inlineTextBox name='This should NOT have banner role.' -++++main -++++++genericContainer -++++++++staticText name='This should NOT have banner role.' -++++++++++inlineTextBox name='This should NOT have banner role.' -++++article -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT banner role.' -++++++++++++inlineTextBox name='This should NOT banner role.' -++++complementary -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have banner role.' -++++++++++++inlineTextBox name='This should NOT have banner role.' -++++navigation -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have banner role.' -++++++++++++inlineTextBox name='This should NOT have banner role.' -++++region -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have banner role.' -++++++++++++inlineTextBox name='This should NOT have banner role.' -++++blockquote -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have banner role.' -++++++++++++inlineTextBox name='This should NOT have banner role.' -++++details -++++++disclosureTriangle name='Details' -++++++++staticText name='Details' -++++++++++inlineTextBox name='Details' -++++group -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have banner role.' -++++++++++++inlineTextBox name='This should NOT have banner role.' -++++figure -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have banner role.' -++++++++++++inlineTextBox name='This should NOT have banner role.' -++++none ignored -++++++genericContainer ignored -++++++++genericContainer ignored -++++++++++genericContainer -++++++++++++staticText name='This should NOT have banner role.' -++++++++++++++inlineTextBox name='This should NOT have banner role.' -++++main -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have banner role.' -++++++++++++inlineTextBox name='This should NOT have banner role.' -++++article -++++++genericContainer -++++++++staticText name='This should NOT footer role.' -++++++++++inlineTextBox name='This should NOT footer role.' -++++complementary -++++++genericContainer -++++++++staticText name='This should NOT have footer role.' -++++++++++inlineTextBox name='This should NOT have footer role.' -++++navigation -++++++genericContainer -++++++++staticText name='This should NOT have footer role.' -++++++++++inlineTextBox name='This should NOT have footer role.' -++++region -++++++genericContainer -++++++++staticText name='This should NOT have footer role.' -++++++++++inlineTextBox name='This should NOT have footer role.' -++++blockquote -++++++genericContainer -++++++++staticText name='This should NOT have footer role.' -++++++++++inlineTextBox name='This should NOT have footer role.' -++++details -++++++disclosureTriangle name='Details' -++++++++staticText name='Details' -++++++++++inlineTextBox name='Details' -++++group -++++++genericContainer -++++++++staticText name='This should NOT have footer role.' -++++++++++inlineTextBox name='This should NOT have footer role.' -++++figure -++++++genericContainer -++++++++staticText name='This should NOT have footer role.' -++++++++++inlineTextBox name='This should NOT have footer role.' -++++none ignored -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have footer role.' -++++++++++++inlineTextBox name='This should NOT have footer role.' -++++main -++++++genericContainer -++++++++staticText name='This should NOT have footer role.' -++++++++++inlineTextBox name='This should NOT have footer role.' -++++article -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT footer role.' -++++++++++++inlineTextBox name='This should NOT footer role.' -++++complementary -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have footer role.' -++++++++++++inlineTextBox name='This should NOT have footer role.' -++++navigation -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have footer role.' -++++++++++++inlineTextBox name='This should NOT have footer role.' -++++region -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have footer role.' -++++++++++++inlineTextBox name='This should NOT have footer role.' -++++blockquote -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have footer role.' -++++++++++++inlineTextBox name='This should NOT have footer role.' -++++details -++++++disclosureTriangle name='Details' -++++++++staticText name='Details' -++++++++++inlineTextBox name='Details' -++++group -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have footer role.' -++++++++++++inlineTextBox name='This should NOT have footer role.' -++++figure -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have footer role.' -++++++++++++inlineTextBox name='This should NOT have footer role.' -++++group -++++++genericContainer ignored -++++++++genericContainer ignored -++++++++++genericContainer -++++++++++++staticText name='This should NOT have footer role.' -++++++++++++++inlineTextBox name='This should NOT have footer role.' -++++main -++++++genericContainer ignored -++++++++genericContainer -++++++++++staticText name='This should NOT have footer role.' -++++++++++++inlineTextBox name='This should NOT have footer role.' +++++++staticText name='This should NOT banner role.' +++++++++inlineTextBox name='This should NOT banner role.' +++complementary +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++navigation +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++region +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++blockquote +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++details +++++disclosureTriangle name='Details' +++++++staticText name='Details' +++++++++inlineTextBox name='Details' +++group +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++figure +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++group +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++main +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++article +++++genericContainer +++++++staticText name='This should NOT banner role.' +++++++++inlineTextBox name='This should NOT banner role.' +++complementary +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++navigation +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++region +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++blockquote +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++details +++++disclosureTriangle name='Details' +++++++staticText name='Details' +++++++++inlineTextBox name='Details' +++group +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++figure +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++genericContainer +++++staticText name='This should NOT have banner role.' +++++++inlineTextBox name='This should NOT have banner role.' +++main +++++genericContainer +++++++staticText name='This should NOT have banner role.' +++++++++inlineTextBox name='This should NOT have banner role.' +++article +++++genericContainer +++++++staticText name='This should NOT footer role.' +++++++++inlineTextBox name='This should NOT footer role.' +++complementary +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++navigation +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++region +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++blockquote +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++details +++++disclosureTriangle name='Details' +++++++staticText name='Details' +++++++++inlineTextBox name='Details' +++group +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++figure +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++genericContainer +++++staticText name='This should NOT have footer role.' +++++++inlineTextBox name='This should NOT have footer role.' +++main +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++article +++++genericContainer +++++++staticText name='This should NOT footer role.' +++++++++inlineTextBox name='This should NOT footer role.' +++complementary +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++navigation +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++region +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++blockquote +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++details +++++disclosureTriangle name='Details' +++++++staticText name='Details' +++++++++inlineTextBox name='Details' +++group +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++figure +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++group +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.' +++main +++++genericContainer +++++++staticText name='This should NOT have footer role.' +++++++++inlineTextBox name='This should NOT have footer role.'
diff --git a/content/test/data/accessibility/html/landmark.html b/content/test/data/accessibility/html/landmark.html index b61b2cdf..3218097 100644 --- a/content/test/data/accessibility/html/landmark.html +++ b/content/test/data/accessibility/html/landmark.html
@@ -43,7 +43,7 @@ <details><div><header>This should NOT header role.</header></div></details> <fieldset><div><header>This should NOT have banner role.</header></div></fieldset> <figure><div><header>This should NOT have banner role.</header></div></figure> - <table role="none"><tr><td><div><header>This should NOT have banner role.</header></div></td></tr></table> + <table role="none"><tr><td><div><header>This should NOT have banner role.</header><div></td></tr></table> <main><div><header>This should NOT have banner role.</header></div></main> <article><footer>This should NOT footer role.</footer></article> @@ -65,7 +65,7 @@ <details><div><footer>This should NOT footer role.</footer></div></details> <fieldset><div><footer>This should NOT have footer role.</footer></div></fieldset> <figure><div><footer>This should NOT have footer role.</footer></div></figure> - <table role="group"><tr><td><div><footer>This should NOT have footer role.</footer></div></td></tr></table> + <table role="group"><tr><td><div><footer>This should NOT have footer role.</footer><div></td></tr></table> <main><div><footer>This should NOT have footer role.</footer></div></main> </body> </html>
diff --git a/content/test/data/accessibility/html/layout-table-in-button-expected-blink.txt b/content/test/data/accessibility/html/layout-table-in-button-expected-blink.txt index d7453e3c..9f8a298d 100644 --- a/content/test/data/accessibility/html/layout-table-in-button-expected-blink.txt +++ b/content/test/data/accessibility/html/layout-table-in-button-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++button name='Conversation with Foo. 0 unread messages.' -++++++layoutTable -++++++++layoutTableRow -++++++++++layoutTableCell name='Conversation with Foo. 0 unread messages.' -++++++++++++genericContainer name='Conversation with Foo. 0 unread messages.' -++++++++++++++staticText name='Foo' -++++++++++++++++inlineTextBox name='Foo' +++button name='Conversation with Foo. 0 unread messages.' +++++layoutTable +++++++layoutTableRow +++++++++layoutTableCell name='Conversation with Foo. 0 unread messages.' +++++++++++genericContainer name='Conversation with Foo. 0 unread messages.' +++++++++++++staticText name='Foo' +++++++++++++++inlineTextBox name='Foo'
diff --git a/content/test/data/accessibility/html/legend-expected-blink.txt b/content/test/data/accessibility/html/legend-expected-blink.txt index b99c5940..7e87ec8a 100644 --- a/content/test/data/accessibility/html/legend-expected-blink.txt +++ b/content/test/data/accessibility/html/legend-expected-blink.txt
@@ -1,16 +1,15 @@ rootWebArea -++genericContainer ignored -++++form -++++++group name='Browser Engines:' -++++++++legend -++++++++++staticText name='Browser Engines:' -++++++++++++inlineTextBox name='Browser Engines:' -++++++++staticText name='Browser: ' -++++++++++inlineTextBox name='Browser: ' -++++++++textField -++++++++++genericContainer -++++++++staticText name=' Rendering Engine: ' -++++++++++inlineTextBox name=' ' -++++++++++inlineTextBox name='Rendering Engine: ' -++++++++textField -++++++++++genericContainer +++form +++++group name='Browser Engines:' +++++++legend +++++++++staticText name='Browser Engines:' +++++++++++inlineTextBox name='Browser Engines:' +++++++staticText name='Browser: ' +++++++++inlineTextBox name='Browser: ' +++++++textField +++++++++genericContainer +++++++staticText name=' Rendering Engine: ' +++++++++inlineTextBox name=' ' +++++++++inlineTextBox name='Rendering Engine: ' +++++++textField +++++++++genericContainer \ No newline at end of file
diff --git a/content/test/data/accessibility/html/li-expected-blink.txt b/content/test/data/accessibility/html/li-expected-blink.txt index 60a6dc1d..9895cd6 100644 --- a/content/test/data/accessibility/html/li-expected-blink.txt +++ b/content/test/data/accessibility/html/li-expected-blink.txt
@@ -1,15 +1,14 @@ rootWebArea -++genericContainer ignored display='block' -++++list display='block' setSize=3 -++++++listItem display='list-item' setSize=3 posInSet=1 -++++++++listMarker name='• ' -++++++++staticText display='list-item' name='Item 1' -++++++++++inlineTextBox display='list-item' name='Item 1' -++++++listItem display='list-item' setSize=3 posInSet=2 -++++++++listMarker name='• ' -++++++++staticText display='list-item' name='Item 2' -++++++++++inlineTextBox display='list-item' name='Item 2' -++++++listItem display='list-item' setSize=3 posInSet=3 -++++++++listMarker name='• ' -++++++++staticText display='list-item' name='Item 3' -++++++++++inlineTextBox display='list-item' name='Item 3' +++list display='block' setSize=3 +++++listItem display='list-item' setSize=3 posInSet=1 +++++++listMarker name='• ' +++++++staticText display='list-item' name='Item 1' +++++++++inlineTextBox display='list-item' name='Item 1' +++++listItem display='list-item' setSize=3 posInSet=2 +++++++listMarker name='• ' +++++++staticText display='list-item' name='Item 2' +++++++++inlineTextBox display='list-item' name='Item 2' +++++listItem display='list-item' setSize=3 posInSet=3 +++++++listMarker name='• ' +++++++staticText display='list-item' name='Item 3' +++++++++inlineTextBox display='list-item' name='Item 3'
diff --git a/content/test/data/accessibility/html/link-inside-heading-expected-blink.txt b/content/test/data/accessibility/html/link-inside-heading-expected-blink.txt index aeac6d3..1b20125 100644 --- a/content/test/data/accessibility/html/link-inside-heading-expected-blink.txt +++ b/content/test/data/accessibility/html/link-inside-heading-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++heading name='Link In Heading' hierarchicalLevel=1 -++++++link name='Link In Heading' -++++++++staticText name='Link In Heading' -++++++++++inlineTextBox name='Link In Heading' +++heading name='Link In Heading' hierarchicalLevel=1 +++++link name='Link In Heading' +++++++staticText name='Link In Heading' +++++++++inlineTextBox name='Link In Heading' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/list-expected-blink.txt b/content/test/data/accessibility/html/list-expected-blink.txt index 6e5bef5..1799fb9 100644 --- a/content/test/data/accessibility/html/list-expected-blink.txt +++ b/content/test/data/accessibility/html/list-expected-blink.txt
@@ -1,29 +1,28 @@ rootWebArea -++genericContainer ignored -++++list -++++++listItem -++++++++listMarker name='• ' -++++++++staticText name='tic' -++++++++++inlineTextBox name='tic' -++++++listItem -++++++++listMarker name='• ' -++++++++staticText name='tac' -++++++++++inlineTextBox name='tac' -++++++listItem -++++++++listMarker name='• ' -++++++++staticText name='toe' -++++++++++inlineTextBox name='toe' -++++list -++++++listItem -++++++++staticText name='tic' -++++++++++inlineTextBox name='tic' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++listItem -++++++++staticText name='tac' -++++++++++inlineTextBox name='tac' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++listItem -++++++++staticText name='toe' -++++++++++inlineTextBox name='toe' +++list +++++listItem +++++++listMarker name='• ' +++++++staticText name='tic' +++++++++inlineTextBox name='tic' +++++listItem +++++++listMarker name='• ' +++++++staticText name='tac' +++++++++inlineTextBox name='tac' +++++listItem +++++++listMarker name='• ' +++++++staticText name='toe' +++++++++inlineTextBox name='toe' +++list +++++listItem +++++++staticText name='tic' +++++++++inlineTextBox name='tic' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++listItem +++++++staticText name='tac' +++++++++inlineTextBox name='tac' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++listItem +++++++staticText name='toe' +++++++++inlineTextBox name='toe'
diff --git a/content/test/data/accessibility/html/list-marker-styles-expected-blink.txt b/content/test/data/accessibility/html/list-marker-styles-expected-blink.txt index 158f9f5..1257c95d 100644 --- a/content/test/data/accessibility/html/list-marker-styles-expected-blink.txt +++ b/content/test/data/accessibility/html/list-marker-styles-expected-blink.txt
@@ -1,46 +1,45 @@ rootWebArea -++genericContainer ignored -++++list -++++++listItem -++++++++staticText name='none' -++++++++++inlineTextBox name='none' -++++list -++++++listItem listStyle=circle -++++++++listMarker name='â—¦ ' -++++++++staticText name='circle' -++++++++++inlineTextBox name='circle' -++++list -++++++listItem listStyle=disc -++++++++listMarker name='• ' -++++++++staticText name='disc' -++++++++++inlineTextBox name='disc' -++++list -++++++listItem listStyle=image -++++++++listMarker name=' ' -++++++++staticText name='image' -++++++++++inlineTextBox name='image' -++++list -++++++listItem listStyle=square -++++++++listMarker name='â– ' -++++++++staticText name='square' -++++++++++inlineTextBox name='square' -++++list -++++++listItem listStyle=numeric -++++++++listMarker name='1. ' -++++++++staticText name='decimal' -++++++++++inlineTextBox name='decimal' -++++list -++++++listItem listStyle=other -++++++++listMarker name='I. ' -++++++++staticText name='upper-roman' -++++++++++inlineTextBox name='upper-roman' -++++list -++++++listItem listStyle=other -++++++++listMarker name='Ô±. ' -++++++++staticText name='armenian' -++++++++++inlineTextBox name='armenian' -++++list -++++++listItem listStyle=other -++++++++listMarker name='a. ' -++++++++staticText name='lower-alpha' -++++++++++inlineTextBox name='lower-alpha' +++list +++++listItem +++++++staticText name='none' +++++++++inlineTextBox name='none' +++list +++++listItem listStyle=circle +++++++listMarker name='â—¦ ' +++++++staticText name='circle' +++++++++inlineTextBox name='circle' +++list +++++listItem listStyle=disc +++++++listMarker name='• ' +++++++staticText name='disc' +++++++++inlineTextBox name='disc' +++list +++++listItem listStyle=image +++++++listMarker name=' ' +++++++staticText name='image' +++++++++inlineTextBox name='image' +++list +++++listItem listStyle=square +++++++listMarker name='â– ' +++++++staticText name='square' +++++++++inlineTextBox name='square' +++list +++++listItem listStyle=numeric +++++++listMarker name='1. ' +++++++staticText name='decimal' +++++++++inlineTextBox name='decimal' +++list +++++listItem listStyle=other +++++++listMarker name='I. ' +++++++staticText name='upper-roman' +++++++++inlineTextBox name='upper-roman' +++list +++++listItem listStyle=other +++++++listMarker name='Ô±. ' +++++++staticText name='armenian' +++++++++inlineTextBox name='armenian' +++list +++++listItem listStyle=other +++++++listMarker name='a. ' +++++++staticText name='lower-alpha' +++++++++inlineTextBox name='lower-alpha'
diff --git a/content/test/data/accessibility/html/list-markers-expected-blink.txt b/content/test/data/accessibility/html/list-markers-expected-blink.txt index 61ac56af..28cdd7b2 100644 --- a/content/test/data/accessibility/html/list-markers-expected-blink.txt +++ b/content/test/data/accessibility/html/list-markers-expected-blink.txt
@@ -1,27 +1,26 @@ rootWebArea -++genericContainer ignored -++++list -++++++listItem -++++++++listMarker name='• ' -++++++++staticText name='First item properly groups itself despite ' -++++++++++inlineTextBox name='First item properly groups itself despite ' -++++++++staticText name='bolded' -++++++++++inlineTextBox name='bolded' -++++++++staticText name=' text.' -++++++++++inlineTextBox name=' text.' -++++++listItem -++++++++listMarker name='• ' -++++++++staticText name='This should also be ' -++++++++++inlineTextBox name='This should also be ' -++++++++staticText name='seen' -++++++++++inlineTextBox name='seen' -++++++++staticText name=' as a group.' -++++++++++inlineTextBox name=' as a group.' -++++++listItem -++++++++listMarker name='• ' -++++++++staticText name='Some ' -++++++++++inlineTextBox name='Some ' -++++++++staticText name='more' -++++++++++inlineTextBox name='more' -++++++++staticText name=' text.' -++++++++++inlineTextBox name=' text.' +++list +++++listItem +++++++listMarker name='• ' +++++++staticText name='First item properly groups itself despite ' +++++++++inlineTextBox name='First item properly groups itself despite ' +++++++staticText name='bolded' +++++++++inlineTextBox name='bolded' +++++++staticText name=' text.' +++++++++inlineTextBox name=' text.' +++++listItem +++++++listMarker name='• ' +++++++staticText name='This should also be ' +++++++++inlineTextBox name='This should also be ' +++++++staticText name='seen' +++++++++inlineTextBox name='seen' +++++++staticText name=' as a group.' +++++++++inlineTextBox name=' as a group.' +++++listItem +++++++listMarker name='• ' +++++++staticText name='Some ' +++++++++inlineTextBox name='Some ' +++++++staticText name='more' +++++++++inlineTextBox name='more' +++++++staticText name=' text.' +++++++++inlineTextBox name=' text.'
diff --git a/content/test/data/accessibility/html/long-text-expected-blink.txt b/content/test/data/accessibility/html/long-text-expected-blink.txt index 81ead57..53331539 100644 --- a/content/test/data/accessibility/html/long-text-expected-blink.txt +++ b/content/test/data/accessibility/html/long-text-expected-blink.txt
@@ -1,504 +1,503 @@ rootWebArea -++genericContainer ignored -++++pre -++++++staticText name='1. The quick brown fox jumps over the lazy dog.<newline>2. The quick brown fox jumps over the lazy dog.<newline>3. The quick brown fox jumps over the lazy dog.<newline>4. The quick brown fox jumps over the lazy dog.<newline>5. The quick brown fox jumps over the lazy dog.<newline>6. The quick brown fox jumps over the lazy dog.<newline>7. The quick brown fox jumps over the lazy dog.<newline>8. The quick brown fox jumps over the lazy dog.<newline>9. The quick brown fox jumps over the lazy dog.<newline>10. The quick brown fox jumps over the lazy dog.<newline>11. The quick brown fox jumps over the lazy dog.<newline>12. The quick brown fox jumps over the lazy dog.<newline>13. The quick brown fox jumps over the lazy dog.<newline>14. The quick brown fox jumps over the lazy dog.<newline>15. The quick brown fox jumps over the lazy dog.<newline>16. The quick brown fox jumps over the lazy dog.<newline>17. The quick brown fox jumps over the lazy dog.<newline>18. The quick brown fox jumps over the lazy dog.<newline>19. The quick brown fox jumps over the lazy dog.<newline>20. The quick brown fox jumps over the lazy dog.<newline>21. The quick brown fox jumps over the lazy dog.<newline>22. The quick brown fox jumps over the lazy dog.<newline>23. The quick brown fox jumps over the lazy dog.<newline>24. The quick brown fox jumps over the lazy dog.<newline>25. The quick brown fox jumps over the lazy dog.<newline>26. The quick brown fox jumps over the lazy dog.<newline>27. The quick brown fox jumps over the lazy dog.<newline>28. The quick brown fox jumps over the lazy dog.<newline>29. The quick brown fox jumps over the lazy dog.<newline>30. The quick brown fox jumps over the lazy dog.<newline>31. The quick brown fox jumps over the lazy dog.<newline>32. The quick brown fox jumps over the lazy dog.<newline>33. The quick brown fox jumps over the lazy dog.<newline>34. The quick brown fox jumps over the lazy dog.<newline>35. The quick brown fox jumps over the lazy dog.<newline>36. The quick brown fox jumps over the lazy dog.<newline>37. The quick brown fox jumps over the lazy dog.<newline>38. The quick brown fox jumps over the lazy dog.<newline>39. The quick brown fox jumps over the lazy dog.<newline>40. The quick brown fox jumps over the lazy dog.<newline>41. The quick brown fox jumps over the lazy dog.<newline>42. The quick brown fox jumps over the lazy dog.<newline>43. The quick brown fox jumps over the lazy dog.<newline>44. The quick brown fox jumps over the lazy dog.<newline>45. The quick brown fox jumps over the lazy dog.<newline>46. The quick brown fox jumps over the lazy dog.<newline>47. The quick brown fox jumps over the lazy dog.<newline>48. The quick brown fox jumps over the lazy dog.<newline>49. The quick brown fox jumps over the lazy dog.<newline>50. The quick brown fox jumps over the lazy dog.<newline>51. The quick brown fox jumps over the lazy dog.<newline>52. The quick brown fox jumps over the lazy dog.<newline>53. The quick brown fox jumps over the lazy dog.<newline>54. The quick brown fox jumps over the lazy dog.<newline>55. The quick brown fox jumps over the lazy dog.<newline>56. The quick brown fox jumps over the lazy dog.<newline>57. The quick brown fox jumps over the lazy dog.<newline>58. The quick brown fox jumps over the lazy dog.<newline>59. The quick brown fox jumps over the lazy dog.<newline>60. The quick brown fox jumps over the lazy dog.<newline>61. The quick brown fox jumps over the lazy dog.<newline>62. The quick brown fox jumps over the lazy dog.<newline>63. The quick brown fox jumps over the lazy dog.<newline>64. The quick brown fox jumps over the lazy dog.<newline>65. The quick brown fox jumps over the lazy dog.<newline>66. The quick brown fox jumps over the lazy dog.<newline>67. The quick brown fox jumps over the lazy dog.<newline>68. The quick brown fox jumps over the lazy dog.<newline>69. The quick brown fox jumps over the lazy dog.<newline>70. The quick brown fox jumps over the lazy dog.<newline>71. The quick brown fox jumps over the lazy dog.<newline>72. The quick brown fox jumps over the lazy dog.<newline>73. The quick brown fox jumps over the lazy dog.<newline>74. The quick brown fox jumps over the lazy dog.<newline>75. The quick brown fox jumps over the lazy dog.<newline>76. The quick brown fox jumps over the lazy dog.<newline>77. The quick brown fox jumps over the lazy dog.<newline>78. The quick brown fox jumps over the lazy dog.<newline>79. The quick brown fox jumps over the lazy dog.<newline>80. The quick brown fox jumps over the lazy dog.<newline>81. The quick brown fox jumps over the lazy dog.<newline>82. The quick brown fox jumps over the lazy dog.<newline>83. The quick brown fox jumps over the lazy dog.<newline>84. The quick brown fox jumps over the lazy dog.<newline>85. The quick brown fox jumps over the lazy dog.<newline>86. The quick brown fox jumps over the lazy dog.<newline>87. The quick brown fox jumps over the lazy dog.<newline>88. The quick brown fox jumps over the lazy dog.<newline>89. The quick brown fox jumps over the lazy dog.<newline>90. The quick brown fox jumps over the lazy dog.<newline>91. The quick brown fox jumps over the lazy dog.<newline>92. The quick brown fox jumps over the lazy dog.<newline>93. The quick brown fox jumps over the lazy dog.<newline>94. The quick brown fox jumps over the lazy dog.<newline>95. The quick brown fox jumps over the lazy dog.<newline>96. The quick brown fox jumps over the lazy dog.<newline>97. The quick brown fox jumps over the lazy dog.<newline>98. The quick brown fox jumps over the lazy dog.<newline>99. The quick brown fox jumps over the lazy dog.<newline>100. The quick brown fox jumps over the lazy dog.<newline>101. The quick brown fox jumps over the lazy dog.<newline>102. The quick brown fox jumps over the lazy dog.<newline>103. The quick brown fox jumps over the lazy dog.<newline>104. The quick brown fox jumps over the lazy dog.<newline>105. The quick brown fox jumps over the lazy dog.<newline>106. The quick brown fox jumps over the lazy dog.<newline>107. The quick brown fox jumps over the lazy dog.<newline>108. The quick brown fox jumps over the lazy dog.<newline>109. The quick brown fox jumps over the lazy dog.<newline>110. The quick brown fox jumps over the lazy dog.<newline>111. The quick brown fox jumps over the lazy dog.<newline>112. The quick brown fox jumps over the lazy dog.<newline>113. The quick brown fox jumps over the lazy dog.<newline>114. The quick brown fox jumps over the lazy dog.<newline>115. The quick brown fox jumps over the lazy dog.<newline>116. The quick brown fox jumps over the lazy dog.<newline>117. The quick brown fox jumps over the lazy dog.<newline>118. The quick brown fox jumps over the lazy dog.<newline>119. The quick brown fox jumps over the lazy dog.<newline>120. The quick brown fox jumps over the lazy dog.<newline>121. The quick brown fox jumps over the lazy dog.<newline>122. The quick brown fox jumps over the lazy dog.<newline>123. The quick brown fox jumps over the lazy dog.<newline>124. The quick brown fox jumps over the lazy dog.<newline>125. The quick brown fox jumps over the lazy dog.<newline>126. The quick brown fox jumps over the lazy dog.<newline>127. The quick brown fox jumps over the lazy dog.<newline>128. The quick brown fox jumps over the lazy dog.<newline>129. The quick brown fox jumps over the lazy dog.<newline>130. The quick brown fox jumps over the lazy dog.<newline>131. The quick brown fox jumps over the lazy dog.<newline>132. The quick brown fox jumps over the lazy dog.<newline>133. The quick brown fox jumps over the lazy dog.<newline>134. The quick brown fox jumps over the lazy dog.<newline>135. The quick brown fox jumps over the lazy dog.<newline>136. The quick brown fox jumps over the lazy dog.<newline>137. The quick brown fox jumps over the lazy dog.<newline>138. The quick brown fox jumps over the lazy dog.<newline>139. The quick brown fox jumps over the lazy dog.<newline>140. The quick brown fox jumps over the lazy dog.<newline>141. The quick brown fox jumps over the lazy dog.<newline>142. The quick brown fox jumps over the lazy dog.<newline>143. The quick brown fox jumps over the lazy dog.<newline>144. The quick brown fox jumps over the lazy dog.<newline>145. The quick brown fox jumps over the lazy dog.<newline>146. The quick brown fox jumps over the lazy dog.<newline>147. The quick brown fox jumps over the lazy dog.<newline>148. The quick brown fox jumps over the lazy dog.<newline>149. The quick brown fox jumps over the lazy dog.<newline>150. The quick brown fox jumps over the lazy dog.<newline>151. The quick brown fox jumps over the lazy dog.<newline>152. The quick brown fox jumps over the lazy dog.<newline>153. The quick brown fox jumps over the lazy dog.<newline>154. The quick brown fox jumps over the lazy dog.<newline>155. The quick brown fox jumps over the lazy dog.<newline>156. The quick brown fox jumps over the lazy dog.<newline>157. The quick brown fox jumps over the lazy dog.<newline>158. The quick brown fox jumps over the lazy dog.<newline>159. The quick brown fox jumps over the lazy dog.<newline>160. The quick brown fox jumps over the lazy dog.<newline>161. The quick brown fox jumps over the lazy dog.<newline>162. The quick brown fox jumps over the lazy dog.<newline>163. The quick brown fox jumps over the lazy dog.<newline>164. The quick brown fox jumps over the lazy dog.<newline>165. The quick brown fox jumps over the lazy dog.<newline>166. The quick brown fox jumps over the lazy dog.<newline>167. The quick brown fox jumps over the lazy dog.<newline>168. The quick brown fox jumps over the lazy dog.<newline>169. The quick brown fox jumps over the lazy dog.<newline>170. The quick brown fox jumps over the lazy dog.<newline>171. The quick brown fox jumps over the lazy dog.<newline>172. The quick brown fox jumps over the lazy dog.<newline>173. The quick brown fox jumps over the lazy dog.<newline>174. The quick brown fox jumps over the lazy dog.<newline>175. The quick brown fox jumps over the lazy dog.<newline>176. The quick brown fox jumps over the lazy dog.<newline>177. The quick brown fox jumps over the lazy dog.<newline>178. The quick brown fox jumps over the lazy dog.<newline>179. The quick brown fox jumps over the lazy dog.<newline>180. The quick brown fox jumps over the lazy dog.<newline>181. The quick brown fox jumps over the lazy dog.<newline>182. The quick brown fox jumps over the lazy dog.<newline>183. The quick brown fox jumps over the lazy dog.<newline>184. The quick brown fox jumps over the lazy dog.<newline>185. The quick brown fox jumps over the lazy dog.<newline>186. The quick brown fox jumps over the lazy dog.<newline>187. The quick brown fox jumps over the lazy dog.<newline>188. The quick brown fox jumps over the lazy dog.<newline>189. The quick brown fox jumps over the lazy dog.<newline>190. The quick brown fox jumps over the lazy dog.<newline>191. The quick brown fox jumps over the lazy dog.<newline>192. The quick brown fox jumps over the lazy dog.<newline>193. The quick brown fox jumps over the lazy dog.<newline>194. The quick brown fox jumps over the lazy dog.<newline>195. The quick brown fox jumps over the lazy dog.<newline>196. The quick brown fox jumps over the lazy dog.<newline>197. The quick brown fox jumps over the lazy dog.<newline>198. The quick brown fox jumps over the lazy dog.<newline>199. The quick brown fox jumps over the lazy dog.<newline>200. The quick brown fox jumps over the lazy dog.<newline>201. The quick brown fox jumps over the lazy dog.<newline>202. The quick brown fox jumps over the lazy dog.<newline>203. The quick brown fox jumps over the lazy dog.<newline>204. The quick brown fox jumps over the lazy dog.<newline>205. The quick brown fox jumps over the lazy dog.<newline>206. The quick brown fox jumps over the lazy dog.<newline>207. The quick brown fox jumps over the lazy dog.<newline>208. The quick brown fox jumps over the lazy dog.<newline>209. The quick brown fox jumps over the lazy dog.<newline>210. The quick brown fox jumps over the lazy dog.<newline>211. The quick brown fox jumps over the lazy dog.<newline>212. The quick brown fox jumps over the lazy dog.<newline>213. The quick brown fox jumps over the lazy dog.<newline>214. The quick brown fox jumps over the lazy dog.<newline>215. The quick brown fox jumps over the lazy dog.<newline>216. The quick brown fox jumps over the lazy dog.<newline>217. The quick brown fox jumps over the lazy dog.<newline>218. The quick brown fox jumps over the lazy dog.<newline>219. The quick brown fox jumps over the lazy dog.<newline>220. The quick brown fox jumps over the lazy dog.<newline>221. The quick brown fox jumps over the lazy dog.<newline>222. The quick brown fox jumps over the lazy dog.<newline>223. The quick brown fox jumps over the lazy dog.<newline>224. The quick brown fox jumps over the lazy dog.<newline>225. The quick brown fox jumps over the lazy dog.<newline>226. The quick brown fox jumps over the lazy dog.<newline>227. The quick brown fox jumps over the lazy dog.<newline>228. The quick brown fox jumps over the lazy dog.<newline>229. The quick brown fox jumps over the lazy dog.<newline>230. The quick brown fox jumps over the lazy dog.<newline>231. The quick brown fox jumps over the lazy dog.<newline>232. The quick brown fox jumps over the lazy dog.<newline>233. The quick brown fox jumps over the lazy dog.<newline>234. The quick brown fox jumps over the lazy dog.<newline>235. The quick brown fox jumps over the lazy dog.<newline>236. The quick brown fox jumps over the lazy dog.<newline>237. The quick brown fox jumps over the lazy dog.<newline>238. The quick brown fox jumps over the lazy dog.<newline>239. The quick brown fox jumps over the lazy dog.<newline>240. The quick brown fox jumps over the lazy dog.<newline>241. The quick brown fox jumps over the lazy dog.<newline>242. The quick brown fox jumps over the lazy dog.<newline>243. The quick brown fox jumps over the lazy dog.<newline>244. The quick brown fox jumps over the lazy dog.<newline>245. The quick brown fox jumps over the lazy dog.<newline>246. The quick brown fox jumps over the lazy dog.<newline>247. The quick brown fox jumps over the lazy dog.<newline>248. The quick brown fox jumps over the lazy dog.<newline>249. The quick brown fox jumps over the lazy dog.<newline>250. The quick brown fox jumps over the lazy dog.<newline>' -++++++++inlineTextBox name='1. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='2. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='3. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='4. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='5. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='6. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='7. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='8. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='9. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='10. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='11. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='12. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='13. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='14. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='15. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='16. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='17. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='18. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='19. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='20. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='21. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='22. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='23. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='24. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='25. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='26. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='27. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='28. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='29. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='30. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='31. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='32. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='33. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='34. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='35. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='36. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='37. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='38. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='39. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='40. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='41. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='42. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='43. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='44. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='45. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='46. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='47. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='48. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='49. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='50. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='51. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='52. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='53. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='54. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='55. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='56. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='57. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='58. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='59. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='60. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='61. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='62. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='63. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='64. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='65. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='66. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='67. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='68. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='69. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='70. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='71. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='72. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='73. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='74. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='75. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='76. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='77. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='78. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='79. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='80. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='81. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='82. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='83. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='84. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='85. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='86. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='87. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='88. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='89. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='90. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='91. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='92. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='93. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='94. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='95. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='96. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='97. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='98. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='99. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='100. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='101. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='102. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='103. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='104. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='105. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='106. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='107. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='108. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='109. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='110. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='111. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='112. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='113. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='114. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='115. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='116. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='117. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='118. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='119. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='120. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='121. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='122. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='123. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='124. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='125. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='126. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='127. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='128. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='129. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='130. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='131. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='132. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='133. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='134. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='135. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='136. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='137. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='138. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='139. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='140. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='141. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='142. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='143. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='144. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='145. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='146. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='147. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='148. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='149. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='150. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='151. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='152. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='153. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='154. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='155. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='156. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='157. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='158. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='159. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='160. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='161. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='162. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='163. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='164. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='165. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='166. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='167. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='168. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='169. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='170. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='171. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='172. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='173. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='174. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='175. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='176. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='177. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='178. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='179. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='180. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='181. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='182. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='183. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='184. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='185. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='186. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='187. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='188. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='189. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='190. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='191. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='192. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='193. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='194. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='195. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='196. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='197. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='198. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='199. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='200. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='201. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='202. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='203. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='204. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='205. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='206. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='207. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='208. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='209. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='210. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='211. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='212. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='213. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='214. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='215. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='216. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='217. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='218. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='219. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='220. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='221. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='222. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='223. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='224. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='225. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='226. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='227. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='228. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='229. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='230. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='231. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='232. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='233. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='234. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='235. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='236. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='237. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='238. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='239. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='240. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='241. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='242. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='243. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='244. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='245. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='246. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='247. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='248. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='249. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='250. The quick brown fox jumps over the lazy dog.' -++++++++inlineTextBox name='<newline>' +++pre +++++staticText name='1. The quick brown fox jumps over the lazy dog.<newline>2. The quick brown fox jumps over the lazy dog.<newline>3. The quick brown fox jumps over the lazy dog.<newline>4. The quick brown fox jumps over the lazy dog.<newline>5. The quick brown fox jumps over the lazy dog.<newline>6. The quick brown fox jumps over the lazy dog.<newline>7. The quick brown fox jumps over the lazy dog.<newline>8. The quick brown fox jumps over the lazy dog.<newline>9. The quick brown fox jumps over the lazy dog.<newline>10. The quick brown fox jumps over the lazy dog.<newline>11. The quick brown fox jumps over the lazy dog.<newline>12. The quick brown fox jumps over the lazy dog.<newline>13. The quick brown fox jumps over the lazy dog.<newline>14. The quick brown fox jumps over the lazy dog.<newline>15. The quick brown fox jumps over the lazy dog.<newline>16. The quick brown fox jumps over the lazy dog.<newline>17. The quick brown fox jumps over the lazy dog.<newline>18. The quick brown fox jumps over the lazy dog.<newline>19. The quick brown fox jumps over the lazy dog.<newline>20. The quick brown fox jumps over the lazy dog.<newline>21. The quick brown fox jumps over the lazy dog.<newline>22. The quick brown fox jumps over the lazy dog.<newline>23. The quick brown fox jumps over the lazy dog.<newline>24. The quick brown fox jumps over the lazy dog.<newline>25. The quick brown fox jumps over the lazy dog.<newline>26. The quick brown fox jumps over the lazy dog.<newline>27. The quick brown fox jumps over the lazy dog.<newline>28. The quick brown fox jumps over the lazy dog.<newline>29. The quick brown fox jumps over the lazy dog.<newline>30. The quick brown fox jumps over the lazy dog.<newline>31. The quick brown fox jumps over the lazy dog.<newline>32. The quick brown fox jumps over the lazy dog.<newline>33. The quick brown fox jumps over the lazy dog.<newline>34. The quick brown fox jumps over the lazy dog.<newline>35. The quick brown fox jumps over the lazy dog.<newline>36. The quick brown fox jumps over the lazy dog.<newline>37. The quick brown fox jumps over the lazy dog.<newline>38. The quick brown fox jumps over the lazy dog.<newline>39. The quick brown fox jumps over the lazy dog.<newline>40. The quick brown fox jumps over the lazy dog.<newline>41. The quick brown fox jumps over the lazy dog.<newline>42. The quick brown fox jumps over the lazy dog.<newline>43. The quick brown fox jumps over the lazy dog.<newline>44. The quick brown fox jumps over the lazy dog.<newline>45. The quick brown fox jumps over the lazy dog.<newline>46. The quick brown fox jumps over the lazy dog.<newline>47. The quick brown fox jumps over the lazy dog.<newline>48. The quick brown fox jumps over the lazy dog.<newline>49. The quick brown fox jumps over the lazy dog.<newline>50. The quick brown fox jumps over the lazy dog.<newline>51. The quick brown fox jumps over the lazy dog.<newline>52. The quick brown fox jumps over the lazy dog.<newline>53. The quick brown fox jumps over the lazy dog.<newline>54. The quick brown fox jumps over the lazy dog.<newline>55. The quick brown fox jumps over the lazy dog.<newline>56. The quick brown fox jumps over the lazy dog.<newline>57. The quick brown fox jumps over the lazy dog.<newline>58. The quick brown fox jumps over the lazy dog.<newline>59. The quick brown fox jumps over the lazy dog.<newline>60. The quick brown fox jumps over the lazy dog.<newline>61. The quick brown fox jumps over the lazy dog.<newline>62. The quick brown fox jumps over the lazy dog.<newline>63. The quick brown fox jumps over the lazy dog.<newline>64. The quick brown fox jumps over the lazy dog.<newline>65. The quick brown fox jumps over the lazy dog.<newline>66. The quick brown fox jumps over the lazy dog.<newline>67. The quick brown fox jumps over the lazy dog.<newline>68. The quick brown fox jumps over the lazy dog.<newline>69. The quick brown fox jumps over the lazy dog.<newline>70. The quick brown fox jumps over the lazy dog.<newline>71. The quick brown fox jumps over the lazy dog.<newline>72. The quick brown fox jumps over the lazy dog.<newline>73. The quick brown fox jumps over the lazy dog.<newline>74. The quick brown fox jumps over the lazy dog.<newline>75. The quick brown fox jumps over the lazy dog.<newline>76. The quick brown fox jumps over the lazy dog.<newline>77. The quick brown fox jumps over the lazy dog.<newline>78. The quick brown fox jumps over the lazy dog.<newline>79. The quick brown fox jumps over the lazy dog.<newline>80. The quick brown fox jumps over the lazy dog.<newline>81. The quick brown fox jumps over the lazy dog.<newline>82. The quick brown fox jumps over the lazy dog.<newline>83. The quick brown fox jumps over the lazy dog.<newline>84. The quick brown fox jumps over the lazy dog.<newline>85. The quick brown fox jumps over the lazy dog.<newline>86. The quick brown fox jumps over the lazy dog.<newline>87. The quick brown fox jumps over the lazy dog.<newline>88. The quick brown fox jumps over the lazy dog.<newline>89. The quick brown fox jumps over the lazy dog.<newline>90. The quick brown fox jumps over the lazy dog.<newline>91. The quick brown fox jumps over the lazy dog.<newline>92. The quick brown fox jumps over the lazy dog.<newline>93. The quick brown fox jumps over the lazy dog.<newline>94. The quick brown fox jumps over the lazy dog.<newline>95. The quick brown fox jumps over the lazy dog.<newline>96. The quick brown fox jumps over the lazy dog.<newline>97. The quick brown fox jumps over the lazy dog.<newline>98. The quick brown fox jumps over the lazy dog.<newline>99. The quick brown fox jumps over the lazy dog.<newline>100. The quick brown fox jumps over the lazy dog.<newline>101. The quick brown fox jumps over the lazy dog.<newline>102. The quick brown fox jumps over the lazy dog.<newline>103. The quick brown fox jumps over the lazy dog.<newline>104. The quick brown fox jumps over the lazy dog.<newline>105. The quick brown fox jumps over the lazy dog.<newline>106. The quick brown fox jumps over the lazy dog.<newline>107. The quick brown fox jumps over the lazy dog.<newline>108. The quick brown fox jumps over the lazy dog.<newline>109. The quick brown fox jumps over the lazy dog.<newline>110. The quick brown fox jumps over the lazy dog.<newline>111. The quick brown fox jumps over the lazy dog.<newline>112. The quick brown fox jumps over the lazy dog.<newline>113. The quick brown fox jumps over the lazy dog.<newline>114. The quick brown fox jumps over the lazy dog.<newline>115. The quick brown fox jumps over the lazy dog.<newline>116. The quick brown fox jumps over the lazy dog.<newline>117. The quick brown fox jumps over the lazy dog.<newline>118. The quick brown fox jumps over the lazy dog.<newline>119. The quick brown fox jumps over the lazy dog.<newline>120. The quick brown fox jumps over the lazy dog.<newline>121. The quick brown fox jumps over the lazy dog.<newline>122. The quick brown fox jumps over the lazy dog.<newline>123. The quick brown fox jumps over the lazy dog.<newline>124. The quick brown fox jumps over the lazy dog.<newline>125. The quick brown fox jumps over the lazy dog.<newline>126. The quick brown fox jumps over the lazy dog.<newline>127. The quick brown fox jumps over the lazy dog.<newline>128. The quick brown fox jumps over the lazy dog.<newline>129. The quick brown fox jumps over the lazy dog.<newline>130. The quick brown fox jumps over the lazy dog.<newline>131. The quick brown fox jumps over the lazy dog.<newline>132. The quick brown fox jumps over the lazy dog.<newline>133. The quick brown fox jumps over the lazy dog.<newline>134. The quick brown fox jumps over the lazy dog.<newline>135. The quick brown fox jumps over the lazy dog.<newline>136. The quick brown fox jumps over the lazy dog.<newline>137. The quick brown fox jumps over the lazy dog.<newline>138. The quick brown fox jumps over the lazy dog.<newline>139. The quick brown fox jumps over the lazy dog.<newline>140. The quick brown fox jumps over the lazy dog.<newline>141. The quick brown fox jumps over the lazy dog.<newline>142. The quick brown fox jumps over the lazy dog.<newline>143. The quick brown fox jumps over the lazy dog.<newline>144. The quick brown fox jumps over the lazy dog.<newline>145. The quick brown fox jumps over the lazy dog.<newline>146. The quick brown fox jumps over the lazy dog.<newline>147. The quick brown fox jumps over the lazy dog.<newline>148. The quick brown fox jumps over the lazy dog.<newline>149. The quick brown fox jumps over the lazy dog.<newline>150. The quick brown fox jumps over the lazy dog.<newline>151. The quick brown fox jumps over the lazy dog.<newline>152. The quick brown fox jumps over the lazy dog.<newline>153. The quick brown fox jumps over the lazy dog.<newline>154. The quick brown fox jumps over the lazy dog.<newline>155. The quick brown fox jumps over the lazy dog.<newline>156. The quick brown fox jumps over the lazy dog.<newline>157. The quick brown fox jumps over the lazy dog.<newline>158. The quick brown fox jumps over the lazy dog.<newline>159. The quick brown fox jumps over the lazy dog.<newline>160. The quick brown fox jumps over the lazy dog.<newline>161. The quick brown fox jumps over the lazy dog.<newline>162. The quick brown fox jumps over the lazy dog.<newline>163. The quick brown fox jumps over the lazy dog.<newline>164. The quick brown fox jumps over the lazy dog.<newline>165. The quick brown fox jumps over the lazy dog.<newline>166. The quick brown fox jumps over the lazy dog.<newline>167. The quick brown fox jumps over the lazy dog.<newline>168. The quick brown fox jumps over the lazy dog.<newline>169. The quick brown fox jumps over the lazy dog.<newline>170. The quick brown fox jumps over the lazy dog.<newline>171. The quick brown fox jumps over the lazy dog.<newline>172. The quick brown fox jumps over the lazy dog.<newline>173. The quick brown fox jumps over the lazy dog.<newline>174. The quick brown fox jumps over the lazy dog.<newline>175. The quick brown fox jumps over the lazy dog.<newline>176. The quick brown fox jumps over the lazy dog.<newline>177. The quick brown fox jumps over the lazy dog.<newline>178. The quick brown fox jumps over the lazy dog.<newline>179. The quick brown fox jumps over the lazy dog.<newline>180. The quick brown fox jumps over the lazy dog.<newline>181. The quick brown fox jumps over the lazy dog.<newline>182. The quick brown fox jumps over the lazy dog.<newline>183. The quick brown fox jumps over the lazy dog.<newline>184. The quick brown fox jumps over the lazy dog.<newline>185. The quick brown fox jumps over the lazy dog.<newline>186. The quick brown fox jumps over the lazy dog.<newline>187. The quick brown fox jumps over the lazy dog.<newline>188. The quick brown fox jumps over the lazy dog.<newline>189. The quick brown fox jumps over the lazy dog.<newline>190. The quick brown fox jumps over the lazy dog.<newline>191. The quick brown fox jumps over the lazy dog.<newline>192. The quick brown fox jumps over the lazy dog.<newline>193. The quick brown fox jumps over the lazy dog.<newline>194. The quick brown fox jumps over the lazy dog.<newline>195. The quick brown fox jumps over the lazy dog.<newline>196. The quick brown fox jumps over the lazy dog.<newline>197. The quick brown fox jumps over the lazy dog.<newline>198. The quick brown fox jumps over the lazy dog.<newline>199. The quick brown fox jumps over the lazy dog.<newline>200. The quick brown fox jumps over the lazy dog.<newline>201. The quick brown fox jumps over the lazy dog.<newline>202. The quick brown fox jumps over the lazy dog.<newline>203. The quick brown fox jumps over the lazy dog.<newline>204. The quick brown fox jumps over the lazy dog.<newline>205. The quick brown fox jumps over the lazy dog.<newline>206. The quick brown fox jumps over the lazy dog.<newline>207. The quick brown fox jumps over the lazy dog.<newline>208. The quick brown fox jumps over the lazy dog.<newline>209. The quick brown fox jumps over the lazy dog.<newline>210. The quick brown fox jumps over the lazy dog.<newline>211. The quick brown fox jumps over the lazy dog.<newline>212. The quick brown fox jumps over the lazy dog.<newline>213. The quick brown fox jumps over the lazy dog.<newline>214. The quick brown fox jumps over the lazy dog.<newline>215. The quick brown fox jumps over the lazy dog.<newline>216. The quick brown fox jumps over the lazy dog.<newline>217. The quick brown fox jumps over the lazy dog.<newline>218. The quick brown fox jumps over the lazy dog.<newline>219. The quick brown fox jumps over the lazy dog.<newline>220. The quick brown fox jumps over the lazy dog.<newline>221. The quick brown fox jumps over the lazy dog.<newline>222. The quick brown fox jumps over the lazy dog.<newline>223. The quick brown fox jumps over the lazy dog.<newline>224. The quick brown fox jumps over the lazy dog.<newline>225. The quick brown fox jumps over the lazy dog.<newline>226. The quick brown fox jumps over the lazy dog.<newline>227. The quick brown fox jumps over the lazy dog.<newline>228. The quick brown fox jumps over the lazy dog.<newline>229. The quick brown fox jumps over the lazy dog.<newline>230. The quick brown fox jumps over the lazy dog.<newline>231. The quick brown fox jumps over the lazy dog.<newline>232. The quick brown fox jumps over the lazy dog.<newline>233. The quick brown fox jumps over the lazy dog.<newline>234. The quick brown fox jumps over the lazy dog.<newline>235. The quick brown fox jumps over the lazy dog.<newline>236. The quick brown fox jumps over the lazy dog.<newline>237. The quick brown fox jumps over the lazy dog.<newline>238. The quick brown fox jumps over the lazy dog.<newline>239. The quick brown fox jumps over the lazy dog.<newline>240. The quick brown fox jumps over the lazy dog.<newline>241. The quick brown fox jumps over the lazy dog.<newline>242. The quick brown fox jumps over the lazy dog.<newline>243. The quick brown fox jumps over the lazy dog.<newline>244. The quick brown fox jumps over the lazy dog.<newline>245. The quick brown fox jumps over the lazy dog.<newline>246. The quick brown fox jumps over the lazy dog.<newline>247. The quick brown fox jumps over the lazy dog.<newline>248. The quick brown fox jumps over the lazy dog.<newline>249. The quick brown fox jumps over the lazy dog.<newline>250. The quick brown fox jumps over the lazy dog.<newline>' +++++++inlineTextBox name='1. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='2. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='3. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='4. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='5. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='6. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='7. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='8. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='9. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='10. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='11. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='12. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='13. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='14. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='15. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='16. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='17. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='18. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='19. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='20. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='21. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='22. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='23. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='24. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='25. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='26. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='27. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='28. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='29. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='30. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='31. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='32. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='33. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='34. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='35. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='36. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='37. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='38. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='39. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='40. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='41. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='42. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='43. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='44. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='45. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='46. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='47. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='48. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='49. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='50. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='51. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='52. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='53. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='54. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='55. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='56. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='57. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='58. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='59. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='60. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='61. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='62. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='63. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='64. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='65. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='66. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='67. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='68. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='69. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='70. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='71. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='72. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='73. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='74. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='75. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='76. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='77. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='78. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='79. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='80. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='81. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='82. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='83. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='84. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='85. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='86. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='87. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='88. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='89. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='90. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='91. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='92. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='93. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='94. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='95. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='96. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='97. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='98. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='99. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='100. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='101. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='102. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='103. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='104. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='105. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='106. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='107. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='108. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='109. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='110. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='111. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='112. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='113. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='114. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='115. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='116. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='117. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='118. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='119. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='120. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='121. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='122. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='123. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='124. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='125. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='126. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='127. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='128. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='129. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='130. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='131. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='132. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='133. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='134. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='135. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='136. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='137. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='138. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='139. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='140. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='141. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='142. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='143. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='144. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='145. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='146. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='147. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='148. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='149. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='150. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='151. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='152. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='153. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='154. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='155. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='156. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='157. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='158. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='159. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='160. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='161. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='162. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='163. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='164. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='165. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='166. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='167. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='168. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='169. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='170. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='171. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='172. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='173. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='174. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='175. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='176. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='177. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='178. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='179. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='180. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='181. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='182. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='183. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='184. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='185. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='186. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='187. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='188. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='189. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='190. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='191. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='192. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='193. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='194. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='195. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='196. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='197. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='198. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='199. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='200. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='201. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='202. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='203. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='204. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='205. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='206. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='207. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='208. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='209. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='210. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='211. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='212. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='213. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='214. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='215. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='216. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='217. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='218. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='219. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='220. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='221. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='222. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='223. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='224. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='225. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='226. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='227. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='228. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='229. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='230. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='231. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='232. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='233. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='234. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='235. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='236. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='237. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='238. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='239. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='240. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='241. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='242. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='243. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='244. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='245. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='246. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='247. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='248. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='249. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='250. The quick brown fox jumps over the lazy dog.' +++++++inlineTextBox name='<newline>'
diff --git a/content/test/data/accessibility/html/main-expected-blink.txt b/content/test/data/accessibility/html/main-expected-blink.txt index 03b6726..4273ede0 100644 --- a/content/test/data/accessibility/html/main-expected-blink.txt +++ b/content/test/data/accessibility/html/main-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++main -++++++staticText name='This is main element.' -++++++++inlineTextBox name='This is main element.' -++++main -++++++staticText name='This is an ARIA role main.' -++++++++inlineTextBox name='This is an ARIA role main.' +++main +++++staticText name='This is main element.' +++++++inlineTextBox name='This is main element.' +++main +++++staticText name='This is an ARIA role main.' +++++++inlineTextBox name='This is an ARIA role main.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/mark-expected-blink.txt b/content/test/data/accessibility/html/mark-expected-blink.txt index 91b5800..021a790 100644 --- a/content/test/data/accessibility/html/mark-expected-blink.txt +++ b/content/test/data/accessibility/html/mark-expected-blink.txt
@@ -1,10 +1,9 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='This test is to check ' -++++++++inlineTextBox name='This test is to check ' -++++++mark -++++++++staticText name='mark tag' -++++++++++inlineTextBox name='mark tag' -++++++staticText name='.' -++++++++inlineTextBox name='.' +++paragraph +++++staticText name='This test is to check ' +++++++inlineTextBox name='This test is to check ' +++++mark +++++++staticText name='mark tag' +++++++++inlineTextBox name='mark tag' +++++staticText name='.' +++++++inlineTextBox name='.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/menu-type-context-expected-blink.txt b/content/test/data/accessibility/html/menu-type-context-expected-blink.txt index d195eb646..66f6c19d 100644 --- a/content/test/data/accessibility/html/menu-type-context-expected-blink.txt +++ b/content/test/data/accessibility/html/menu-type-context-expected-blink.txt
@@ -1,9 +1,6 @@ rootWebArea -++genericContainer ignored -++++genericContainer ignored -++++++paragraph -++++++++staticText name='Right-click inside this box to see the context menu!' -++++++++++inlineTextBox name='Right-click inside this box to see the context menu!' -++++++genericContainer ignored -++++++++genericContainer -++++++++genericContainer +++paragraph +++++staticText name='Right-click inside this box to see the context menu!' +++++++inlineTextBox name='Right-click inside this box to see the context menu!' +++genericContainer +++genericContainer
diff --git a/content/test/data/accessibility/html/modal-dialog-closed-expected-blink.txt b/content/test/data/accessibility/html/modal-dialog-closed-expected-blink.txt index 1e0b560..dade5df3 100644 --- a/content/test/data/accessibility/html/modal-dialog-closed-expected-blink.txt +++ b/content/test/data/accessibility/html/modal-dialog-closed-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++staticText name='Test that elements respawn in the accessibility tree after a modal dialog closes.' -++++++inlineTextBox name='Test that elements respawn in the accessibility tree after a modal dialog closes.' -++++region -++++++popUpButton collapsed value='This should be in the tree.' haspopup=menu -++++++++menuListPopup invisible -++++++++++menuListOption name='This should be in the tree.' selected=true -++++colorWell value='#000000' +++staticText name='Test that elements respawn in the accessibility tree after a modal dialog closes.' +++++inlineTextBox name='Test that elements respawn in the accessibility tree after a modal dialog closes.' +++region +++++popUpButton collapsed value='This should be in the tree.' haspopup=menu +++++++menuListPopup invisible +++++++++menuListOption name='This should be in the tree.' selected=true +++colorWell value='#000000'
diff --git a/content/test/data/accessibility/html/modal-dialog-opened-expected-blink.txt b/content/test/data/accessibility/html/modal-dialog-opened-expected-blink.txt index 49be1ce..1cf7805 100644 --- a/content/test/data/accessibility/html/modal-dialog-opened-expected-blink.txt +++ b/content/test/data/accessibility/html/modal-dialog-opened-expected-blink.txt
@@ -1,14 +1,8 @@ rootWebArea -++genericContainer ignored invisible -++++region ignored invisible -++++++dialog -++++++++staticText name='The dialog subtree should be the only text content in the accessibility tree. ' -++++++++++inlineTextBox name='The dialog subtree should be the only text content in the accessibility tree. ' -++++++++link name='Link inside the dialog.' -++++++++++staticText name='Link inside the dialog.' -++++++++++++inlineTextBox name='Link inside the dialog.' -++++++popUpButton collapsed ignored invisible value='This should be pruned out of the tree.' -++++button ignored invisible name='Choose File' value='No file chosen' -++genericContainer ignored invisible -++dialog ignored invisible +++dialog +++++staticText name='The dialog subtree should be the only text content in the accessibility tree. ' +++++++inlineTextBox name='The dialog subtree should be the only text content in the accessibility tree. ' +++++link name='Link inside the dialog.' +++++++staticText name='Link inside the dialog.' +++++++++inlineTextBox name='Link inside the dialog.' ++genericContainer
diff --git a/content/test/data/accessibility/html/modal-dialog-stack-expected-android.txt b/content/test/data/accessibility/html/modal-dialog-stack-expected-android.txt index 75cb37a..aaa0943 100644 --- a/content/test/data/accessibility/html/modal-dialog-stack-expected-android.txt +++ b/content/test/data/accessibility/html/modal-dialog-stack-expected-android.txt
@@ -1,5 +1,5 @@ android.webkit.WebView focusable focused scrollable -++android.view.View ++android.app.Dialog role_description='dialog' ++++android.view.View name='This is the now active dialog. Of course it should be in the tree. ' ++++android.widget.Button role_description='button' clickable focusable name='This is in the active dialog and should be in the tree.' +++android.view.View
diff --git a/content/test/data/accessibility/html/modal-dialog-stack-expected-auralinux.txt b/content/test/data/accessibility/html/modal-dialog-stack-expected-auralinux.txt index 7a0a189..c072723 100644 --- a/content/test/data/accessibility/html/modal-dialog-stack-expected-auralinux.txt +++ b/content/test/data/accessibility/html/modal-dialog-stack-expected-auralinux.txt
@@ -1,5 +1,5 @@ [document web] -++[section] ++[dialog] modal ++++[text] name='This is the now active dialog. Of course it should be in the tree. ' ++++[push button] name='This is in the active dialog and should be in the tree.' +++[section]
diff --git a/content/test/data/accessibility/html/modal-dialog-stack-expected-blink.txt b/content/test/data/accessibility/html/modal-dialog-stack-expected-blink.txt index 00f638e14..98dcc461 100644 --- a/content/test/data/accessibility/html/modal-dialog-stack-expected-blink.txt +++ b/content/test/data/accessibility/html/modal-dialog-stack-expected-blink.txt
@@ -1,12 +1,6 @@ rootWebArea -++genericContainer ignored invisible -++++region ignored invisible -++++++popUpButton collapsed ignored invisible value='This should be pruned out of the tree.' -++++button ignored invisible name='This button should not be in the tree.' -++genericContainer ignored invisible -++dialog ignored invisible -++genericContainer ++dialog ++++staticText name='This is the now active dialog. Of course it should be in the tree. ' ++++++inlineTextBox name='This is the now active dialog. Of course it should be in the tree. ' ++++button name='This is in the active dialog and should be in the tree.' +++genericContainer
diff --git a/content/test/data/accessibility/html/modal-dialog-stack-expected-mac.txt b/content/test/data/accessibility/html/modal-dialog-stack-expected-mac.txt index fd373b1..1561a8b7 100644 --- a/content/test/data/accessibility/html/modal-dialog-stack-expected-mac.txt +++ b/content/test/data/accessibility/html/modal-dialog-stack-expected-mac.txt
@@ -1,5 +1,5 @@ AXWebArea -++AXGroup ++AXGroup AXSubrole=AXApplicationDialog ++++AXStaticText AXValue='This is the now active dialog. Of course it should be in the tree. ' ++++AXButton AXTitle='This is in the active dialog and should be in the tree.' +++AXGroup
diff --git a/content/test/data/accessibility/html/modal-dialog-stack-expected-uia-win.txt b/content/test/data/accessibility/html/modal-dialog-stack-expected-uia-win.txt index a5a6537..f0d02b6 100644 --- a/content/test/data/accessibility/html/modal-dialog-stack-expected-uia-win.txt +++ b/content/test/data/accessibility/html/modal-dialog-stack-expected-uia-win.txt
@@ -1,6 +1,6 @@ region ++document -++++group ++++dialog Window.IsModal=true ++++++description Name='This is the now active dialog. Of course it should be in the tree. ' ++++++button Name='This is in the active dialog and should be in the tree.' +++++group
diff --git a/content/test/data/accessibility/html/modal-dialog-stack-expected-win.txt b/content/test/data/accessibility/html/modal-dialog-stack-expected-win.txt index df25937bd..0160c77e 100644 --- a/content/test/data/accessibility/html/modal-dialog-stack-expected-win.txt +++ b/content/test/data/accessibility/html/modal-dialog-stack-expected-win.txt
@@ -1,5 +1,5 @@ ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE -++IA2_ROLE_SECTION ++ROLE_SYSTEM_DIALOG IA2_STATE_MODAL ++++ROLE_SYSTEM_STATICTEXT name='This is the now active dialog. Of course it should be in the tree. ' ++++ROLE_SYSTEM_PUSHBUTTON name='This is in the active dialog and should be in the tree.' FOCUSABLE +++IA2_ROLE_SECTION
diff --git a/content/test/data/accessibility/html/navigation-expected-blink.txt b/content/test/data/accessibility/html/navigation-expected-blink.txt index 3db3511..e584f09 100644 --- a/content/test/data/accessibility/html/navigation-expected-blink.txt +++ b/content/test/data/accessibility/html/navigation-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++navigation -++++++link name='Don't click on me' -++++++++staticText name='Don't click on me' -++++++++++inlineTextBox name='Don't click on me' +++navigation +++++link name='Don't click on me' +++++++staticText name='Don't click on me' +++++++++inlineTextBox name='Don't click on me' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/offscreen-expected-blink.txt b/content/test/data/accessibility/html/offscreen-expected-blink.txt index 06b291d..a372eb4 100644 --- a/content/test/data/accessibility/html/offscreen-expected-blink.txt +++ b/content/test/data/accessibility/html/offscreen-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++button name='Onscreen' -++++genericContainer ignored -++++button offscreen name='Offscreen' +++button name='Onscreen' +++button offscreen name='Offscreen' +<-- End-of-file -->
diff --git a/content/test/data/accessibility/html/offscreen-iframe-expected-blink.txt b/content/test/data/accessibility/html/offscreen-iframe-expected-blink.txt index c568133..f330e06 100644 --- a/content/test/data/accessibility/html/offscreen-iframe-expected-blink.txt +++ b/content/test/data/accessibility/html/offscreen-iframe-expected-blink.txt
@@ -2,6 +2,5 @@ ++genericContainer ++++iframe ++++++rootWebArea -++++++++genericContainer ignored -++++++++++genericContainer name='iframe_onscreen' -++++++++++genericContainer offscreen name='iframe_offscreen' +++++++++genericContainer name='iframe_onscreen' +++++++++genericContainer offscreen name='iframe_offscreen'
diff --git a/content/test/data/accessibility/html/offscreen-scroll-expected-blink.txt b/content/test/data/accessibility/html/offscreen-scroll-expected-blink.txt index b36bcb3..e66194b 100644 --- a/content/test/data/accessibility/html/offscreen-scroll-expected-blink.txt +++ b/content/test/data/accessibility/html/offscreen-scroll-expected-blink.txt
@@ -1,6 +1,4 @@ rootWebArea scrollY=640 -++genericContainer ignored -++++button offscreen name='Onscreen before scroll' -++++genericContainer ignored -++++button name='Scrolled Button' -++++genericContainer ignored +++button offscreen name='Onscreen before scroll' +++button name='Scrolled Button' +<-- End-of-file -->
diff --git a/content/test/data/accessibility/html/offscreen-select-expected-blink.txt b/content/test/data/accessibility/html/offscreen-select-expected-blink.txt index cb2bc74f..2bf6dd51 100644 --- a/content/test/data/accessibility/html/offscreen-select-expected-blink.txt +++ b/content/test/data/accessibility/html/offscreen-select-expected-blink.txt
@@ -1,13 +1,11 @@ rootWebArea -++genericContainer ignored -++++popUpButton collapsed value='Onscreen 1' -++++++menuListPopup invisible -++++++++menuListOption name='Onscreen 1' selected=true -++++++++menuListOption invisible name='Onscreen 2' selected=false -++++++++menuListOption invisible name='Onscreen 3' selected=false -++++genericContainer ignored -++++popUpButton collapsed offscreen value='Offscreen 1' -++++++menuListPopup invisible -++++++++menuListOption offscreen name='Offscreen 1' selected=true -++++++++menuListOption invisible offscreen name='Offscreen 2' selected=false -++++++++menuListOption invisible offscreen name='Offscreen 3' selected=false +++popUpButton collapsed value='Onscreen 1' +++++menuListPopup invisible +++++++menuListOption name='Onscreen 1' selected=true +++++++menuListOption invisible name='Onscreen 2' selected=false +++++++menuListOption invisible name='Onscreen 3' selected=false +++popUpButton collapsed offscreen value='Offscreen 1' +++++menuListPopup invisible +++++++menuListOption offscreen name='Offscreen 1' selected=true +++++++menuListOption invisible offscreen name='Offscreen 2' selected=false +++++++menuListOption invisible offscreen name='Offscreen 3' selected=false
diff --git a/content/test/data/accessibility/html/ol-expected-blink.txt b/content/test/data/accessibility/html/ol-expected-blink.txt index 760cea1..424fb06 100644 --- a/content/test/data/accessibility/html/ol-expected-blink.txt +++ b/content/test/data/accessibility/html/ol-expected-blink.txt
@@ -1,28 +1,27 @@ rootWebArea -++genericContainer ignored -++++list -++++++listItem -++++++++listMarker name='1. ' -++++++++staticText name='Chrome' -++++++++++inlineTextBox name='Chrome' -++++++listItem -++++++++listMarker name='2. ' -++++++++staticText name='Safari' -++++++++++inlineTextBox name='Safari' -++++++listItem -++++++++listMarker name='3. ' -++++++++staticText name='IE' -++++++++++inlineTextBox name='IE' -++++list -++++++listItem -++++++++listMarker name='10. ' -++++++++staticText name='Android' -++++++++++inlineTextBox name='Android' -++++++listItem -++++++++listMarker name='11. ' -++++++++staticText name='Mac' -++++++++++inlineTextBox name='Mac' -++++++listItem -++++++++listMarker name='12. ' -++++++++staticText name='Windows' -++++++++++inlineTextBox name='Windows' +++list +++++listItem +++++++listMarker name='1. ' +++++++staticText name='Chrome' +++++++++inlineTextBox name='Chrome' +++++listItem +++++++listMarker name='2. ' +++++++staticText name='Safari' +++++++++inlineTextBox name='Safari' +++++listItem +++++++listMarker name='3. ' +++++++staticText name='IE' +++++++++inlineTextBox name='IE' +++list +++++listItem +++++++listMarker name='10. ' +++++++staticText name='Android' +++++++++inlineTextBox name='Android' +++++listItem +++++++listMarker name='11. ' +++++++staticText name='Mac' +++++++++inlineTextBox name='Mac' +++++listItem +++++++listMarker name='12. ' +++++++staticText name='Windows' +++++++++inlineTextBox name='Windows'
diff --git a/content/test/data/accessibility/html/optgroup-expected-blink.txt b/content/test/data/accessibility/html/optgroup-expected-blink.txt index b705b94..7769636 100644 --- a/content/test/data/accessibility/html/optgroup-expected-blink.txt +++ b/content/test/data/accessibility/html/optgroup-expected-blink.txt
@@ -1,19 +1,17 @@ rootWebArea ++genericContainer ++++listBox setSize=8 -++++++genericContainer ignored -++++++++group name='Enabled' setSize=0 -++++++++++staticText name='Enabled' -++++++++++++inlineTextBox name='Enabled' -++++++++listBoxOption name='One' setSize=8 posInSet=1 selected=false -++++++++listBoxOption name='Two' setSize=8 posInSet=2 selected=false -++++++++listBoxOption name='Three' setSize=8 posInSet=3 selected=false -++++++++listBoxOption name='Four' setSize=8 posInSet=4 selected=false -++++++genericContainer ignored -++++++++group name='Disabled' setSize=0 -++++++++++staticText name='Disabled' -++++++++++++inlineTextBox name='Disabled' -++++++++listBoxOption name='One' restriction=disabled setSize=8 posInSet=5 -++++++++listBoxOption name='Two' restriction=disabled setSize=8 posInSet=6 -++++++++listBoxOption name='Three' restriction=disabled setSize=8 posInSet=7 -++++++++listBoxOption name='Four' restriction=disabled setSize=8 posInSet=8 +++++++group name='Enabled' setSize=0 +++++++++staticText name='Enabled' +++++++++++inlineTextBox name='Enabled' +++++++listBoxOption name='One' setSize=8 posInSet=1 selected=false +++++++listBoxOption name='Two' setSize=8 posInSet=2 selected=false +++++++listBoxOption name='Three' setSize=8 posInSet=3 selected=false +++++++listBoxOption name='Four' setSize=8 posInSet=4 selected=false +++++++group name='Disabled' setSize=0 +++++++++staticText name='Disabled' +++++++++++inlineTextBox name='Disabled' +++++++listBoxOption name='One' restriction=disabled setSize=8 posInSet=5 +++++++listBoxOption name='Two' restriction=disabled setSize=8 posInSet=6 +++++++listBoxOption name='Three' restriction=disabled setSize=8 posInSet=7 +++++++listBoxOption name='Four' restriction=disabled setSize=8 posInSet=8
diff --git a/content/test/data/accessibility/html/p-expected-blink.txt b/content/test/data/accessibility/html/p-expected-blink.txt index 87fb3dd..c53218d7 100644 --- a/content/test/data/accessibility/html/p-expected-blink.txt +++ b/content/test/data/accessibility/html/p-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++staticText name='Before' -++++++inlineTextBox name='Before' wordStarts=0 wordEnds=6 -++++paragraph -++++++staticText name='Paragraph' -++++++++inlineTextBox name='Paragraph' wordStarts=0 wordEnds=9 -++++staticText name='After' -++++++inlineTextBox name='After' wordStarts=0 wordEnds=5 +++staticText name='Before' +++++inlineTextBox name='Before' wordStarts=0 wordEnds=6 +++paragraph +++++staticText name='Paragraph' +++++++inlineTextBox name='Paragraph' wordStarts=0 wordEnds=9 +++staticText name='After' +++++inlineTextBox name='After' wordStarts=0 wordEnds=5 \ No newline at end of file
diff --git a/content/test/data/accessibility/html/pre-expected-blink.txt b/content/test/data/accessibility/html/pre-expected-blink.txt index ade0523..685e497 100644 --- a/content/test/data/accessibility/html/pre-expected-blink.txt +++ b/content/test/data/accessibility/html/pre-expected-blink.txt
@@ -1,20 +1,19 @@ rootWebArea -++genericContainer ignored -++++pre -++++++staticText name='This test is to check pre<newline>formatting.' -++++++++inlineTextBox name='This test is to check pre' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='formatting.' -++++genericContainer -++++++staticText name='This test is to check pre<newline>formatting' -++++++++inlineTextBox name='This test is to check pre' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='formatting' -++++genericContainer -++++++staticText name='This test is to check pre<newline>formatting.' -++++++++inlineTextBox name='This test is to check pre' -++++++++inlineTextBox name='<newline>' -++++++++inlineTextBox name='formatting.' -++++genericContainer -++++++staticText name='This test is to check pre formatting.' -++++++++inlineTextBox name='This test is to check pre formatting.' +++pre +++++staticText name='This test is to check pre<newline>formatting.' +++++++inlineTextBox name='This test is to check pre' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='formatting.' +++genericContainer +++++staticText name='This test is to check pre<newline>formatting' +++++++inlineTextBox name='This test is to check pre' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='formatting' +++genericContainer +++++staticText name='This test is to check pre<newline>formatting.' +++++++inlineTextBox name='This test is to check pre' +++++++inlineTextBox name='<newline>' +++++++inlineTextBox name='formatting.' +++genericContainer +++++staticText name='This test is to check pre formatting.' +++++++inlineTextBox name='This test is to check pre formatting.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/q-expected-blink.txt b/content/test/data/accessibility/html/q-expected-blink.txt index 62b1c0a..f584aee 100644 --- a/content/test/data/accessibility/html/q-expected-blink.txt +++ b/content/test/data/accessibility/html/q-expected-blink.txt
@@ -1,13 +1,12 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='This is ' -++++++++inlineTextBox name='This is ' -++++++staticText name='"' -++++++++inlineTextBox name='"' -++++++staticText name='Chromium Blink' -++++++++inlineTextBox name='Chromium Blink' -++++++staticText name='"' -++++++++inlineTextBox name='"' -++++++staticText name=' based browser.' -++++++++inlineTextBox name=' based browser.' +++paragraph +++++staticText name='This is ' +++++++inlineTextBox name='This is ' +++++staticText name='"' +++++++inlineTextBox name='"' +++++staticText name='Chromium Blink' +++++++inlineTextBox name='Chromium Blink' +++++staticText name='"' +++++++inlineTextBox name='"' +++++staticText name=' based browser.' +++++++inlineTextBox name=' based browser.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/reparent-crash-expected-blink.txt b/content/test/data/accessibility/html/reparent-crash-expected-blink.txt index e3d1d542..c9fd0c7 100644 --- a/content/test/data/accessibility/html/reparent-crash-expected-blink.txt +++ b/content/test/data/accessibility/html/reparent-crash-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++listItem name='@NO_CHILDREN_DUMP' -++++genericContainer -++++++staticText name='Done' -++++++++inlineTextBox name='Done' +++listItem name='@NO_CHILDREN_DUMP' +++genericContainer +++++staticText name='Done' +++++++inlineTextBox name='Done'
diff --git a/content/test/data/accessibility/html/replace-data-expected-blink.txt b/content/test/data/accessibility/html/replace-data-expected-blink.txt index 5f3f9df1..66f88a4f 100644 --- a/content/test/data/accessibility/html/replace-data-expected-blink.txt +++ b/content/test/data/accessibility/html/replace-data-expected-blink.txt
@@ -1,8 +1,7 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='apples' -++++++++inlineTextBox name='apples' -++++paragraph -++++++staticText name='bananas' -++++++++inlineTextBox name='bananas' +++paragraph +++++staticText name='apples' +++++++inlineTextBox name='apples' +++paragraph +++++staticText name='bananas' +++++++inlineTextBox name='bananas' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/scrollable-overflow-expected-blink.txt b/content/test/data/accessibility/html/scrollable-overflow-expected-blink.txt index 6f4ad98..a655f37 100644 --- a/content/test/data/accessibility/html/scrollable-overflow-expected-blink.txt +++ b/content/test/data/accessibility/html/scrollable-overflow-expected-blink.txt
@@ -1,45 +1,38 @@ rootWebArea scrollXMin=0 -++genericContainer ignored -++++genericContainer ignored -++++++paragraph -++++++++staticText name='no overflow' -++++++++++inlineTextBox name='no overflow' -++++genericContainer ignored -++++++genericContainer -++++++++paragraph -++++++++++staticText name='tiny' -++++++++++++inlineTextBox name='tiny' -++++genericContainer ignored -++++++genericContainer scrollXMin=0 -++++++++paragraph -++++++++++staticText name='x=hidden' -++++++++++++inlineTextBox name='x=hidden' -++++++genericContainer name='x=auto' scrollXMin=0 -++++++++paragraph -++++++++++staticText name='x=auto' -++++++++++++inlineTextBox name='x=auto' -++++++genericContainer name='x=scroll' scrollXMin=0 -++++++++paragraph -++++++++++staticText name='x=scroll' -++++++++++++inlineTextBox name='x=scroll' -++++++genericContainer ignored -++++++++paragraph -++++++++++staticText name='x=visible' -++++++++++++inlineTextBox name='x=visible' -++++genericContainer ignored -++++++genericContainer scrollXMin=0 -++++++++paragraph -++++++++++staticText name='y=hidden' -++++++++++++inlineTextBox name='y=hidden' -++++++genericContainer name='y=auto' scrollXMin=0 -++++++++paragraph -++++++++++staticText name='y=auto' -++++++++++++inlineTextBox name='y=auto' -++++++genericContainer name='y=scroll' scrollXMin=0 -++++++++paragraph -++++++++++staticText name='y=scroll' -++++++++++++inlineTextBox name='y=scroll' -++++++genericContainer ignored -++++++++paragraph -++++++++++staticText name='y=visible' -++++++++++++inlineTextBox name='y=visible' +++paragraph +++++staticText name='no overflow' +++++++inlineTextBox name='no overflow' +++genericContainer +++++paragraph +++++++staticText name='tiny' +++++++++inlineTextBox name='tiny' +++genericContainer scrollXMin=0 +++++paragraph +++++++staticText name='x=hidden' +++++++++inlineTextBox name='x=hidden' +++genericContainer name='x=auto' scrollXMin=0 +++++paragraph +++++++staticText name='x=auto' +++++++++inlineTextBox name='x=auto' +++genericContainer name='x=scroll' scrollXMin=0 +++++paragraph +++++++staticText name='x=scroll' +++++++++inlineTextBox name='x=scroll' +++paragraph +++++staticText name='x=visible' +++++++inlineTextBox name='x=visible' +++genericContainer scrollXMin=0 +++++paragraph +++++++staticText name='y=hidden' +++++++++inlineTextBox name='y=hidden' +++genericContainer name='y=auto' scrollXMin=0 +++++paragraph +++++++staticText name='y=auto' +++++++++inlineTextBox name='y=auto' +++genericContainer name='y=scroll' scrollXMin=0 +++++paragraph +++++++staticText name='y=scroll' +++++++++inlineTextBox name='y=scroll' +++paragraph +++++staticText name='y=visible' +++++++inlineTextBox name='y=visible'
diff --git a/content/test/data/accessibility/html/scrollable-overflow.html b/content/test/data/accessibility/html/scrollable-overflow.html index cb048b0..7a2ab9d 100644 --- a/content/test/data/accessibility/html/scrollable-overflow.html +++ b/content/test/data/accessibility/html/scrollable-overflow.html
@@ -6,7 +6,7 @@ <style> body { font-style: monospace; width: 999px;} .x-overflow > div { width: 25px; height: 50px;} - .x-overflow > div > p { margin: 0; } + .x-overflow > div > p { margin: 0; } .y-overflow > div { height: 25px; } .y-overflow > div > p { padding: 12px 0; margin: 0;} </style> @@ -18,12 +18,11 @@ <div class="not-enough-content-to-scroll"> <!-- Not scrollable --> <div style="overflow: scroll; width: 100px; height: 100px"> <p>tiny - </div> </div> <div class="x-overflow"> <div style="overflow-x: hidden;"> <!-- Scrollable --> - <p>x=hidden + <p>x=hidden </div> <div style="overflow-x: auto;"> <!-- Scrollable --> <p>x=auto
diff --git a/content/test/data/accessibility/html/section-expected-blink.txt b/content/test/data/accessibility/html/section-expected-blink.txt index 66a6990..8d0074f 100644 --- a/content/test/data/accessibility/html/section-expected-blink.txt +++ b/content/test/data/accessibility/html/section-expected-blink.txt
@@ -1,5 +1,4 @@ rootWebArea -++genericContainer ignored -++++region -++++++staticText name='This is a section element.' -++++++++inlineTextBox name='This is a section element.' +++region +++++staticText name='This is a section element.' +++++++inlineTextBox name='This is a section element.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/small-expected-blink.txt b/content/test/data/accessibility/html/small-expected-blink.txt index 8221ffc..713253ea 100644 --- a/content/test/data/accessibility/html/small-expected-blink.txt +++ b/content/test/data/accessibility/html/small-expected-blink.txt
@@ -1,7 +1,6 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='Chromium' -++++++++inlineTextBox name='Chromium' -++++++staticText name='open source project' -++++++++inlineTextBox name='open source project' +++paragraph +++++staticText name='Chromium' +++++++inlineTextBox name='Chromium' +++++staticText name='open source project' +++++++inlineTextBox name='open source project' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/span-expected-blink.txt b/content/test/data/accessibility/html/span-expected-blink.txt index 723c1081..fea75888 100644 --- a/content/test/data/accessibility/html/span-expected-blink.txt +++ b/content/test/data/accessibility/html/span-expected-blink.txt
@@ -1,119 +1,118 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='This' -++++++++inlineTextBox name='This' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='paragraph has ' -++++++++inlineTextBox name='paragraph has ' -++++++staticText name='text' -++++++++inlineTextBox name='text' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='in' -++++++++inlineTextBox name='in' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='spans' -++++++++inlineTextBox name='spans' -++++++staticText name='.' -++++++++inlineTextBox name='.' -++++paragraph -++++++staticText name='E1. Eat' -++++++++inlineTextBox name='E1. Eat' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++link name='space' -++++++++staticText name='space' -++++++++++inlineTextBox name='space' -++++paragraph -++++++staticText name='E2. Eat' -++++++++inlineTextBox name='E2. Eat' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++link name='space' -++++++++staticText name='space' -++++++++++inlineTextBox name='space' -++++paragraph -++++++staticText name='E3. Eat' -++++++++inlineTextBox name='E3. Eat' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++link name='space' -++++++++staticText name='space' -++++++++++inlineTextBox name='space' -++++paragraph -++++++link name='E4. Eat' -++++++++staticText name='E4. Eat' -++++++++++inlineTextBox name='E4. Eat' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' +++paragraph +++++staticText name='This' +++++++inlineTextBox name='This' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='paragraph has ' +++++++inlineTextBox name='paragraph has ' +++++staticText name='text' +++++++inlineTextBox name='text' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='in' +++++++inlineTextBox name='in' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='spans' +++++++inlineTextBox name='spans' +++++staticText name='.' +++++++inlineTextBox name='.' +++paragraph +++++staticText name='E1. Eat' +++++++inlineTextBox name='E1. Eat' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++link name='space' ++++++staticText name='space' ++++++++inlineTextBox name='space' -++++paragraph -++++++link name='E5. Eat' -++++++++staticText name='E5. Eat' -++++++++++inlineTextBox name='E5. Eat' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' +++paragraph +++++staticText name='E2. Eat' +++++++inlineTextBox name='E2. Eat' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++link name='space' ++++++staticText name='space' ++++++++inlineTextBox name='space' -++++paragraph -++++++link name='E6. Eat' -++++++++staticText name='E6. Eat' -++++++++++inlineTextBox name='E6. Eat' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' +++paragraph +++++staticText name='E3. Eat' +++++++inlineTextBox name='E3. Eat' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++link name='space' ++++++staticText name='space' ++++++++inlineTextBox name='space' -++++paragraph -++++++staticText name='K1. Keep' -++++++++inlineTextBox name='K1. Keep' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='space' -++++++++inlineTextBox name='space' -++++paragraph -++++++staticText name='K2. Keep' -++++++++inlineTextBox name='K2. Keep' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='space' -++++++++inlineTextBox name='space' -++++paragraph -++++++staticText name='K3. Keep' -++++++++inlineTextBox name='K3. Keep' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='space' -++++++++inlineTextBox name='space' -++++paragraph -++++++staticText name='K4. Keep ' -++++++++inlineTextBox name='K4. Keep ' -++++++staticText name='space' -++++++++inlineTextBox name='space' -++++paragraph -++++++staticText name='K5. Keep' -++++++++inlineTextBox name='K5. Keep' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='space' -++++++++inlineTextBox name='space' -++++paragraph -++++++staticText name='K6. Keep ' -++++++++inlineTextBox name='K6. Keep ' -++++++staticText name='space' -++++++++inlineTextBox name='space' -++++paragraph -++++++staticText name='K7. Keep' -++++++++inlineTextBox name='K7. Keep' -++++++staticText name=' space' -++++++++inlineTextBox name=' space' -++++paragraph -++++++staticText name='K8. Keep' -++++++++inlineTextBox name='K8. Keep' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='space' -++++++++inlineTextBox name='space' +++paragraph +++++link name='E4. Eat' +++++++staticText name='E4. Eat' +++++++++inlineTextBox name='E4. Eat' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++link name='E5. Eat' +++++++staticText name='E5. Eat' +++++++++inlineTextBox name='E5. Eat' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++link name='E6. Eat' +++++++staticText name='E6. Eat' +++++++++inlineTextBox name='E6. Eat' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++staticText name='K1. Keep' +++++++inlineTextBox name='K1. Keep' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++staticText name='K2. Keep' +++++++inlineTextBox name='K2. Keep' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++staticText name='K3. Keep' +++++++inlineTextBox name='K3. Keep' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++staticText name='K4. Keep ' +++++++inlineTextBox name='K4. Keep ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++staticText name='K5. Keep' +++++++inlineTextBox name='K5. Keep' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++staticText name='K6. Keep ' +++++++inlineTextBox name='K6. Keep ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++staticText name='K7. Keep' +++++++inlineTextBox name='K7. Keep' +++++staticText name=' space' +++++++inlineTextBox name=' space' +++paragraph +++++staticText name='K8. Keep' +++++++inlineTextBox name='K8. Keep' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space'
diff --git a/content/test/data/accessibility/html/span-line-break-expected-blink.txt b/content/test/data/accessibility/html/span-line-break-expected-blink.txt index 49c1aee..7c20308 100644 --- a/content/test/data/accessibility/html/span-line-break-expected-blink.txt +++ b/content/test/data/accessibility/html/span-line-break-expected-blink.txt
@@ -1,62 +1,61 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='100(a)#abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='100(a)#abcdefghijklmnopqrstuvwxyz' -++++++staticText name=' ' -++++++staticText name='abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' -++++paragraph -++++++staticText name='100(b)#abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='100(b)#abcdefghijklmnopqrstuvwxyz' -++++++staticText name=' ' -++++++staticText name='abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' -++++paragraph -++++++staticText name='100(c)#abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='100(c)#abcdefghijklmnopqrstuvwxyz' -++++++staticText name=' ' -++++++staticText name='abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' -++++paragraph -++++++staticText name='500(a)#abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='500(a)#abcdefghijklmnopqrstuvwxyz' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' -++++paragraph -++++++staticText name='500(b)#abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='500(b)#abcdefghijklmnopqrstuvwxyz' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' -++++paragraph -++++++staticText name='500(c)#abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='500(c)#abcdefghijklmnopqrstuvwxyz' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' -++++paragraph -++++++staticText name='900(a)#abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='900(a)#abcdefghijklmnopqrstuvwxyz' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' -++++paragraph -++++++staticText name='900(b)#abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='900(b)#abcdefghijklmnopqrstuvwxyz' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' -++++paragraph -++++++staticText name='900(c)#abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='900(c)#abcdefghijklmnopqrstuvwxyz' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='abcdefghijklmnopqrstuvwxyz' -++++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' +++paragraph +++++staticText name='100(a)#abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='100(a)#abcdefghijklmnopqrstuvwxyz' +++++staticText name=' ' +++++staticText name='abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' +++paragraph +++++staticText name='100(b)#abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='100(b)#abcdefghijklmnopqrstuvwxyz' +++++staticText name=' ' +++++staticText name='abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' +++paragraph +++++staticText name='100(c)#abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='100(c)#abcdefghijklmnopqrstuvwxyz' +++++staticText name=' ' +++++staticText name='abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' +++paragraph +++++staticText name='500(a)#abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='500(a)#abcdefghijklmnopqrstuvwxyz' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' +++paragraph +++++staticText name='500(b)#abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='500(b)#abcdefghijklmnopqrstuvwxyz' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' +++paragraph +++++staticText name='500(c)#abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='500(c)#abcdefghijklmnopqrstuvwxyz' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' +++paragraph +++++staticText name='900(a)#abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='900(a)#abcdefghijklmnopqrstuvwxyz' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' +++paragraph +++++staticText name='900(b)#abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='900(b)#abcdefghijklmnopqrstuvwxyz' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz' +++paragraph +++++staticText name='900(c)#abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='900(c)#abcdefghijklmnopqrstuvwxyz' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='abcdefghijklmnopqrstuvwxyz' +++++++inlineTextBox name='abcdefghijklmnopqrstuvwxyz'
diff --git a/content/test/data/accessibility/html/sub-expected-blink.txt b/content/test/data/accessibility/html/sub-expected-blink.txt index 45905f3..aa74a7d0 100644 --- a/content/test/data/accessibility/html/sub-expected-blink.txt +++ b/content/test/data/accessibility/html/sub-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='This text contains ' -++++++++inlineTextBox name='This text contains ' -++++++staticText name='subscript' -++++++++inlineTextBox name='subscript' -++++++staticText name=' text.' -++++++++inlineTextBox name=' text.' +++paragraph +++++staticText name='This text contains ' +++++++inlineTextBox name='This text contains ' +++++staticText name='subscript' +++++++inlineTextBox name='subscript' +++++staticText name=' text.' +++++++inlineTextBox name=' text.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/summary-expected-blink.txt b/content/test/data/accessibility/html/summary-expected-blink.txt index d2d473916..987d99f 100644 --- a/content/test/data/accessibility/html/summary-expected-blink.txt +++ b/content/test/data/accessibility/html/summary-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea -++genericContainer ignored -++++details -++++++disclosureTriangle collapsed name='details tag' -++++++++staticText name='details tag' -++++++++++inlineTextBox name='details tag' +++details +++++disclosureTriangle collapsed name='details tag' +++++++staticText name='details tag' +++++++++inlineTextBox name='details tag' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/sup-expected-blink.txt b/content/test/data/accessibility/html/sup-expected-blink.txt index 7611a8b..2747002 100644 --- a/content/test/data/accessibility/html/sup-expected-blink.txt +++ b/content/test/data/accessibility/html/sup-expected-blink.txt
@@ -1,9 +1,8 @@ rootWebArea -++genericContainer ignored -++++paragraph -++++++staticText name='This text contains' -++++++++inlineTextBox name='This text contains' -++++++staticText name='superscript' -++++++++inlineTextBox name='superscript' -++++++staticText name='text.' -++++++++inlineTextBox name='text.' +++paragraph +++++staticText name='This text contains' +++++++inlineTextBox name='This text contains' +++++staticText name='superscript' +++++++inlineTextBox name='superscript' +++++staticText name='text.' +++++++inlineTextBox name='text.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/table-focusable-sections-expected-blink.txt b/content/test/data/accessibility/html/table-focusable-sections-expected-blink.txt index 77156b0..4f01368 100644 --- a/content/test/data/accessibility/html/table-focusable-sections-expected-blink.txt +++ b/content/test/data/accessibility/html/table-focusable-sections-expected-blink.txt
@@ -1,34 +1,33 @@ rootWebArea name='Table example - focusable thead, tbody, tfoot' -++genericContainer ignored -++++table -++++++group -++++++++row -++++++++++columnHeader name='Sum' -++++++++++++staticText name='Sum' -++++++++++++++inlineTextBox name='Sum' -++++++++++columnHeader name='Subtraction' -++++++++++++staticText name='Subtraction' -++++++++++++++inlineTextBox name='Subtraction' -++++++group -++++++++row -++++++++++cell name='10' -++++++++++++staticText name='10' -++++++++++++++inlineTextBox name='10' -++++++++++cell name='7' -++++++++++++staticText name='7' -++++++++++++++inlineTextBox name='7' -++++++++row -++++++++++cell name='2' -++++++++++++staticText name='2' -++++++++++++++inlineTextBox name='2' -++++++++++cell name='4' -++++++++++++staticText name='4' -++++++++++++++inlineTextBox name='4' -++++++group -++++++++row -++++++++++cell name='12' -++++++++++++staticText name='12' -++++++++++++++inlineTextBox name='12' -++++++++++cell name='3' -++++++++++++staticText name='3' -++++++++++++++inlineTextBox name='3' +++table +++++group +++++++row +++++++++columnHeader name='Sum' +++++++++++staticText name='Sum' +++++++++++++inlineTextBox name='Sum' +++++++++columnHeader name='Subtraction' +++++++++++staticText name='Subtraction' +++++++++++++inlineTextBox name='Subtraction' +++++group +++++++row +++++++++cell name='10' +++++++++++staticText name='10' +++++++++++++inlineTextBox name='10' +++++++++cell name='7' +++++++++++staticText name='7' +++++++++++++inlineTextBox name='7' +++++++row +++++++++cell name='2' +++++++++++staticText name='2' +++++++++++++inlineTextBox name='2' +++++++++cell name='4' +++++++++++staticText name='4' +++++++++++++inlineTextBox name='4' +++++group +++++++row +++++++++cell name='12' +++++++++++staticText name='12' +++++++++++++inlineTextBox name='12' +++++++++cell name='3' +++++++++++staticText name='3' +++++++++++++inlineTextBox name='3'
diff --git a/content/test/data/accessibility/html/table-headers-empty-first-cell-expected-blink.txt b/content/test/data/accessibility/html/table-headers-empty-first-cell-expected-blink.txt index 337912e..f4b32d0 100644 --- a/content/test/data/accessibility/html/table-headers-empty-first-cell-expected-blink.txt +++ b/content/test/data/accessibility/html/table-headers-empty-first-cell-expected-blink.txt
@@ -1,99 +1,98 @@ rootWebArea name='Table example - headers with empty first cell' -++genericContainer ignored -++++table name='Delivery slots:' -++++++caption -++++++++staticText name='Delivery slots:' -++++++++++inlineTextBox name='Delivery slots:' -++++++row -++++++++cell -++++++++columnHeader name='Monday' -++++++++++staticText name='Monday' -++++++++++++inlineTextBox name='Monday' -++++++++columnHeader name='Tuesday' -++++++++++staticText name='Tuesday' -++++++++++++inlineTextBox name='Tuesday' -++++++++columnHeader name='Wednesday' -++++++++++staticText name='Wednesday' -++++++++++++inlineTextBox name='Wednesday' -++++++++columnHeader name='Thursday' -++++++++++staticText name='Thursday' -++++++++++++inlineTextBox name='Thursday' -++++++++columnHeader name='Friday' -++++++++++staticText name='Friday' -++++++++++++inlineTextBox name='Friday' -++++++row -++++++++rowHeader name='09:00 - 11:00' -++++++++++staticText name='09:00 - 11:00' -++++++++++++inlineTextBox name='09:00 - 11:00' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++++cell name='Open' -++++++++++staticText name='Open' -++++++++++++inlineTextBox name='Open' -++++++++cell name='Open' -++++++++++staticText name='Open' -++++++++++++inlineTextBox name='Open' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++row -++++++++rowHeader name='11:00 - 13:00' -++++++++++staticText name='11:00 - 13:00' -++++++++++++inlineTextBox name='11:00 - 13:00' -++++++++cell name='Open' -++++++++++staticText name='Open' -++++++++++++inlineTextBox name='Open' -++++++++cell name='Open' -++++++++++staticText name='Open' -++++++++++++inlineTextBox name='Open' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++row -++++++++rowHeader name='13:00 - 15:00' -++++++++++staticText name='13:00 - 15:00' -++++++++++++inlineTextBox name='13:00 - 15:00' -++++++++cell name='Open' -++++++++++staticText name='Open' -++++++++++++inlineTextBox name='Open' -++++++++cell name='Open' -++++++++++staticText name='Open' -++++++++++++inlineTextBox name='Open' -++++++++cell name='Open' -++++++++++staticText name='Open' -++++++++++++inlineTextBox name='Open' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++row -++++++++rowHeader name='15:00 - 17:00' -++++++++++staticText name='15:00 - 17:00' -++++++++++++inlineTextBox name='15:00 - 17:00' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++++cell name='Closed' -++++++++++staticText name='Closed' -++++++++++++inlineTextBox name='Closed' -++++++++cell name='Open' -++++++++++staticText name='Open' -++++++++++++inlineTextBox name='Open' -++++++++cell name='Open' -++++++++++staticText name='Open' -++++++++++++inlineTextBox name='Open' +++table name='Delivery slots:' +++++caption +++++++staticText name='Delivery slots:' +++++++++inlineTextBox name='Delivery slots:' +++++row +++++++cell +++++++columnHeader name='Monday' +++++++++staticText name='Monday' +++++++++++inlineTextBox name='Monday' +++++++columnHeader name='Tuesday' +++++++++staticText name='Tuesday' +++++++++++inlineTextBox name='Tuesday' +++++++columnHeader name='Wednesday' +++++++++staticText name='Wednesday' +++++++++++inlineTextBox name='Wednesday' +++++++columnHeader name='Thursday' +++++++++staticText name='Thursday' +++++++++++inlineTextBox name='Thursday' +++++++columnHeader name='Friday' +++++++++staticText name='Friday' +++++++++++inlineTextBox name='Friday' +++++row +++++++rowHeader name='09:00 - 11:00' +++++++++staticText name='09:00 - 11:00' +++++++++++inlineTextBox name='09:00 - 11:00' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++++cell name='Open' +++++++++staticText name='Open' +++++++++++inlineTextBox name='Open' +++++++cell name='Open' +++++++++staticText name='Open' +++++++++++inlineTextBox name='Open' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++row +++++++rowHeader name='11:00 - 13:00' +++++++++staticText name='11:00 - 13:00' +++++++++++inlineTextBox name='11:00 - 13:00' +++++++cell name='Open' +++++++++staticText name='Open' +++++++++++inlineTextBox name='Open' +++++++cell name='Open' +++++++++staticText name='Open' +++++++++++inlineTextBox name='Open' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++row +++++++rowHeader name='13:00 - 15:00' +++++++++staticText name='13:00 - 15:00' +++++++++++inlineTextBox name='13:00 - 15:00' +++++++cell name='Open' +++++++++staticText name='Open' +++++++++++inlineTextBox name='Open' +++++++cell name='Open' +++++++++staticText name='Open' +++++++++++inlineTextBox name='Open' +++++++cell name='Open' +++++++++staticText name='Open' +++++++++++inlineTextBox name='Open' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++row +++++++rowHeader name='15:00 - 17:00' +++++++++staticText name='15:00 - 17:00' +++++++++++inlineTextBox name='15:00 - 17:00' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++++cell name='Closed' +++++++++staticText name='Closed' +++++++++++inlineTextBox name='Closed' +++++++cell name='Open' +++++++++staticText name='Open' +++++++++++inlineTextBox name='Open' +++++++cell name='Open' +++++++++staticText name='Open' +++++++++++inlineTextBox name='Open'
diff --git a/content/test/data/accessibility/html/table-headers-on-all-sides-expected-blink.txt b/content/test/data/accessibility/html/table-headers-on-all-sides-expected-blink.txt index edd0df22..4197d8c 100644 --- a/content/test/data/accessibility/html/table-headers-on-all-sides-expected-blink.txt +++ b/content/test/data/accessibility/html/table-headers-on-all-sides-expected-blink.txt
@@ -1,47 +1,46 @@ rootWebArea name='Table example - headers on all sides' -++genericContainer ignored -++++table -++++++row -++++++++cell -++++++++columnHeader name='Red' -++++++++++staticText name='Red' -++++++++++++inlineTextBox name='Red' -++++++++columnHeader name='Green' -++++++++++staticText name='Green' -++++++++++++inlineTextBox name='Green' -++++++++cell -++++++row -++++++++rowHeader name='Fruit' -++++++++++staticText name='Fruit' -++++++++++++inlineTextBox name='Fruit' -++++++++cell name='strawberry' -++++++++++staticText name='strawberry' -++++++++++++inlineTextBox name='strawberry' -++++++++cell name='lime' -++++++++++staticText name='lime' -++++++++++++inlineTextBox name='lime' -++++++++rowHeader name='Fruit' -++++++++++staticText name='Fruit' -++++++++++++inlineTextBox name='Fruit' -++++++row -++++++++rowHeader name='Veggies' -++++++++++staticText name='Veggies' -++++++++++++inlineTextBox name='Veggies' -++++++++cell name='radish' -++++++++++staticText name='radish' -++++++++++++inlineTextBox name='radish' -++++++++cell name='spinach' -++++++++++staticText name='spinach' -++++++++++++inlineTextBox name='spinach' -++++++++rowHeader name='Veggies' -++++++++++staticText name='Veggies' -++++++++++++inlineTextBox name='Veggies' -++++++row -++++++++cell -++++++++columnHeader name='Red' -++++++++++staticText name='Red' -++++++++++++inlineTextBox name='Red' -++++++++columnHeader name='Green' -++++++++++staticText name='Green' -++++++++++++inlineTextBox name='Green' -++++++++cell +++table +++++row +++++++cell +++++++columnHeader name='Red' +++++++++staticText name='Red' +++++++++++inlineTextBox name='Red' +++++++columnHeader name='Green' +++++++++staticText name='Green' +++++++++++inlineTextBox name='Green' +++++++cell +++++row +++++++rowHeader name='Fruit' +++++++++staticText name='Fruit' +++++++++++inlineTextBox name='Fruit' +++++++cell name='strawberry' +++++++++staticText name='strawberry' +++++++++++inlineTextBox name='strawberry' +++++++cell name='lime' +++++++++staticText name='lime' +++++++++++inlineTextBox name='lime' +++++++rowHeader name='Fruit' +++++++++staticText name='Fruit' +++++++++++inlineTextBox name='Fruit' +++++row +++++++rowHeader name='Veggies' +++++++++staticText name='Veggies' +++++++++++inlineTextBox name='Veggies' +++++++cell name='radish' +++++++++staticText name='radish' +++++++++++inlineTextBox name='radish' +++++++cell name='spinach' +++++++++staticText name='spinach' +++++++++++inlineTextBox name='spinach' +++++++rowHeader name='Veggies' +++++++++staticText name='Veggies' +++++++++++inlineTextBox name='Veggies' +++++row +++++++cell +++++++columnHeader name='Red' +++++++++staticText name='Red' +++++++++++inlineTextBox name='Red' +++++++columnHeader name='Green' +++++++++staticText name='Green' +++++++++++inlineTextBox name='Green' +++++++cell
diff --git a/content/test/data/accessibility/html/table-layout-expected-blink.txt b/content/test/data/accessibility/html/table-layout-expected-blink.txt index e439b630..20bdfb3b 100644 --- a/content/test/data/accessibility/html/table-layout-expected-blink.txt +++ b/content/test/data/accessibility/html/table-layout-expected-blink.txt
@@ -1,33 +1,32 @@ rootWebArea name='Table example #2' -++genericContainer ignored -++++layoutTable -++++++layoutTableRow -++++++++layoutTableCell name='1' -++++++++++staticText name='1' -++++++++++++inlineTextBox name='1' -++++++++layoutTableCell name='2' -++++++++++staticText name='2' -++++++++++++inlineTextBox name='2' -++++++++layoutTableCell name='3' -++++++++++staticText name='3' -++++++++++++inlineTextBox name='3' -++++++layoutTableRow -++++++++layoutTableCell name='4' -++++++++++staticText name='4' -++++++++++++inlineTextBox name='4' -++++++++layoutTableCell name='5' -++++++++++staticText name='5' -++++++++++++inlineTextBox name='5' -++++++++layoutTableCell name='6' -++++++++++staticText name='6' -++++++++++++inlineTextBox name='6' -++++++layoutTableRow -++++++++layoutTableCell name='7' -++++++++++staticText name='7' -++++++++++++inlineTextBox name='7' -++++++++layoutTableCell name='8' -++++++++++staticText name='8' -++++++++++++inlineTextBox name='8' -++++++++layoutTableCell name='9' -++++++++++staticText name='9' -++++++++++++inlineTextBox name='9' +++layoutTable +++++layoutTableRow +++++++layoutTableCell name='1' +++++++++staticText name='1' +++++++++++inlineTextBox name='1' +++++++layoutTableCell name='2' +++++++++staticText name='2' +++++++++++inlineTextBox name='2' +++++++layoutTableCell name='3' +++++++++staticText name='3' +++++++++++inlineTextBox name='3' +++++layoutTableRow +++++++layoutTableCell name='4' +++++++++staticText name='4' +++++++++++inlineTextBox name='4' +++++++layoutTableCell name='5' +++++++++staticText name='5' +++++++++++inlineTextBox name='5' +++++++layoutTableCell name='6' +++++++++staticText name='6' +++++++++++inlineTextBox name='6' +++++layoutTableRow +++++++layoutTableCell name='7' +++++++++staticText name='7' +++++++++++inlineTextBox name='7' +++++++layoutTableCell name='8' +++++++++staticText name='8' +++++++++++inlineTextBox name='8' +++++++layoutTableCell name='9' +++++++++staticText name='9' +++++++++++inlineTextBox name='9'
diff --git a/content/test/data/accessibility/html/table-multiple-row-and-column-headers-expected-blink.txt b/content/test/data/accessibility/html/table-multiple-row-and-column-headers-expected-blink.txt index 5df4c51..fb22679 100644 --- a/content/test/data/accessibility/html/table-multiple-row-and-column-headers-expected-blink.txt +++ b/content/test/data/accessibility/html/table-multiple-row-and-column-headers-expected-blink.txt
@@ -1,94 +1,93 @@ rootWebArea name='Table example - multiple row and column headers' -++genericContainer ignored -++++table -++++++row -++++++++cell -++++++++columnHeader name='Mars' -++++++++++staticText name='Mars' -++++++++++++inlineTextBox name='Mars' -++++++++columnHeader name='Venus' -++++++++++staticText name='Venus' -++++++++++++inlineTextBox name='Venus' -++++++row -++++++++columnHeader name='Produced' -++++++++++staticText name='Produced' -++++++++++++inlineTextBox name='Produced' -++++++++columnHeader name='Sold' -++++++++++staticText name='Sold' -++++++++++++inlineTextBox name='Sold' -++++++++columnHeader name='Produced' -++++++++++staticText name='Produced' -++++++++++++inlineTextBox name='Produced' -++++++++columnHeader name='Sold' -++++++++++staticText name='Sold' -++++++++++++inlineTextBox name='Sold' -++++++row -++++++++rowHeader name='For Toddlers' -++++++++++staticText name='For Toddlers' -++++++++++++inlineTextBox name='For Toddlers' -++++++++rowHeader name='Teddy Bears' -++++++++++staticText name='Teddy Bears' -++++++++++++inlineTextBox name='Teddy Bears' -++++++++cell name='50,000' -++++++++++staticText name='50,000' -++++++++++++inlineTextBox name='50,000' -++++++++cell name='30,000' -++++++++++staticText name='30,000' -++++++++++++inlineTextBox name='30,000' -++++++++cell name='100,000' -++++++++++staticText name='100,000' -++++++++++++inlineTextBox name='100,000' -++++++++cell name='80,000' -++++++++++staticText name='80,000' -++++++++++++inlineTextBox name='80,000' -++++++row -++++++++rowHeader name='Action Figures' -++++++++++staticText name='Action Figures' -++++++++++++inlineTextBox name='Action Figures' -++++++++cell name='25,000' -++++++++++staticText name='25,000' -++++++++++++inlineTextBox name='25,000' -++++++++cell name='15,000' -++++++++++staticText name='15,000' -++++++++++++inlineTextBox name='15,000' -++++++++cell name='50,000' -++++++++++staticText name='50,000' -++++++++++++inlineTextBox name='50,000' -++++++++cell name='40,000' -++++++++++staticText name='40,000' -++++++++++++inlineTextBox name='40,000' -++++++row -++++++++rowHeader name='For Teens' -++++++++++staticText name='For Teens' -++++++++++++inlineTextBox name='For Teens' -++++++++rowHeader name='Board Games' -++++++++++staticText name='Board Games' -++++++++++++inlineTextBox name='Board Games' -++++++++cell name='5,000' -++++++++++staticText name='5,000' -++++++++++++inlineTextBox name='5,000' -++++++++cell name='2,000' -++++++++++staticText name='2,000' -++++++++++++inlineTextBox name='2,000' -++++++++cell name='6,000' -++++++++++staticText name='6,000' -++++++++++++inlineTextBox name='6,000' -++++++++cell name='4,000' -++++++++++staticText name='4,000' -++++++++++++inlineTextBox name='4,000' -++++++row -++++++++rowHeader name='Video Games' -++++++++++staticText name='Video Games' -++++++++++++inlineTextBox name='Video Games' -++++++++cell name='10,000' -++++++++++staticText name='10,000' -++++++++++++inlineTextBox name='10,000' -++++++++cell name='5,000' -++++++++++staticText name='5,000' -++++++++++++inlineTextBox name='5,000' -++++++++cell name='12,000' -++++++++++staticText name='12,000' -++++++++++++inlineTextBox name='12,000' -++++++++cell name='9,000' -++++++++++staticText name='9,000' -++++++++++++inlineTextBox name='9,000' +++table +++++row +++++++cell +++++++columnHeader name='Mars' +++++++++staticText name='Mars' +++++++++++inlineTextBox name='Mars' +++++++columnHeader name='Venus' +++++++++staticText name='Venus' +++++++++++inlineTextBox name='Venus' +++++row +++++++columnHeader name='Produced' +++++++++staticText name='Produced' +++++++++++inlineTextBox name='Produced' +++++++columnHeader name='Sold' +++++++++staticText name='Sold' +++++++++++inlineTextBox name='Sold' +++++++columnHeader name='Produced' +++++++++staticText name='Produced' +++++++++++inlineTextBox name='Produced' +++++++columnHeader name='Sold' +++++++++staticText name='Sold' +++++++++++inlineTextBox name='Sold' +++++row +++++++rowHeader name='For Toddlers' +++++++++staticText name='For Toddlers' +++++++++++inlineTextBox name='For Toddlers' +++++++rowHeader name='Teddy Bears' +++++++++staticText name='Teddy Bears' +++++++++++inlineTextBox name='Teddy Bears' +++++++cell name='50,000' +++++++++staticText name='50,000' +++++++++++inlineTextBox name='50,000' +++++++cell name='30,000' +++++++++staticText name='30,000' +++++++++++inlineTextBox name='30,000' +++++++cell name='100,000' +++++++++staticText name='100,000' +++++++++++inlineTextBox name='100,000' +++++++cell name='80,000' +++++++++staticText name='80,000' +++++++++++inlineTextBox name='80,000' +++++row +++++++rowHeader name='Action Figures' +++++++++staticText name='Action Figures' +++++++++++inlineTextBox name='Action Figures' +++++++cell name='25,000' +++++++++staticText name='25,000' +++++++++++inlineTextBox name='25,000' +++++++cell name='15,000' +++++++++staticText name='15,000' +++++++++++inlineTextBox name='15,000' +++++++cell name='50,000' +++++++++staticText name='50,000' +++++++++++inlineTextBox name='50,000' +++++++cell name='40,000' +++++++++staticText name='40,000' +++++++++++inlineTextBox name='40,000' +++++row +++++++rowHeader name='For Teens' +++++++++staticText name='For Teens' +++++++++++inlineTextBox name='For Teens' +++++++rowHeader name='Board Games' +++++++++staticText name='Board Games' +++++++++++inlineTextBox name='Board Games' +++++++cell name='5,000' +++++++++staticText name='5,000' +++++++++++inlineTextBox name='5,000' +++++++cell name='2,000' +++++++++staticText name='2,000' +++++++++++inlineTextBox name='2,000' +++++++cell name='6,000' +++++++++staticText name='6,000' +++++++++++inlineTextBox name='6,000' +++++++cell name='4,000' +++++++++staticText name='4,000' +++++++++++inlineTextBox name='4,000' +++++row +++++++rowHeader name='Video Games' +++++++++staticText name='Video Games' +++++++++++inlineTextBox name='Video Games' +++++++cell name='10,000' +++++++++staticText name='10,000' +++++++++++inlineTextBox name='10,000' +++++++cell name='5,000' +++++++++staticText name='5,000' +++++++++++inlineTextBox name='5,000' +++++++cell name='12,000' +++++++++staticText name='12,000' +++++++++++inlineTextBox name='12,000' +++++++cell name='9,000' +++++++++staticText name='9,000' +++++++++++inlineTextBox name='9,000'
diff --git a/content/test/data/accessibility/html/table-presentation-expected-blink.txt b/content/test/data/accessibility/html/table-presentation-expected-blink.txt index cdf1ddc..fc19af8 100644 --- a/content/test/data/accessibility/html/table-presentation-expected-blink.txt +++ b/content/test/data/accessibility/html/table-presentation-expected-blink.txt
@@ -1,15 +1,13 @@ rootWebArea name='Table with role=presentation' -++genericContainer ignored -++++presentational ignored -++++++genericContainer -++++++++staticText name='1' -++++++++++inlineTextBox name='1' -++++++genericContainer -++++++++staticText name='2' -++++++++++inlineTextBox name='2' -++++++genericContainer -++++++++staticText name='4' -++++++++++inlineTextBox name='4' -++++++genericContainer -++++++++staticText name='5' -++++++++++inlineTextBox name='5' +++genericContainer +++++staticText name='1' +++++++inlineTextBox name='1' +++genericContainer +++++staticText name='2' +++++++inlineTextBox name='2' +++genericContainer +++++staticText name='4' +++++++inlineTextBox name='4' +++genericContainer +++++staticText name='5' +++++++inlineTextBox name='5' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/table-simple-expected-blink.txt b/content/test/data/accessibility/html/table-simple-expected-blink.txt index 5dac45b..5a02eb6 100644 --- a/content/test/data/accessibility/html/table-simple-expected-blink.txt +++ b/content/test/data/accessibility/html/table-simple-expected-blink.txt
@@ -1,24 +1,23 @@ rootWebArea name='Table example' -++genericContainer ignored -++++table -++++++row -++++++++columnHeader name='Pair' -++++++++++staticText name='Pair' -++++++++++++inlineTextBox name='Pair' -++++++++columnHeader name='Single' -++++++++++staticText name='Single' -++++++++++++inlineTextBox name='Single' -++++++row -++++++++cell name='AB' -++++++++++staticText name='AB' -++++++++++++inlineTextBox name='AB' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++++row -++++++++cell name='CD' -++++++++++staticText name='CD' -++++++++++++inlineTextBox name='CD' -++++++++cell name='D' -++++++++++staticText name='D' -++++++++++++inlineTextBox name='D' +++table +++++row +++++++columnHeader name='Pair' +++++++++staticText name='Pair' +++++++++++inlineTextBox name='Pair' +++++++columnHeader name='Single' +++++++++staticText name='Single' +++++++++++inlineTextBox name='Single' +++++row +++++++cell name='AB' +++++++++staticText name='AB' +++++++++++inlineTextBox name='AB' +++++++cell name='B' +++++++++staticText name='B' +++++++++++inlineTextBox name='B' +++++row +++++++cell name='CD' +++++++++staticText name='CD' +++++++++++inlineTextBox name='CD' +++++++cell name='D' +++++++++staticText name='D' +++++++++++inlineTextBox name='D'
diff --git a/content/test/data/accessibility/html/table-spans-expected-blink.txt b/content/test/data/accessibility/html/table-spans-expected-blink.txt index 9c4f8b5..1d9a046 100644 --- a/content/test/data/accessibility/html/table-spans-expected-blink.txt +++ b/content/test/data/accessibility/html/table-spans-expected-blink.txt
@@ -1,29 +1,28 @@ rootWebArea name='Table example with rowspan and colspan' -++genericContainer ignored -++++table -++++++row -++++++++cell name='AD' -++++++++++staticText name='AD' -++++++++++++inlineTextBox name='AD' -++++++++cell name='BC' -++++++++++staticText name='BC' -++++++++++++inlineTextBox name='BC' -++++++row -++++++++cell name='EF' -++++++++++staticText name='EF' -++++++++++++inlineTextBox name='EF' -++++table -++++++row -++++++++cell name='AD' -++++++++++staticText name='AD' -++++++++++++inlineTextBox name='AD' -++++++++cell name='BC' -++++++++++staticText name='BC' -++++++++++++inlineTextBox name='BC' -++++++row -++++++++cell name='EF' -++++++++++staticText name='EF' -++++++++++++inlineTextBox name='EF' -++++++++cell name='GH' -++++++++++staticText name='GH' -++++++++++++inlineTextBox name='GH' +++table +++++row +++++++cell name='AD' +++++++++staticText name='AD' +++++++++++inlineTextBox name='AD' +++++++cell name='BC' +++++++++staticText name='BC' +++++++++++inlineTextBox name='BC' +++++row +++++++cell name='EF' +++++++++staticText name='EF' +++++++++++inlineTextBox name='EF' +++table +++++row +++++++cell name='AD' +++++++++staticText name='AD' +++++++++++inlineTextBox name='AD' +++++++cell name='BC' +++++++++staticText name='BC' +++++++++++inlineTextBox name='BC' +++++row +++++++cell name='EF' +++++++++staticText name='EF' +++++++++++inlineTextBox name='EF' +++++++cell name='GH' +++++++++staticText name='GH' +++++++++++inlineTextBox name='GH'
diff --git a/content/test/data/accessibility/html/table-th-colheader-expected-blink.txt b/content/test/data/accessibility/html/table-th-colheader-expected-blink.txt index 1f1a9d4..bd40bc2 100644 --- a/content/test/data/accessibility/html/table-th-colheader-expected-blink.txt +++ b/content/test/data/accessibility/html/table-th-colheader-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea -++genericContainer ignored -++++table -++++++row -++++++++columnHeader name='Firstname' -++++++++++staticText name='Firstname' -++++++++++++inlineTextBox name='Firstname' -++++++++columnHeader name='Lastname' -++++++++++staticText name='Lastname' -++++++++++++inlineTextBox name='Lastname' -++++++row -++++++++cell name='Jill' -++++++++++staticText name='Jill' -++++++++++++inlineTextBox name='Jill' -++++++++cell name='Smith' -++++++++++staticText name='Smith' -++++++++++++inlineTextBox name='Smith' +++table +++++row +++++++columnHeader name='Firstname' +++++++++staticText name='Firstname' +++++++++++inlineTextBox name='Firstname' +++++++columnHeader name='Lastname' +++++++++staticText name='Lastname' +++++++++++inlineTextBox name='Lastname' +++++row +++++++cell name='Jill' +++++++++staticText name='Jill' +++++++++++inlineTextBox name='Jill' +++++++cell name='Smith' +++++++++staticText name='Smith' +++++++++++inlineTextBox name='Smith'
diff --git a/content/test/data/accessibility/html/table-th-rowheader-expected-blink.txt b/content/test/data/accessibility/html/table-th-rowheader-expected-blink.txt index 315fbdf..79bc45da 100644 --- a/content/test/data/accessibility/html/table-th-rowheader-expected-blink.txt +++ b/content/test/data/accessibility/html/table-th-rowheader-expected-blink.txt
@@ -1,17 +1,16 @@ rootWebArea name='Table example - th rowheader' -++genericContainer ignored -++++table -++++++row -++++++++rowHeader name='Firstname' -++++++++++staticText name='Firstname' -++++++++++++inlineTextBox name='Firstname' -++++++++cell name='Jill' -++++++++++staticText name='Jill' -++++++++++++inlineTextBox name='Jill' -++++++row -++++++++rowHeader name='Lastname' -++++++++++staticText name='Lastname' -++++++++++++inlineTextBox name='Lastname' -++++++++cell name='Smith' -++++++++++staticText name='Smith' -++++++++++++inlineTextBox name='Smith' +++table +++++row +++++++rowHeader name='Firstname' +++++++++staticText name='Firstname' +++++++++++inlineTextBox name='Firstname' +++++++cell name='Jill' +++++++++staticText name='Jill' +++++++++++inlineTextBox name='Jill' +++++row +++++++rowHeader name='Lastname' +++++++++staticText name='Lastname' +++++++++++inlineTextBox name='Lastname' +++++++cell name='Smith' +++++++++staticText name='Smith' +++++++++++inlineTextBox name='Smith'
diff --git a/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-blink.txt b/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-blink.txt index cc17c74..cd1b37b74 100644 --- a/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-blink.txt +++ b/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-blink.txt
@@ -1,31 +1,30 @@ rootWebArea name='Table example - thead, tbody, tfoot' -++genericContainer ignored -++++table -++++++row -++++++++columnHeader name='Sum' -++++++++++staticText name='Sum' -++++++++++++inlineTextBox name='Sum' -++++++++columnHeader name='Subtraction' -++++++++++staticText name='Subtraction' -++++++++++++inlineTextBox name='Subtraction' -++++++row -++++++++cell name='10' -++++++++++staticText name='10' -++++++++++++inlineTextBox name='10' -++++++++cell name='7' -++++++++++staticText name='7' -++++++++++++inlineTextBox name='7' -++++++row -++++++++cell name='2' -++++++++++staticText name='2' -++++++++++++inlineTextBox name='2' -++++++++cell name='4' -++++++++++staticText name='4' -++++++++++++inlineTextBox name='4' -++++++row -++++++++cell name='12' -++++++++++staticText name='12' -++++++++++++inlineTextBox name='12' -++++++++cell name='3' -++++++++++staticText name='3' -++++++++++++inlineTextBox name='3' +++table +++++row +++++++columnHeader name='Sum' +++++++++staticText name='Sum' +++++++++++inlineTextBox name='Sum' +++++++columnHeader name='Subtraction' +++++++++staticText name='Subtraction' +++++++++++inlineTextBox name='Subtraction' +++++row +++++++cell name='10' +++++++++staticText name='10' +++++++++++inlineTextBox name='10' +++++++cell name='7' +++++++++staticText name='7' +++++++++++inlineTextBox name='7' +++++row +++++++cell name='2' +++++++++staticText name='2' +++++++++++inlineTextBox name='2' +++++++cell name='4' +++++++++staticText name='4' +++++++++++inlineTextBox name='4' +++++row +++++++cell name='12' +++++++++staticText name='12' +++++++++++inlineTextBox name='12' +++++++cell name='3' +++++++++staticText name='3' +++++++++++inlineTextBox name='3'
diff --git a/content/test/data/accessibility/html/text-decoration-styles-expected-blink.txt b/content/test/data/accessibility/html/text-decoration-styles-expected-blink.txt index 93574ab..e1aee47 100644 --- a/content/test/data/accessibility/html/text-decoration-styles-expected-blink.txt +++ b/content/test/data/accessibility/html/text-decoration-styles-expected-blink.txt
@@ -1,56 +1,55 @@ rootWebArea -++genericContainer ignored -++++paragraph textOverlineStyle=solid -++++++staticText name='overline style: none' textOverlineStyle=solid -++++++++inlineTextBox name='overline style: none' -++++paragraph textOverlineStyle=dotted -++++++staticText name='overline style: dotted' textOverlineStyle=dotted -++++++++inlineTextBox name='overline style: dotted' -++++paragraph textOverlineStyle=dashed -++++++staticText name='overline style: dashed' textOverlineStyle=dashed -++++++++inlineTextBox name='overline style: dashed' -++++paragraph textOverlineStyle=solid -++++++staticText name='overline style: solid' textOverlineStyle=solid -++++++++inlineTextBox name='overline style: solid' -++++paragraph textOverlineStyle=double -++++++staticText name='overline style: double' textOverlineStyle=double -++++++++inlineTextBox name='overline style: double' -++++paragraph textOverlineStyle=wavy -++++++staticText name='overline style: wavy' textOverlineStyle=wavy -++++++++inlineTextBox name='overline style: wavy' -++++paragraph textUnderlineStyle=solid -++++++staticText name='underline style: none' textUnderlineStyle=solid -++++++++inlineTextBox name='underline style: none' -++++paragraph textUnderlineStyle=dotted -++++++staticText name='underline style: dotted' textUnderlineStyle=dotted -++++++++inlineTextBox name='underline style: dotted' -++++paragraph textUnderlineStyle=dashed -++++++staticText name='underline style: dashed' textUnderlineStyle=dashed -++++++++inlineTextBox name='underline style: dashed' -++++paragraph textUnderlineStyle=solid -++++++staticText name='underline style: solid' textUnderlineStyle=solid -++++++++inlineTextBox name='underline style: solid' -++++paragraph textUnderlineStyle=double -++++++staticText name='underline style: double' textUnderlineStyle=double -++++++++inlineTextBox name='underline style: double' -++++paragraph textUnderlineStyle=wavy -++++++staticText name='underline style: wavy' textUnderlineStyle=wavy -++++++++inlineTextBox name='underline style: wavy' -++++paragraph textStrikethroughStyle=solid -++++++staticText name='line-through style: none' textStrikethroughStyle=solid -++++++++inlineTextBox name='line-through style: none' -++++paragraph textStrikethroughStyle=dotted -++++++staticText name='line-through style: dotted' textStrikethroughStyle=dotted -++++++++inlineTextBox name='line-through style: dotted' -++++paragraph textStrikethroughStyle=dashed -++++++staticText name='line-through style: dashed' textStrikethroughStyle=dashed -++++++++inlineTextBox name='line-through style: dashed' -++++paragraph textStrikethroughStyle=solid -++++++staticText name='line-through style: solid' textStrikethroughStyle=solid -++++++++inlineTextBox name='line-through style: solid' -++++paragraph textStrikethroughStyle=double -++++++staticText name='line-through style: double' textStrikethroughStyle=double -++++++++inlineTextBox name='line-through style: double' -++++paragraph textStrikethroughStyle=wavy -++++++staticText name='line-through style: wavy' textStrikethroughStyle=wavy -++++++++inlineTextBox name='line-through style: wavy' +++paragraph textOverlineStyle=solid +++++staticText name='overline style: none' textOverlineStyle=solid +++++++inlineTextBox name='overline style: none' +++paragraph textOverlineStyle=dotted +++++staticText name='overline style: dotted' textOverlineStyle=dotted +++++++inlineTextBox name='overline style: dotted' +++paragraph textOverlineStyle=dashed +++++staticText name='overline style: dashed' textOverlineStyle=dashed +++++++inlineTextBox name='overline style: dashed' +++paragraph textOverlineStyle=solid +++++staticText name='overline style: solid' textOverlineStyle=solid +++++++inlineTextBox name='overline style: solid' +++paragraph textOverlineStyle=double +++++staticText name='overline style: double' textOverlineStyle=double +++++++inlineTextBox name='overline style: double' +++paragraph textOverlineStyle=wavy +++++staticText name='overline style: wavy' textOverlineStyle=wavy +++++++inlineTextBox name='overline style: wavy' +++paragraph textUnderlineStyle=solid +++++staticText name='underline style: none' textUnderlineStyle=solid +++++++inlineTextBox name='underline style: none' +++paragraph textUnderlineStyle=dotted +++++staticText name='underline style: dotted' textUnderlineStyle=dotted +++++++inlineTextBox name='underline style: dotted' +++paragraph textUnderlineStyle=dashed +++++staticText name='underline style: dashed' textUnderlineStyle=dashed +++++++inlineTextBox name='underline style: dashed' +++paragraph textUnderlineStyle=solid +++++staticText name='underline style: solid' textUnderlineStyle=solid +++++++inlineTextBox name='underline style: solid' +++paragraph textUnderlineStyle=double +++++staticText name='underline style: double' textUnderlineStyle=double +++++++inlineTextBox name='underline style: double' +++paragraph textUnderlineStyle=wavy +++++staticText name='underline style: wavy' textUnderlineStyle=wavy +++++++inlineTextBox name='underline style: wavy' +++paragraph textStrikethroughStyle=solid +++++staticText name='line-through style: none' textStrikethroughStyle=solid +++++++inlineTextBox name='line-through style: none' +++paragraph textStrikethroughStyle=dotted +++++staticText name='line-through style: dotted' textStrikethroughStyle=dotted +++++++inlineTextBox name='line-through style: dotted' +++paragraph textStrikethroughStyle=dashed +++++staticText name='line-through style: dashed' textStrikethroughStyle=dashed +++++++inlineTextBox name='line-through style: dashed' +++paragraph textStrikethroughStyle=solid +++++staticText name='line-through style: solid' textStrikethroughStyle=solid +++++++inlineTextBox name='line-through style: solid' +++paragraph textStrikethroughStyle=double +++++staticText name='line-through style: double' textStrikethroughStyle=double +++++++inlineTextBox name='line-through style: double' +++paragraph textStrikethroughStyle=wavy +++++staticText name='line-through style: wavy' textStrikethroughStyle=wavy +++++++inlineTextBox name='line-through style: wavy'
diff --git a/content/test/data/accessibility/html/title-changed-expected-blink.txt b/content/test/data/accessibility/html/title-changed-expected-blink.txt index 2199bd8b..2f6448e 100644 --- a/content/test/data/accessibility/html/title-changed-expected-blink.txt +++ b/content/test/data/accessibility/html/title-changed-expected-blink.txt
@@ -1,2 +1 @@ rootWebArea name='New Title' -++genericContainer ignored
diff --git a/content/test/data/accessibility/html/title-expected-blink.txt b/content/test/data/accessibility/html/title-expected-blink.txt index 265b4fc1..f42e87f 100644 --- a/content/test/data/accessibility/html/title-expected-blink.txt +++ b/content/test/data/accessibility/html/title-expected-blink.txt
@@ -1,2 +1 @@ -rootWebArea name='Title of the document' -++genericContainer ignored +rootWebArea name='Title of the document' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/truncate-label-expected-blink.txt b/content/test/data/accessibility/html/truncate-label-expected-blink.txt index 8485a24..c8f8f97 100644 --- a/content/test/data/accessibility/html/truncate-label-expected-blink.txt +++ b/content/test/data/accessibility/html/truncate-label-expected-blink.txt
@@ -1,3 +1,2 @@ rootWebArea -++genericContainer ignored -++++genericContainer name='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' +++genericContainer name='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
diff --git a/content/test/data/accessibility/html/ul-expected-blink.txt b/content/test/data/accessibility/html/ul-expected-blink.txt index 9ae64fe..c0ead70 100644 --- a/content/test/data/accessibility/html/ul-expected-blink.txt +++ b/content/test/data/accessibility/html/ul-expected-blink.txt
@@ -1,15 +1,14 @@ rootWebArea -++genericContainer ignored -++++list -++++++listItem -++++++++listMarker name='• ' -++++++++staticText name='Item 1' -++++++++++inlineTextBox name='Item 1' -++++++listItem -++++++++listMarker name='• ' -++++++++staticText name='Item 2' -++++++++++inlineTextBox name='Item 2' -++++++listItem -++++++++listMarker name='• ' -++++++++staticText name='Item 3' -++++++++++inlineTextBox name='Item 3' +++list +++++listItem +++++++listMarker name='• ' +++++++staticText name='Item 1' +++++++++inlineTextBox name='Item 1' +++++listItem +++++++listMarker name='• ' +++++++staticText name='Item 2' +++++++++inlineTextBox name='Item 2' +++++listItem +++++++listMarker name='• ' +++++++staticText name='Item 3' +++++++++inlineTextBox name='Item 3'
diff --git a/content/test/data/accessibility/html/window-crops-items-expected-blink.txt b/content/test/data/accessibility/html/window-crops-items-expected-blink.txt index 9535a5d9..6380df7e 100644 --- a/content/test/data/accessibility/html/window-crops-items-expected-blink.txt +++ b/content/test/data/accessibility/html/window-crops-items-expected-blink.txt
@@ -1,9 +1,9 @@ rootWebArea -++genericContainer ignored -++++button size=(300, 150) name='Button fits' -++++button offscreen size=(300, 150) pageSize=(1, 150) name='Button offscreen X' -++++button offscreen size=(300, 150) pageSize=(300, 1) name='Button offscreen Y' -++++button size=(300, 150) name='Button partially on screen' -++++button offscreen size=(300, 150) pageSize=(1, 1) name='Button offscreen' -++++button offscreen size=(300, 150) pageSize=(1, 1) name='Button offscreen top' -++++button size=(300, 150) pageSize=(208, 58) name='Button partially on screen' +++button size=(300, 150) name='Button fits' +++button offscreen size=(300, 150) pageSize=(1, 150) name='Button offscreen X' +++button offscreen size=(300, 150) pageSize=(300, 1) name='Button offscreen Y' +++button size=(300, 150) name='Button partially on screen' +++button offscreen size=(300, 150) pageSize=(1, 1) name='Button offscreen' +++button offscreen size=(300, 150) pageSize=(1, 1) name='Button offscreen top' +++button size=(300, 150) pageSize=(208, 58) name='Button partially on screen' +<-- End-of-file --> \ No newline at end of file
diff --git a/content/test/data/accessibility/language-detection/basic-expected-blink.txt b/content/test/data/accessibility/language-detection/basic-expected-blink.txt index c6648f0..2eb6e1e 100644 --- a/content/test/data/accessibility/language-detection/basic-expected-blink.txt +++ b/content/test/data/accessibility/language-detection/basic-expected-blink.txt
@@ -1,6 +1,5 @@ rootWebArea language='en-US' -++genericContainer ignored language='en-GB' -++++genericContainer language='fr' -++++++staticText language='en' name='“The famous pipe. How people reproached me for it! And yet, could you stuff my pipe? No, it’s just a representation, is it not? So if I had written on my picture ‘This is a pipe,’ I’d have been lying!"' -++++genericContainer language='en' -++++++staticText language='fr' name='« La fameuse pipe, me l’a-t-on assez reprochée ! Et pourtant, pouvez-vous la bourrer ma pipe ? Non, n’est-ce pas, elle n’est qu’une représentation. Donc si j’avais écrit sous mon tableau « ceci est une pipe », j’aurais menti ! »' +++genericContainer language='fr' +++++staticText language='en' name='“The famous pipe. How people reproached me for it! And yet, could you stuff my pipe? No, it’s just a representation, is it not? So if I had written on my picture ‘This is a pipe,’ I’d have been lying!"' +++genericContainer language='en' +++++staticText language='fr' name='« La fameuse pipe, me l’a-t-on assez reprochée ! Et pourtant, pouvez-vous la bourrer ma pipe ? Non, n’est-ce pas, elle n’est qu’une représentation. Donc si j’avais écrit sous mon tableau « ceci est une pipe », j’aurais menti ! »'
diff --git a/content/test/data/accessibility/language-detection/lang-attribute-nested-expected-blink.txt b/content/test/data/accessibility/language-detection/lang-attribute-nested-expected-blink.txt index cb6c7c1..5596a314 100644 --- a/content/test/data/accessibility/language-detection/lang-attribute-nested-expected-blink.txt +++ b/content/test/data/accessibility/language-detection/lang-attribute-nested-expected-blink.txt
@@ -1,13 +1,11 @@ rootWebArea language='en-US' -++genericContainer ignored language='en' -++++genericContainer ignored language='es-ES' -++++++genericContainer language='en' -++++++++staticText language='en' name='This document is excellent.' -++++++++++inlineTextBox language='en' name='This document is excellent.' -++++++staticText language='es-ES' name='Este documento es excelente.' -++++++++inlineTextBox language='es-ES' name='Este documento es excelente.' -++++genericContainer language='fr' -++++++staticText language='fr' name='Ce document est excellent.' -++++++++inlineTextBox language='fr' name='Ce document est excellent.' +++genericContainer language='en' ++++staticText language='en' name='This document is excellent.' ++++++inlineTextBox language='en' name='This document is excellent.' +++staticText language='es-ES' name='Este documento es excelente.' +++++inlineTextBox language='es-ES' name='Este documento es excelente.' +++genericContainer language='fr' +++++staticText language='fr' name='Ce document est excellent.' +++++++inlineTextBox language='fr' name='Ce document est excellent.' +++staticText language='en' name='This document is excellent.' +++++inlineTextBox language='en' name='This document is excellent.'
diff --git a/content/test/data/accessibility/language-detection/lang-attribute-switching-expected-blink.txt b/content/test/data/accessibility/language-detection/lang-attribute-switching-expected-blink.txt index 5f607759..db989ad 100644 --- a/content/test/data/accessibility/language-detection/lang-attribute-switching-expected-blink.txt +++ b/content/test/data/accessibility/language-detection/lang-attribute-switching-expected-blink.txt
@@ -1,13 +1,12 @@ rootWebArea language='en-US' -++genericContainer ignored language='en' -++++paragraph language='en' -++++++staticText language='en' name='In the morning, I sometimes eat breakfast.' -++++++++inlineTextBox language='en' name='In the morning, I sometimes eat breakfast.' -++++paragraph language='fr' -++++++staticText language='fr' name='Dans l'apres-midi, je dejeune.' -++++++++inlineTextBox language='fr' name='Dans l'apres-midi, je dejeune.' -++++paragraph language='en' -++++++staticText language='en' name='Hello it's a pleasure to meet you. ' -++++++++inlineTextBox language='en' name='Hello it's a pleasure to meet you. ' -++++++staticText language='fr' name='Comment ca va?' -++++++++inlineTextBox language='fr' name='Comment ca va?' +++paragraph language='en' +++++staticText language='en' name='In the morning, I sometimes eat breakfast.' +++++++inlineTextBox language='en' name='In the morning, I sometimes eat breakfast.' +++paragraph language='fr' +++++staticText language='fr' name='Dans l'apres-midi, je dejeune.' +++++++inlineTextBox language='fr' name='Dans l'apres-midi, je dejeune.' +++paragraph language='en' +++++staticText language='en' name='Hello it's a pleasure to meet you. ' +++++++inlineTextBox language='en' name='Hello it's a pleasure to meet you. ' +++++staticText language='fr' name='Comment ca va?' +++++++inlineTextBox language='fr' name='Comment ca va?'
diff --git a/content/test/data/accessibility/regression/xml-in-iframe-crash-expected-blink.txt b/content/test/data/accessibility/regression/xml-in-iframe-crash-expected-blink.txt index d992263..ab8ac60a 100644 --- a/content/test/data/accessibility/regression/xml-in-iframe-crash-expected-blink.txt +++ b/content/test/data/accessibility/regression/xml-in-iframe-crash-expected-blink.txt
@@ -1,6 +1,3 @@ rootWebArea -++genericContainer ignored -++++iframe -++++++rootWebArea -++++++++genericContainer ignored -++++genericContainer ignored +++iframe +++++rootWebArea
diff --git a/content/test/data/accessibility/test-harness/deny-node-expected-blink.txt b/content/test/data/accessibility/test-harness/deny-node-expected-blink.txt index f51e3a2..3a0424f 100644 --- a/content/test/data/accessibility/test-harness/deny-node-expected-blink.txt +++ b/content/test/data/accessibility/test-harness/deny-node-expected-blink.txt
@@ -1,16 +1,15 @@ rootWebArea -++genericContainer ignored -++++genericContainer -++++++staticText name='This is a very important form full of very important form related things to fill in, it is likely the most important form you will see within the next 100 milliseconds. You may think I am just rambling, but this is rambling with a purpose! We need enough content in this div to force splitting across multiple inlineTextBox-en which we can then ignore using *-DENY-NODE.' -++++form -++++++paragraph -++++++++staticText name='Please provide your details:' -++++++labelText -++++++++staticText name='Quack:' -++++++textField name='Quack:' -++++++++genericContainer -++++++labelText -++++++++staticText name='Moo?:' -++++++radioButton name='Mooooo!' checkedState=false -++++++radioButton name='Mooooo?' checkedState=false -++++++button name='Submit' +++genericContainer +++++staticText name='This is a very important form full of very important form related things to fill in, it is likely the most important form you will see within the next 100 milliseconds. You may think I am just rambling, but this is rambling with a purpose! We need enough content in this div to force splitting across multiple inlineTextBox-en which we can then ignore using *-DENY-NODE.' +++form +++++paragraph +++++++staticText name='Please provide your details:' +++++labelText +++++++staticText name='Quack:' +++++textField name='Quack:' +++++++genericContainer +++++labelText +++++++staticText name='Moo?:' +++++radioButton name='Mooooo!' checkedState=false +++++radioButton name='Mooooo?' checkedState=false +++++button name='Submit'
diff --git a/docs/accessibility/overview.md b/docs/accessibility/overview.md index 5d18ca3..1d45976 100644 --- a/docs/accessibility/overview.md +++ b/docs/accessibility/overview.md
@@ -512,6 +512,7 @@ [AXContentNodeData]: https://cs.chromium.org/chromium/src/content/common/ax_content_node_data.h [AXLayoutObject]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/modules/accessibility/ax_layout_object.h [AXNodeObject]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/modules/accessibility/ax_node_object.h +[AXObject]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/modules/accessibility/ax_object.h [AXObjectImpl]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/modules/accessibility/ax_object_impl.h [AXObjectCacheImpl]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h [AXPlatformNode]: https://cs.chromium.org/chromium/src/ui/accessibility/platform/ax_platform_node.h @@ -522,7 +523,7 @@ [BrowserAccessibilityManager]: https://cs.chromium.org/chromium/src/content/browser/accessibility/browser_accessibility_manager.h [LayoutObject]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/layout/layout_object.h [ViewAccessibility]: https://cs.chromium.org/chromium/src/ui/views/accessibility/view_accessibility.h -[Node]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/dom/Node.h +[Node]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/dom/node.h [RenderAccessibilityImpl]: https://cs.chromium.org/chromium/src/content/renderer/accessibility/render_accessibility_impl.h [RenderFrameHostImpl]: https://cs.chromium.org/chromium/src/content/browser/frame_host/render_frame_host_impl.h [ui::AXNodeData]: https://cs.chromium.org/chromium/src/ui/accessibility/ax_node_data.h
diff --git a/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc b/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc index 4164da91..843bac9 100644 --- a/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc +++ b/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc
@@ -203,7 +203,6 @@ case ui::AXEventGenerator::Event::GRABBED_CHANGED: case ui::AXEventGenerator::Event::HASPOPUP_CHANGED: case ui::AXEventGenerator::Event::HIERARCHICAL_LEVEL_CHANGED: - case ui::AXEventGenerator::Event::IGNORED_CHANGED: case ui::AXEventGenerator::Event::KEY_SHORTCUTS_CHANGED: case ui::AXEventGenerator::Event::LABELED_BY_CHANGED: case ui::AXEventGenerator::Event::LANGUAGE_CHANGED:
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc index f4103e5a..1c3670d 100644 --- a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc +++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
@@ -709,7 +709,7 @@ if (GetRootOfChildTree(&node, &tree_wrapper)) child_count = 1; else - child_count = node->GetUnignoredChildCount(); + child_count = node->children().size(); result.Set(v8::Integer::New(isolate, int32_t{child_count})); }); @@ -717,8 +717,7 @@ "GetIndexInParent", [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, AutomationAXTreeWrapper* tree_wrapper, ui::AXNode* node) { - result.Set(v8::Integer::New( - isolate, int32_t{node->GetUnignoredIndexInParent()})); + result.Set(v8::Integer::New(isolate, int32_t{node->index_in_parent()})); }); RouteNodeIDFunction( "GetRole", [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, @@ -771,9 +770,9 @@ if (GetRootOfChildTree(&node, &tree_wrapper)) { child_ids.push_back(node->id()); } else { - size_t child_count = node->GetUnignoredChildCount(); - for (size_t i = 0; i < child_count; ++i) - child_ids.push_back(node->GetUnignoredChildAtIndex(i)->id()); + const std::vector<ui::AXNode*>& children = node->children(); + for (size_t i = 0; i < children.size(); ++i) + child_ids.push_back(children[i]->id()); } gin::DataObjectBuilder response(isolate); @@ -1700,8 +1699,8 @@ ui::AXNode* AutomationInternalCustomBindings::GetParent( ui::AXNode* node, AutomationAXTreeWrapper** in_out_tree_wrapper) const { - if (node->GetUnignoredParent()) - return node->GetUnignoredParent(); + if (node->parent()) + return node->parent(); AutomationAXTreeWrapper* parent_tree_wrapper = nullptr; @@ -1770,8 +1769,8 @@ ui::AXNode* start, AutomationAXTreeWrapper** in_out_tree_wrapper) const { ui::AXNode* walker = start; - if (walker->GetUnignoredChildCount()) - return walker->GetUnignoredChildAtIndex(0); + if (!walker->children().empty()) + return walker->children().front(); // We also have to check child tree id. if (GetRootOfChildTree(&walker, in_out_tree_wrapper)) @@ -1780,11 +1779,9 @@ // Find the next branch forward. ui::AXNode* parent; while ((parent = GetParent(walker, in_out_tree_wrapper))) { - if ((walker->GetUnignoredIndexInParent() + 1) < - parent->GetUnignoredChildCount()) { - return parent->GetUnignoredChildAtIndex( - walker->GetUnignoredIndexInParent() + 1); - } + if ((walker->index_in_parent() + 1) < parent->children().size()) + return parent->children()[walker->index_in_parent() + 1]; + walker = parent; } @@ -1803,17 +1800,15 @@ return nullptr; // No previous sibling; parent is previous. - if (walker->GetUnignoredIndexInParent() == 0) + if (walker->index_in_parent() == 0) return parent; - walker = - parent->GetUnignoredChildAtIndex(walker->GetUnignoredIndexInParent() - 1); + walker = parent->children()[walker->index_in_parent() - 1]; // Walks to deepest last child. while (true) { - if (walker->GetUnignoredChildCount()) { - walker = walker->GetUnignoredChildAtIndex( - walker->GetUnignoredChildCount() - 1); + if (!walker->children().empty()) { + walker = walker->children().back(); } else if (!GetRootOfChildTree(&walker, in_out_tree_wrapper)) { break; } @@ -1901,10 +1896,10 @@ // Check for a child tree, which is guaranteed to always be the only child. if (index == 0 && GetRootOfChildTree(&node, &tree_wrapper)) child_id = node->id(); - else if (index < 0 || size_t{index} >= node->GetUnignoredChildCount()) + else if (index < 0 || size_t{index} >= node->children().size()) return; else - child_id = node->GetUnignoredChildAtIndex(size_t{index})->id(); + child_id = node->children()[size_t{index}]->id(); gin::DataObjectBuilder response(GetIsolate()); response.Set("treeId", tree_wrapper->tree_id().ToString());
diff --git a/google_apis/gaia/fake_oauth2_token_service_delegate.cc b/google_apis/gaia/fake_oauth2_token_service_delegate.cc index 4f2cf5a3..bd63a15 100644 --- a/google_apis/gaia/fake_oauth2_token_service_delegate.cc +++ b/google_apis/gaia/fake_oauth2_token_service_delegate.cc
@@ -73,15 +73,15 @@ return &backoff_entry_; } -std::vector<std::string> FakeOAuth2TokenServiceDelegate::GetAccounts() { - std::vector<std::string> account_ids; +std::vector<CoreAccountId> FakeOAuth2TokenServiceDelegate::GetAccounts() const { + std::vector<CoreAccountId> account_ids; for (const auto& token : refresh_tokens_) account_ids.push_back(token.first); return account_ids; } void FakeOAuth2TokenServiceDelegate::RevokeAllCredentials() { - std::vector<std::string> account_ids = GetAccounts(); + std::vector<CoreAccountId> account_ids = GetAccounts(); for (const auto& account : account_ids) RevokeCredentials(account); }
diff --git a/google_apis/gaia/fake_oauth2_token_service_delegate.h b/google_apis/gaia/fake_oauth2_token_service_delegate.h index e48d7c6..61f3a116 100644 --- a/google_apis/gaia/fake_oauth2_token_service_delegate.h +++ b/google_apis/gaia/fake_oauth2_token_service_delegate.h
@@ -35,7 +35,7 @@ const CoreAccountId& account_id) const override; void UpdateAuthError(const CoreAccountId& account_id, const GoogleServiceAuthError& error) override; - std::vector<std::string> GetAccounts() override; + std::vector<CoreAccountId> GetAccounts() const override; void RevokeAllCredentials() override; void LoadCredentials(const CoreAccountId& primary_account_id) override; void UpdateCredentials(const CoreAccountId& account_id,
diff --git a/google_apis/gaia/oauth2_token_service.cc b/google_apis/gaia/oauth2_token_service.cc index 87f998b..9e43e6f 100644 --- a/google_apis/gaia/oauth2_token_service.cc +++ b/google_apis/gaia/oauth2_token_service.cc
@@ -597,9 +597,9 @@ return all_credentials_loaded_; } -std::vector<std::string> OAuth2TokenService::GetAccounts() const { +std::vector<CoreAccountId> OAuth2TokenService::GetAccounts() const { if (!AreAllCredentialsLoaded()) - return std::vector<std::string>(); + return std::vector<CoreAccountId>(); return delegate_->GetAccounts(); }
diff --git a/google_apis/gaia/oauth2_token_service.h b/google_apis/gaia/oauth2_token_service.h index 4e29c5c..d57bc9a 100644 --- a/google_apis/gaia/oauth2_token_service.h +++ b/google_apis/gaia/oauth2_token_service.h
@@ -207,7 +207,7 @@ // Note: For each account returned by |GetAccounts|, |RefreshTokenIsAvailable| // will return true. // Note: If tokens have not been fully loaded yet, an empty list is returned. - std::vector<std::string> GetAccounts() const; + std::vector<CoreAccountId> GetAccounts() const; // Returns true if a refresh token exists for |account_id|. If false, calls to // |StartRequest| will result in a Consumer::OnGetTokenFailure callback.
diff --git a/google_apis/gaia/oauth2_token_service_delegate.cc b/google_apis/gaia/oauth2_token_service_delegate.cc index 0204fc4..77a2edaf 100644 --- a/google_apis/gaia/oauth2_token_service_delegate.cc +++ b/google_apis/gaia/oauth2_token_service_delegate.cc
@@ -110,8 +110,8 @@ return GoogleServiceAuthError::AuthErrorNone(); } -std::vector<std::string> OAuth2TokenServiceDelegate::GetAccounts() { - return std::vector<std::string>(); +std::vector<CoreAccountId> OAuth2TokenServiceDelegate::GetAccounts() const { + return std::vector<CoreAccountId>(); } const net::BackoffEntry* OAuth2TokenServiceDelegate::BackoffEntry() const {
diff --git a/google_apis/gaia/oauth2_token_service_delegate.h b/google_apis/gaia/oauth2_token_service_delegate.h index ee5e645..47990f11 100644 --- a/google_apis/gaia/oauth2_token_service_delegate.h +++ b/google_apis/gaia/oauth2_token_service_delegate.h
@@ -64,7 +64,7 @@ // |this| instance. // Note: If tokens have not been fully loaded yet, an empty list is returned. // Also, see |RefreshTokenIsAvailable|. - virtual std::vector<std::string> GetAccounts(); + virtual std::vector<CoreAccountId> GetAccounts() const; virtual void RevokeAllCredentials() {} virtual void InvalidateAccessToken(const CoreAccountId& account_id,
diff --git a/gpu/command_buffer/service/raster_decoder.cc b/gpu/command_buffer/service/raster_decoder.cc index 8822580a..09a8eb5c 100644 --- a/gpu/command_buffer/service/raster_decoder.cc +++ b/gpu/command_buffer/service/raster_decoder.cc
@@ -391,6 +391,9 @@ if (gr_context()) gr_context()->flush(); api()->glFlushFn(); + + // Flushes can be expensive, yield to allow interruption after each flush. + ExitCommandProcessingEarly(); } #endif }
diff --git a/gpu/config/gpu_info_collector.cc b/gpu/config/gpu_info_collector.cc index 735ff74..a4287b0 100644 --- a/gpu/config/gpu_info_collector.cc +++ b/gpu/config/gpu_info_collector.cc
@@ -49,6 +49,8 @@ #define EGL_FEATURE_BUG_ANGLE 0x3463 #define EGL_FEATURE_STATUS_ANGLE 0x3464 #define EGL_FEATURE_COUNT_ANGLE 0x3465 +#define EGL_FEATURE_OVERRIDES_ENABLED_ANGLE 0x3466 +#define EGL_FEATURE_OVERRIDES_DISABLED_ANGLE 0x3467 #endif /* EGL_ANGLE_feature_control */ scoped_refptr<gl::GLSurface> InitializeGLSurface() {
diff --git a/infra/config/cr-buildbucket.cfg b/infra/config/cr-buildbucket.cfg index 255cf3b..24fed44b 100644 --- a/infra/config/cr-buildbucket.cfg +++ b/infra/config/cr-buildbucket.cfg
@@ -1520,6 +1520,12 @@ } builders { + name: "linux-trusty-rel" + mixins: "linux-ci-goma-rbe-prod" + mixins: "builderless" + } + + builders { name: "Linux Builder" mixins: "linux-ci-goma-rbe-prod" mixins: "linux-xenial" @@ -4116,6 +4122,12 @@ } builders { mixins: "linux-try" + mixins: "goma-rbe-prod-j150" + mixins: "builderless" + name: "linux-trusty-rel" + } + builders { + mixins: "linux-try" mixins: "linux-xenial" mixins: "goma-j150" mixins: "builderless"
diff --git a/infra/config/luci-milo.cfg b/infra/config/luci-milo.cfg index 944c6ed..f9264db 100644 --- a/infra/config/luci-milo.cfg +++ b/infra/config/luci-milo.cfg
@@ -536,6 +536,11 @@ short_name: "ozo" } builders { + name: "buildbucket/luci.chromium.ci/linux-trusty-rel" + category: "chromium.linux|release" + short_name: "tru" + } + builders { name: "buildbucket/luci.chromium.ci/Linux Builder (dbg)(32)" category: "chromium.linux|debug|builder" short_name: "32" @@ -954,6 +959,11 @@ short_name: "ozo" } builders { + name: "buildbucket/luci.chromium.ci/linux-trusty-rel" + category: "release" + short_name: "tru" + } + builders { name: "buildbucket/luci.chromium.ci/Linux Builder (dbg)(32)" category: "debug|builder" short_name: "32" @@ -4191,6 +4201,9 @@ name: "buildbucket/luci.chromium.try/linux-rel" } builders { + name: "buildbucket/luci.chromium.try/linux-trusty-rel" + } + builders { name: "buildbucket/luci.chromium.try/linux_arm" } builders {
diff --git a/infra/config/luci-scheduler.cfg b/infra/config/luci-scheduler.cfg index 52883b23..8643590a 100644 --- a/infra/config/luci-scheduler.cfg +++ b/infra/config/luci-scheduler.cfg
@@ -360,6 +360,7 @@ triggers: "linux-archive-rel" triggers: "linux-fieldtrial-rel" triggers: "linux-tcmalloc-rel" + triggers: "linux-trusty-rel" triggers: "linux-win_cross-rel" triggers: "mac-code-coverage-generation" triggers: "mac-archive-dbg" @@ -1945,6 +1946,16 @@ } job { + id: "linux-trusty-rel" + acl_sets: "default" + buildbucket: { + server: "cr-buildbucket.appspot.com" + bucket: "luci.chromium.ci" + builder: "linux-trusty-rel" + } +} + +job { id: "WebRTC Chromium Linux Builder" acl_sets: "default" acl_sets: "webrtc"
diff --git a/ios/chrome/browser/ui/browser_view/key_commands_provider.mm b/ios/chrome/browser/ui/browser_view/key_commands_provider.mm index 873c1229..bcd8188 100644 --- a/ios/chrome/browser/ui/browser_view/key_commands_provider.mm +++ b/ios/chrome/browser/ui/browser_view/key_commands_provider.mm
@@ -156,7 +156,17 @@ title:l10n_util::GetNSStringWithFixup( IDS_IOS_TOOLS_MENU_CLOSE_TAB) action:^{ - [weakDispatcher closeCurrentTab]; + // -closeCurrentTab might destroy the + // object that implements this shortcut + // (BVC), so this selector might not be + // registered with the dispatcher anymore. + // Check if it's still available. See + // crbug.com/967637 for context. + if ([weakDispatcher + respondsToSelector:@selector + (closeCurrentTab)]) { + [weakDispatcher closeCurrentTab]; + } }], [UIKeyCommand cr_keyCommandWithInput:@"d"
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_base_view_controller.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_base_view_controller.mm index fddd493..e9903c2 100644 --- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_base_view_controller.mm +++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_base_view_controller.mm
@@ -346,7 +346,9 @@ if (widthInsets != self.shortcutsViewEdgeConstraint.constant) { self.shortcutsViewEdgeConstraint.constant = widthInsets; // If the insets have changed, the collection view (and thus the table - // view) may have changed heights. + // view) may have changed heights. This could happen due to dynamic type + // changing the height of the collection view. It is also necessary for + // the first load. [self.shortcutsViewController.collectionView layoutIfNeeded]; [self.tableView reloadData]; }
diff --git a/ios/net/http_response_headers_util.h b/ios/net/http_response_headers_util.h index 34b5b26..157b43af 100644 --- a/ios/net/http_response_headers_util.h +++ b/ios/net/http_response_headers_util.h
@@ -13,7 +13,7 @@ // Placeholder status description since the actual text from the headers is not // available. -extern const std::string kDummyHttpStatusDescription; +extern const char kDummyHttpStatusDescription[]; // Constructs a net::HttpResponseHeaders from |response|. // Note: The HTTP version and the status code description are not accessible
diff --git a/ios/net/http_response_headers_util.mm b/ios/net/http_response_headers_util.mm index 4792f1d..5c7e821 100644 --- a/ios/net/http_response_headers_util.mm +++ b/ios/net/http_response_headers_util.mm
@@ -26,7 +26,7 @@ namespace net { -const std::string kDummyHttpStatusDescription = "DummyStatusDescription"; +const char kDummyHttpStatusDescription[] = "DummyStatusDescription"; scoped_refptr<HttpResponseHeaders> CreateHeadersFromNSHTTPURLResponse( NSHTTPURLResponse* response) { @@ -35,7 +35,7 @@ NSInteger status_code = response.statusCode; std::string status_line = base::SysNSStringToUTF8([NSString stringWithFormat:kHttpStatusLineFormat, static_cast<long>(status_code), - kDummyHttpStatusDescription.c_str()]); + kDummyHttpStatusDescription]); scoped_refptr<HttpResponseHeaders> http_headers( new HttpResponseHeaders(status_line)); // Iterate through |response|'s headers and add them to |http_headers|.
diff --git a/ios/web/web_state/ui/crw_context_menu_controller.mm b/ios/web/web_state/ui/crw_context_menu_controller.mm index 84f8b12..9ee4489b 100644 --- a/ios/web/web_state/ui/crw_context_menu_controller.mm +++ b/ios/web/web_state/ui/crw_context_menu_controller.mm
@@ -59,7 +59,7 @@ // Name of the histogram for recording when the gesture recognizer recognizes a // long press before the DOM element details are available. -const std::string kContextMenuDelayedElementDetailsHistogram = +const char kContextMenuDelayedElementDetailsHistogram[] = "ContextMenu.DelayedElementDetails"; // Enum used to record resulting action when the gesture recognizer recognizes a
diff --git a/ios/web_view/BUILD.gn b/ios/web_view/BUILD.gn index 8798a828..5b8a37f 100644 --- a/ios/web_view/BUILD.gn +++ b/ios/web_view/BUILD.gn
@@ -275,7 +275,6 @@ "//components/language/core/browser", "//components/language/core/common", "//components/leveldb_proto", - "//components/net_log", "//services/network:network_service", "//components/password_manager/core/browser", "//components/password_manager/core/browser/form_parsing:form_parsing",
diff --git a/ios/web_view/internal/app/application_context.h b/ios/web_view/internal/app/application_context.h index 26e66c6..c46e0dd 100644 --- a/ios/web_view/internal/app/application_context.h +++ b/ios/web_view/internal/app/application_context.h
@@ -15,6 +15,7 @@ #include "services/network/public/mojom/network_service.mojom.h" namespace net { +class NetLog; class URLRequestContextGetter; } @@ -28,10 +29,6 @@ } } // namespace network -namespace net_log { -class ChromeNetLog; -} - class PrefService; namespace ios_web_view { @@ -58,6 +55,9 @@ // Gets the locale used by the application. const std::string& GetApplicationLocale(); + // Gets the NetLog. + net::NetLog* GetNetLog(); + // Creates state tied to application threads. It is expected this will be // called from web::WebMainParts::PreCreateThreads. void PreCreateThreads(); @@ -76,9 +76,6 @@ ApplicationContext(); ~ApplicationContext(); - // Gets the ChromeNetLog. - net_log::ChromeNetLog* GetNetLog(); - // Gets the WebViewIOThread. WebViewIOThread* GetWebViewIOThread(); @@ -87,7 +84,7 @@ SEQUENCE_CHECKER(sequence_checker_); std::unique_ptr<PrefService> local_state_; - std::unique_ptr<net_log::ChromeNetLog> net_log_; + std::unique_ptr<net::NetLog> net_log_; std::unique_ptr<WebViewIOThread> web_view_io_thread_; std::string application_locale_;
diff --git a/ios/web_view/internal/app/application_context.mm b/ios/web_view/internal/app/application_context.mm index 8c90ba5..a4917cb 100644 --- a/ios/web_view/internal/app/application_context.mm +++ b/ios/web_view/internal/app/application_context.mm
@@ -9,7 +9,6 @@ #include "base/no_destructor.h" #include "base/path_service.h" #include "components/flags_ui/pref_service_flags_storage.h" -#include "components/net_log/chrome_net_log.h" #include "components/prefs/json_pref_store.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" @@ -21,6 +20,7 @@ #include "ios/web_view/cwv_web_view_buildflags.h" #include "ios/web_view/internal/app/web_view_io_thread.h" #import "ios/web_view/internal/cwv_flags_internal.h" +#include "net/log/net_log.h" #include "net/socket/client_socket_pool_manager.h" #include "services/network/network_change_manager.h" #include "services/network/public/cpp/network_connection_tracker.h" @@ -54,7 +54,7 @@ } ApplicationContext::ApplicationContext() { - net_log_ = std::make_unique<net_log::ChromeNetLog>(); + net_log_ = std::make_unique<net::NetLog>(); SetApplicationLocale(l10n_util::GetLocaleOverride()); } @@ -187,7 +187,7 @@ return application_locale_; } -net_log::ChromeNetLog* ApplicationContext::GetNetLog() { +net::NetLog* ApplicationContext::GetNetLog() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return net_log_.get(); }
diff --git a/ios/web_view/internal/web_view_browser_state.mm b/ios/web_view/internal/web_view_browser_state.mm index 0894bd1..6c0e350 100644 --- a/ios/web_view/internal/web_view_browser_state.mm +++ b/ios/web_view/internal/web_view_browser_state.mm
@@ -32,6 +32,7 @@ #include "ios/web/public/thread/web_task_traits.h" #include "ios/web/public/thread/web_thread.h" #include "ios/web_view/cwv_web_view_buildflags.h" +#include "ios/web_view/internal/app/application_context.h" #include "ios/web_view/internal/autofill/web_view_personal_data_manager_factory.h" #include "ios/web_view/internal/content_settings/web_view_cookie_settings_factory.h" #include "ios/web_view/internal/content_settings/web_view_host_content_settings_map_factory.h" @@ -85,7 +86,7 @@ CHECK(base::PathService::Get(base::DIR_APP_DATA, &path_)); request_context_getter_ = new WebViewURLRequestContextGetter( - GetStatePath(), + GetStatePath(), ApplicationContext::GetInstance()->GetNetLog(), base::CreateSingleThreadTaskRunnerWithTraits({web::WebThread::IO})); BrowserState::Initialize(this, path_);
diff --git a/ios/web_view/internal/web_view_url_request_context_getter.h b/ios/web_view/internal/web_view_url_request_context_getter.h index c893c6284..827d6edf 100644 --- a/ios/web_view/internal/web_view_url_request_context_getter.h +++ b/ios/web_view/internal/web_view_url_request_context_getter.h
@@ -14,8 +14,8 @@ #include "net/url_request/url_request_context_getter.h" namespace net { -class NetworkDelegate; class NetLog; +class NetworkDelegate; class ProxyConfigService; class TransportSecurityPersister; class URLRequestContext; @@ -29,6 +29,7 @@ public: WebViewURLRequestContextGetter( const base::FilePath& base_path, + net::NetLog* net_log, const scoped_refptr<base::SingleThreadTaskRunner>& network_task_runner); // net::URLRequestContextGetter implementation. @@ -44,13 +45,14 @@ ~WebViewURLRequestContextGetter() override; private: + // Member list should be maintained to ensure proper destruction order. base::FilePath base_path_; + net::NetLog* net_log_; scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_; std::unique_ptr<net::ProxyConfigService> proxy_config_service_; std::unique_ptr<net::NetworkDelegate> network_delegate_; - std::unique_ptr<net::URLRequestContextStorage> storage_; std::unique_ptr<net::URLRequestContext> url_request_context_; - std::unique_ptr<net::NetLog> net_log_; + std::unique_ptr<net::URLRequestContextStorage> storage_; std::unique_ptr<net::TransportSecurityPersister> transport_security_persister_;
diff --git a/ios/web_view/internal/web_view_url_request_context_getter.mm b/ios/web_view/internal/web_view_url_request_context_getter.mm index 65b20e9..b6bfbb2 100644 --- a/ios/web_view/internal/web_view_url_request_context_getter.mm +++ b/ios/web_view/internal/web_view_url_request_context_getter.mm
@@ -46,12 +46,13 @@ WebViewURLRequestContextGetter::WebViewURLRequestContextGetter( const base::FilePath& base_path, + net::NetLog* net_log, const scoped_refptr<base::SingleThreadTaskRunner>& network_task_runner) : base_path_(base_path), + net_log_(net_log), network_task_runner_(network_task_runner), proxy_config_service_( new net::ProxyConfigServiceIOS(NO_TRAFFIC_ANNOTATION_YET)), - net_log_(new net::NetLog()), is_shutting_down_(false) {} WebViewURLRequestContextGetter::~WebViewURLRequestContextGetter() = default; @@ -65,7 +66,7 @@ if (!url_request_context_) { url_request_context_.reset(new net::URLRequestContext()); - url_request_context_->set_net_log(net_log_.get()); + url_request_context_->set_net_log(net_log_); DCHECK(!network_delegate_.get()); network_delegate_ = std::make_unique<WebViewNetworkDelegate>(); url_request_context_->set_network_delegate(network_delegate_.get()); @@ -86,8 +87,7 @@ {base::MayBlock(), base::TaskPriority::BEST_EFFORT}), true, nullptr); std::unique_ptr<net::CookieStoreIOS> cookie_store( - new net::CookieStoreIOSPersistent(persistent_store.get(), - net_log_.get())); + new net::CookieStoreIOSPersistent(persistent_store.get(), net_log_)); storage_->set_cookie_store(std::move(cookie_store)); web::WebClient* web_client = web::GetWebClient(); @@ -181,14 +181,6 @@ void WebViewURLRequestContextGetter::ShutDown() { is_shutting_down_ = true; - - // Clean up some member variables now to avoid a use after free crash with - // |net_log_|. - transport_security_persister_.reset(); - storage_.reset(); - url_request_context_.reset(); - network_delegate_.reset(); - net::URLRequestContextGetter::NotifyContextShuttingDown(); }
diff --git a/media/base/fake_audio_worker_unittest.cc b/media/base/fake_audio_worker_unittest.cc index 3872434..f2b1c56 100644 --- a/media/base/fake_audio_worker_unittest.cc +++ b/media/base/fake_audio_worker_unittest.cc
@@ -145,7 +145,8 @@ // Ensure Start()/Stop() on the worker doesn't generate too many callbacks. See // http://crbug.com/159049. -TEST_F(FakeAudioWorkerTest, StartStopClearsCallbacks) { +// Flaky test; see crbug.com/974078 +TEST_F(FakeAudioWorkerTest, DISABLED_StartStopClearsCallbacks) { scoped_task_environment_.GetMainThreadTaskRunner()->PostTask( FROM_HERE, base::BindOnce(&FakeAudioWorkerTest::TimeCallbacksOnAudioThread,
diff --git a/media/capture/video/chromeos/camera_device_delegate.cc b/media/capture/video/chromeos/camera_device_delegate.cc index 10c98ed42..74804484 100644 --- a/media/capture/video/chromeos/camera_device_delegate.cc +++ b/media/capture/video/chromeos/camera_device_delegate.cc
@@ -163,6 +163,7 @@ scoped_refptr<base::SingleThreadTaskRunner> ipc_task_runner, ReprocessManager* reprocess_manager) : device_descriptor_(device_descriptor), + camera_id_(std::stoi(device_descriptor.device_id)), camera_hal_delegate_(std::move(camera_hal_delegate)), ipc_task_runner_(std::move(ipc_task_runner)), reprocess_manager_(reprocess_manager), @@ -179,41 +180,10 @@ device_context_ = device_context; device_context_->SetState(CameraDeviceContext::State::kStarting); - auto camera_info = camera_hal_delegate_->GetCameraInfoFromDeviceId( - device_descriptor_.device_id); - if (camera_info.is_null()) { - device_context_->SetErrorState( - media::VideoCaptureError::kCrosHalV3DeviceDelegateFailedToGetCameraInfo, - FROM_HERE, "Failed to get camera info"); - return; - } - - SortCameraMetadata(&camera_info->static_camera_characteristics); - static_metadata_ = std::move(camera_info->static_camera_characteristics); - - auto sensor_orientation = GetMetadataEntryAsSpan<int32_t>( - static_metadata_, - cros::mojom::CameraMetadataTag::ANDROID_SENSOR_ORIENTATION); - if (sensor_orientation.empty()) { - device_context_->SetErrorState( - media::VideoCaptureError:: - kCrosHalV3DeviceDelegateMissingSensorOrientationInfo, - FROM_HERE, "Camera is missing required sensor orientation info"); - return; - } - device_context_->SetSensorOrientation(sensor_orientation[0]); - - // |device_ops_| is bound after the MakeRequest call. - cros::mojom::Camera3DeviceOpsRequest device_ops_request = - mojo::MakeRequest(&device_ops_); - device_ops_.set_connection_error_handler(base::BindOnce( - &CameraDeviceDelegate::OnMojoConnectionError, GetWeakPtr())); - camera_hal_delegate_->OpenDevice( - camera_hal_delegate_->GetCameraIdFromDeviceId( - device_descriptor_.device_id), - std::move(device_ops_request), - BindToCurrentLoop( - base::BindOnce(&CameraDeviceDelegate::OnOpenedDevice, GetWeakPtr()))); + // We need to get the static camera metadata of the camera device first. + camera_hal_delegate_->GetCameraInfo( + camera_id_, BindToCurrentLoop(base::BindOnce( + &CameraDeviceDelegate::OnGotCameraInfo, GetWeakPtr()))); } void CameraDeviceDelegate::StopAndDeAllocate( @@ -441,6 +411,56 @@ request_manager_.reset(); } +void CameraDeviceDelegate::OnGotCameraInfo( + int32_t result, + cros::mojom::CameraInfoPtr camera_info) { + DCHECK(ipc_task_runner_->BelongsToCurrentThread()); + + if (device_context_->GetState() != CameraDeviceContext::State::kStarting) { + DCHECK_EQ(device_context_->GetState(), + CameraDeviceContext::State::kStopping); + OnClosed(0); + return; + } + + if (result) { + device_context_->SetErrorState( + media::VideoCaptureError::kCrosHalV3DeviceDelegateFailedToGetCameraInfo, + FROM_HERE, "Failed to get camera info"); + return; + } + + reprocess_manager_->UpdateCameraInfo(device_descriptor_.device_id, + camera_info); + SortCameraMetadata(&camera_info->static_camera_characteristics); + static_metadata_ = std::move(camera_info->static_camera_characteristics); + + const cros::mojom::CameraMetadataEntryPtr* sensor_orientation = + GetMetadataEntry( + static_metadata_, + cros::mojom::CameraMetadataTag::ANDROID_SENSOR_ORIENTATION); + if (sensor_orientation) { + device_context_->SetSensorOrientation( + *reinterpret_cast<int32_t*>((*sensor_orientation)->data.data())); + } else { + device_context_->SetErrorState( + media::VideoCaptureError:: + kCrosHalV3DeviceDelegateMissingSensorOrientationInfo, + FROM_HERE, "Camera is missing required sensor orientation info"); + return; + } + + // |device_ops_| is bound after the MakeRequest call. + cros::mojom::Camera3DeviceOpsRequest device_ops_request = + mojo::MakeRequest(&device_ops_); + device_ops_.set_connection_error_handler(base::BindOnce( + &CameraDeviceDelegate::OnMojoConnectionError, GetWeakPtr())); + camera_hal_delegate_->OpenDevice( + camera_id_, std::move(device_ops_request), + BindToCurrentLoop( + base::BindOnce(&CameraDeviceDelegate::OnOpenedDevice, GetWeakPtr()))); +} + void CameraDeviceDelegate::OnOpenedDevice(int32_t result) { DCHECK(ipc_task_runner_->BelongsToCurrentThread());
diff --git a/media/capture/video/chromeos/camera_device_delegate.h b/media/capture/video/chromeos/camera_device_delegate.h index 971a308..b1d4c41 100644 --- a/media/capture/video/chromeos/camera_device_delegate.h +++ b/media/capture/video/chromeos/camera_device_delegate.h
@@ -115,6 +115,9 @@ // Resets the Mojo interface and bindings. void ResetMojoInterface(); + // Sets |static_metadata_| from |camera_info|. + void OnGotCameraInfo(int32_t result, cros::mojom::CameraInfoPtr camera_info); + // Creates the Mojo connection to the camera device. void OnOpenedDevice(int32_t result); @@ -170,6 +173,8 @@ const VideoCaptureDeviceDescriptor device_descriptor_; + int32_t camera_id_; + // Current configured resolution of BLOB stream. gfx::Size current_blob_resolution_;
diff --git a/media/capture/video/chromeos/camera_device_delegate_unittest.cc b/media/capture/video/chromeos/camera_device_delegate_unittest.cc index 16c7a86..d27ec7c 100644 --- a/media/capture/video/chromeos/camera_device_delegate_unittest.cc +++ b/media/capture/video/chromeos/camera_device_delegate_unittest.cc
@@ -19,7 +19,6 @@ #include "media/capture/video/chromeos/camera_device_context.h" #include "media/capture/video/chromeos/camera_hal_delegate.h" #include "media/capture/video/chromeos/mock_camera_module.h" -#include "media/capture/video/chromeos/mock_vendor_tag_ops.h" #include "media/capture/video/chromeos/mock_video_capture_client.h" #include "media/capture/video/chromeos/reprocess_manager.h" #include "media/capture/video/chromeos/video_capture_device_factory_chromeos.h" @@ -102,13 +101,11 @@ constexpr int32_t kJpegMaxBufferSize = 1024; constexpr size_t kDefaultWidth = 1280, kDefaultHeight = 720; - -VideoCaptureParams GetDefaultCaptureParams() { - VideoCaptureParams params; - params.requested_format = {gfx::Size(kDefaultWidth, kDefaultHeight), 30.0, - PIXEL_FORMAT_I420}; - return params; -} +const VideoCaptureDeviceDescriptor kDefaultDescriptor("Fake device", "0"); +const VideoCaptureFormat kDefaultCaptureFormat(gfx::Size(kDefaultWidth, + kDefaultHeight), + 30.0, + PIXEL_FORMAT_I420); } // namespace @@ -125,9 +122,7 @@ hal_delegate_thread_.Start(); camera_hal_delegate_ = new CameraHalDelegate(hal_delegate_thread_.task_runner()); - auto get_camera_info = base::BindRepeating( - &CameraHalDelegate::GetCameraInfoFromDeviceId, camera_hal_delegate_); - reprocess_manager_ = std::make_unique<ReprocessManager>(get_camera_info); + reprocess_manager_ = std::make_unique<ReprocessManager>(base::DoNothing()); camera_hal_delegate_->SetCameraModule( mock_camera_module_.GetInterfacePtrInfo()); } @@ -138,30 +133,16 @@ hal_delegate_thread_.Stop(); } - void AllocateDevice() { + void AllocateDeviceWithDescriptor(VideoCaptureDeviceDescriptor descriptor) { ASSERT_FALSE(device_delegate_thread_.IsRunning()); ASSERT_FALSE(camera_device_delegate_); - VideoCaptureDeviceDescriptors descriptors; - camera_hal_delegate_->GetDeviceDescriptors(&descriptors); - ASSERT_EQ(descriptors.size(), 1u); device_delegate_thread_.Start(); camera_device_delegate_ = std::make_unique<CameraDeviceDelegate>( - descriptors[0], camera_hal_delegate_, - device_delegate_thread_.task_runner(), reprocess_manager_.get()); + descriptor, camera_hal_delegate_, device_delegate_thread_.task_runner(), + reprocess_manager_.get()); num_streams_ = 0; } - void GetNumberOfFakeCameras( - cros::mojom::CameraModule::GetNumberOfCamerasCallback& cb) { - std::move(cb).Run(1); - } - - void GetFakeVendorTagOps( - cros::mojom::VendorTagOpsRequest& vendor_tag_ops_request, - cros::mojom::CameraModule::GetVendorTagOpsCallback& cb) { - mock_vendor_tag_ops_.Bind(std::move(vendor_tag_ops_request)); - } - void GetFakeCameraInfo(uint32_t camera_id, cros::mojom::CameraModule::GetCameraInfoCallback& cb) { cros::mojom::CameraInfoPtr camera_info = cros::mojom::CameraInfo::New(); @@ -304,22 +285,10 @@ std::move(callback).Run(0); } - void SetUpExpectationForHalDelegate() { - EXPECT_CALL(mock_camera_module_, DoGetNumberOfCameras(_)) - .Times(1) - .WillOnce( - Invoke(this, &CameraDeviceDelegateTest::GetNumberOfFakeCameras)); - EXPECT_CALL(mock_camera_module_, DoSetCallbacks(_, _)).Times(1); - EXPECT_CALL(mock_camera_module_, DoGetVendorTagOps(_, _)) - .Times(1) - .WillOnce(Invoke(this, &CameraDeviceDelegateTest::GetFakeVendorTagOps)); + void SetUpExpectationUntilInitialized() { EXPECT_CALL(mock_camera_module_, DoGetCameraInfo(0, _)) .Times(1) .WillOnce(Invoke(this, &CameraDeviceDelegateTest::GetFakeCameraInfo)); - } - - void SetUpExpectationUntilInitialized() { - SetUpExpectationForHalDelegate(); EXPECT_CALL(mock_camera_module_, DoOpenDevice(0, _, _)) .Times(1) .WillOnce( @@ -430,9 +399,8 @@ void ResetDevice() { ASSERT_TRUE(device_delegate_thread_.IsRunning()); ASSERT_TRUE(camera_device_delegate_); - ASSERT_TRUE(device_delegate_thread_.task_runner()->DeleteSoon( - FROM_HERE, std::move(camera_device_delegate_))); device_delegate_thread_.Stop(); + camera_device_delegate_.reset(); num_streams_ = 0; } @@ -464,7 +432,6 @@ std::unique_ptr<CameraDeviceDelegate> camera_device_delegate_; testing::StrictMock<unittest_internal::MockCameraModule> mock_camera_module_; - testing::NiceMock<unittest_internal::MockVendorTagOps> mock_vendor_tag_ops_; unittest_internal::MockGpuMemoryBufferManager mock_gpu_memory_buffer_manager_; testing::StrictMock<MockCameraDevice> mock_camera_device_; @@ -488,6 +455,11 @@ // Test the complete capture flow: initialize, configure stream, capture one // frame, and close the device. TEST_F(CameraDeviceDelegateTest, AllocateCaptureAndStop) { + AllocateDeviceWithDescriptor(kDefaultDescriptor); + + VideoCaptureParams params; + params.requested_format = kDefaultCaptureFormat; + auto* mock_client = ResetDeviceContext(); mock_client->SetFrameCb(BindToCurrentLoop(base::BindOnce( &CameraDeviceDelegateTest::QuitRunLoop, base::Unretained(this)))); @@ -496,12 +468,9 @@ SetUpExpectationUntilCapturing(mock_client); SetUpExpectationForCaptureLoop(); - AllocateDevice(); - device_delegate_thread_.task_runner()->PostTask( FROM_HERE, base::BindOnce(&CameraDeviceDelegate::AllocateAndStart, - camera_device_delegate_->GetWeakPtr(), - GetDefaultCaptureParams(), + camera_device_delegate_->GetWeakPtr(), params, base::Unretained(device_context_.get()))); // Wait until a frame is received. MockVideoCaptureClient calls QuitRunLoop() @@ -519,17 +488,19 @@ // Test that the camera device delegate closes properly when StopAndDeAllocate // is called right after the device is initialized. TEST_F(CameraDeviceDelegateTest, StopAfterInitialized) { + AllocateDeviceWithDescriptor(kDefaultDescriptor); + + VideoCaptureParams params; + params.requested_format = kDefaultCaptureFormat; + auto* mock_client = ResetDeviceContext(); mock_client->SetQuitCb(BindToCurrentLoop(base::BindOnce( &CameraDeviceDelegateTest::QuitRunLoop, base::Unretained(this)))); SetUpExpectationUntilInitialized(); - AllocateDevice(); - device_delegate_thread_.task_runner()->PostTask( FROM_HERE, base::BindOnce(&CameraDeviceDelegate::AllocateAndStart, - camera_device_delegate_->GetWeakPtr(), - GetDefaultCaptureParams(), + camera_device_delegate_->GetWeakPtr(), params, base::Unretained(device_context_.get()))); EXPECT_CALL(mock_camera_device_, DoConfigureStreams(_, _)) @@ -541,8 +512,9 @@ callback) { EXPECT_EQ(CameraDeviceContext::State::kInitialized, this->GetState()); - std::move(callback).Run(-ENODEV, {}); this->QuitRunLoop(); + std::move(callback).Run( + 0, cros::mojom::Camera3StreamConfiguration::New()); })); // Wait until the QuitRunLoop call in |mock_camera_device_->ConfigureStreams|. @@ -558,17 +530,19 @@ // Test that the camera device delegate closes properly when StopAndDeAllocate // is called right after the stream is configured. TEST_F(CameraDeviceDelegateTest, StopAfterStreamConfigured) { + AllocateDeviceWithDescriptor(kDefaultDescriptor); + + VideoCaptureParams params; + params.requested_format = kDefaultCaptureFormat; + auto* mock_client = ResetDeviceContext(); mock_client->SetQuitCb(BindToCurrentLoop(base::BindOnce( &CameraDeviceDelegateTest::QuitRunLoop, base::Unretained(this)))); SetUpExpectationUntilStreamConfigured(); - AllocateDevice(); - device_delegate_thread_.task_runner()->PostTask( FROM_HERE, base::BindOnce(&CameraDeviceDelegate::AllocateAndStart, - camera_device_delegate_->GetWeakPtr(), - GetDefaultCaptureParams(), + camera_device_delegate_->GetWeakPtr(), params, base::Unretained(device_context_.get()))); EXPECT_CALL(mock_camera_device_, DoConstructDefaultRequestSettings(_, _)) @@ -579,8 +553,8 @@ callback) { EXPECT_EQ(CameraDeviceContext::State::kStreamConfigured, this->GetState()); - std::move(callback).Run({}); this->QuitRunLoop(); + std::move(callback).Run(cros::mojom::CameraMetadataPtr()); })); // Wait until the QuitRunLoop call in |mock_camera_device_->ConfigureStreams|. @@ -596,9 +570,10 @@ // Test that the camera device delegate handles camera device open failures // correctly. TEST_F(CameraDeviceDelegateTest, FailToOpenDevice) { - SetUpExpectationForHalDelegate(); + AllocateDeviceWithDescriptor(kDefaultDescriptor); - AllocateDevice(); + VideoCaptureParams params; + params.requested_format = kDefaultCaptureFormat; auto* mock_client = ResetDeviceContext(); @@ -614,16 +589,17 @@ .Times(AtLeast(1)) .WillRepeatedly(InvokeWithoutArgs(stop_on_error)); - // Hold the |device_ops_request| to make the behavior of CameraDeviceDelegate - // deterministic. Otherwise the connection error handler would race with the - // callback of OpenDevice(), because they are in different mojo channels. - cros::mojom::Camera3DeviceOpsRequest device_ops_request_holder; + EXPECT_CALL(mock_camera_module_, DoGetCameraInfo(0, _)) + .Times(1) + .WillOnce(Invoke(this, &CameraDeviceDelegateTest::GetFakeCameraInfo)); + auto open_device_with_error_cb = - [&](int32_t camera_id, - cros::mojom::Camera3DeviceOpsRequest& device_ops_request, - base::OnceCallback<void(int32_t)>& callback) { - device_ops_request_holder = std::move(device_ops_request); + [](int32_t camera_id, + cros::mojom::Camera3DeviceOpsRequest& device_ops_request, + base::OnceCallback<void(int32_t)>& callback) { std::move(callback).Run(-ENODEV); + device_ops_request.ResetWithReason(-ENODEV, + "Failed to open camera device"); }; EXPECT_CALL(mock_camera_module_, DoOpenDevice(0, _, _)) .Times(1) @@ -631,8 +607,7 @@ device_delegate_thread_.task_runner()->PostTask( FROM_HERE, base::BindOnce(&CameraDeviceDelegate::AllocateAndStart, - camera_device_delegate_->GetWeakPtr(), - GetDefaultCaptureParams(), + camera_device_delegate_->GetWeakPtr(), params, base::Unretained(device_context_.get()))); // Wait unitl |camera_device_delegate_->StopAndDeAllocate| calls the @@ -645,6 +620,11 @@ // Test that the class handles it correctly when StopAndDeAllocate is called // multiple times. TEST_F(CameraDeviceDelegateTest, DoubleStopAndDeAllocate) { + AllocateDeviceWithDescriptor(kDefaultDescriptor); + + VideoCaptureParams params; + params.requested_format = kDefaultCaptureFormat; + auto* mock_client = ResetDeviceContext(); mock_client->SetFrameCb(BindToCurrentLoop(base::BindOnce( &CameraDeviceDelegateTest::QuitRunLoop, base::Unretained(this)))); @@ -653,12 +633,9 @@ SetUpExpectationUntilCapturing(mock_client); SetUpExpectationForCaptureLoop(); - AllocateDevice(); - device_delegate_thread_.task_runner()->PostTask( FROM_HERE, base::BindOnce(&CameraDeviceDelegate::AllocateAndStart, - camera_device_delegate_->GetWeakPtr(), - GetDefaultCaptureParams(), + camera_device_delegate_->GetWeakPtr(), params, base::Unretained(device_context_.get()))); // Wait until a frame is received. MockVideoCaptureClient calls QuitRunLoop()
diff --git a/media/capture/video/chromeos/camera_hal_delegate.cc b/media/capture/video/chromeos/camera_hal_delegate.cc index 6990532c..a4f2b17b 100644 --- a/media/capture/video/chromeos/camera_hal_delegate.cc +++ b/media/capture/video/chromeos/camera_hal_delegate.cc
@@ -15,7 +15,6 @@ #include "base/posix/safe_strerror.h" #include "base/process/launch.h" #include "base/strings/strcat.h" -#include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/string_split.h" #include "base/system/system_monitor.h" @@ -135,8 +134,8 @@ if (!UpdateBuiltInCameraInfo()) { return capture_device; } - int camera_id = GetCameraIdFromDeviceId(device_descriptor.device_id); - if (camera_id == -1) { + base::AutoLock lock(camera_info_lock_); + if (camera_info_.find(device_descriptor.device_id) == camera_info_.end()) { LOG(ERROR) << "Invalid camera device: " << device_descriptor.device_id; return capture_device; } @@ -154,10 +153,11 @@ if (!UpdateBuiltInCameraInfo()) { return; } + std::string camera_id = device_descriptor.device_id; base::AutoLock lock(camera_info_lock_); - int camera_id = GetCameraIdFromDeviceId(device_descriptor.device_id); - if (camera_id == -1 || camera_info_[camera_id].is_null()) { - LOG(ERROR) << "Invalid camera device: " << device_descriptor.device_id; + if (camera_info_.find(camera_id) == camera_info_.end() || + camera_info_[camera_id].is_null()) { + LOG(ERROR) << "Invalid camera_id: " << camera_id; return; } const cros::mojom::CameraInfoPtr& camera_info = camera_info_[camera_id]; @@ -230,26 +230,24 @@ has_camera_connected_.TimedWait(base::TimeDelta::FromSeconds(1)); } - base::AutoLock info_lock(camera_info_lock_); - base::AutoLock id_map_lock(device_id_to_camera_id_lock_); + base::AutoLock lock(camera_info_lock_); for (const auto& it : camera_info_) { - int camera_id = it.first; + const std::string& camera_id = it.first; const cros::mojom::CameraInfoPtr& camera_info = it.second; if (!camera_info) { continue; } VideoCaptureDeviceDescriptor desc; + desc.device_id = camera_id; desc.capture_api = VideoCaptureApi::ANDROID_API2_LIMITED; desc.transport_type = VideoCaptureTransportType::OTHER_TRANSPORT; switch (camera_info->facing) { case cros::mojom::CameraFacing::CAMERA_FACING_BACK: desc.facing = VideoFacingMode::MEDIA_VIDEO_FACING_ENVIRONMENT; - desc.device_id = base::NumberToString(camera_id); desc.set_display_name("Back Camera"); break; case cros::mojom::CameraFacing::CAMERA_FACING_FRONT: desc.facing = VideoFacingMode::MEDIA_VIDEO_FACING_USER; - desc.device_id = base::NumberToString(camera_id); desc.set_display_name("Front Camera"); break; case cros::mojom::CameraFacing::CAMERA_FACING_EXTERNAL: { @@ -266,12 +264,6 @@ return val.empty() ? nullptr : val.data(); }; - // The webcam_private api expects that |device_id| to be set as the - // corresponding device path for external cameras used in GVC system. - auto* path = get_vendor_string("com.google.usb.devicePath"); - desc.device_id = - path != nullptr ? path : base::NumberToString(camera_id); - auto* name = get_vendor_string("com.google.usb.modelName"); desc.set_display_name(name != nullptr ? name : "External Camera"); @@ -285,7 +277,6 @@ // about malformed values. } } - device_id_to_camera_id_[desc.device_id] = camera_id; device_descriptors->push_back(desc); } // TODO(shik): Report external camera first when lid is closed. @@ -295,18 +286,15 @@ DVLOG(1) << "Number of device descriptors: " << device_descriptors->size(); } -cros::mojom::CameraInfoPtr CameraHalDelegate::GetCameraInfoFromDeviceId( - const std::string& device_id) { - base::AutoLock lock(camera_info_lock_); - int camera_id = GetCameraIdFromDeviceId(device_id); - if (camera_id == -1) { - return {}; - } - auto it = camera_info_.find(camera_id); - if (it == camera_info_.end()) { - return {}; - } - return it->second.Clone(); +void CameraHalDelegate::GetCameraInfo(int32_t camera_id, + GetCameraInfoCallback callback) { + DCHECK(!ipc_task_runner_->BelongsToCurrentThread()); + // This method may be called on any thread except |ipc_task_runner_|. + // Currently this method is used by CameraDeviceDelegate to query camera info. + camera_module_has_been_set_.Wait(); + ipc_task_runner_->PostTask( + FROM_HERE, base::BindOnce(&CameraHalDelegate::GetCameraInfoOnIpcThread, + this, camera_id, std::move(callback))); } void CameraHalDelegate::OpenDevice( @@ -324,15 +312,6 @@ base::Passed(&device_ops_request), std::move(callback))); } -int CameraHalDelegate::GetCameraIdFromDeviceId(const std::string& device_id) { - base::AutoLock lock(device_id_to_camera_id_lock_); - auto it = device_id_to_camera_id_.find(device_id); - if (it == device_id_to_camera_id_.end()) { - return -1; - } - return it->second; -} - void CameraHalDelegate::SetCameraModuleOnIpcThread( cros::mojom::CameraModulePtrInfo camera_module_ptr_info) { DCHECK(ipc_task_runner_->BelongsToCurrentThread()); @@ -462,14 +441,14 @@ SortCameraMetadata(&camera_info->static_camera_characteristics); base::AutoLock lock(camera_info_lock_); - camera_info_[camera_id] = std::move(camera_info); + camera_info_[std::to_string(camera_id)] = std::move(camera_info); if (camera_id < base::checked_cast<int32_t>(num_builtin_cameras_)) { // |camera_info_| might contain some entries for external cameras as well, // we should check all built-in cameras explicitly. bool all_updated = [&]() { for (size_t i = 0; i < num_builtin_cameras_; i++) { - if (camera_info_.find(i) == camera_info_.end()) { + if (camera_info_.find(std::to_string(i)) == camera_info_.end()) { return false; } } @@ -509,7 +488,7 @@ DCHECK(ipc_task_runner_->BelongsToCurrentThread()); VLOG(1) << "camera_id = " << camera_id << ", new_status = " << new_status; base::AutoLock lock(camera_info_lock_); - auto it = camera_info_.find(camera_id); + auto it = camera_info_.find(std::to_string(camera_id)); switch (new_status) { case cros::mojom::CameraDeviceStatus::CAMERA_DEVICE_STATUS_PRESENT: if (it == camera_info_.end()) {
diff --git a/media/capture/video/chromeos/camera_hal_delegate.h b/media/capture/video/chromeos/camera_hal_delegate.h index f8034c7..395ff32 100644 --- a/media/capture/video/chromeos/camera_hal_delegate.h +++ b/media/capture/video/chromeos/camera_hal_delegate.h
@@ -65,6 +65,12 @@ VideoCaptureFormats* supported_formats); void GetDeviceDescriptors(VideoCaptureDeviceDescriptors* device_descriptors); + // Asynchronous method to get the camera info of |camera_id|. This method may + // be called on any thread. + using GetCameraInfoCallback = + base::OnceCallback<void(int32_t, cros::mojom::CameraInfoPtr)>; + void GetCameraInfo(int32_t camera_id, GetCameraInfoCallback callback); + // Asynchronous method to open the camera device designated by |camera_id|. // This method may be called on any thread; |callback| will run on // |ipc_task_runner_|. @@ -73,13 +79,6 @@ cros::mojom::Camera3DeviceOpsRequest device_ops_request, OpenDeviceCallback callback); - // Gets camera id from device id. Returns -1 on error. - int GetCameraIdFromDeviceId(const std::string& device_id); - - // Gets the camera info of |device_id|. Returns null CameraInfoPtr on error. - cros::mojom::CameraInfoPtr GetCameraInfoFromDeviceId( - const std::string& device_id); - private: friend class base::RefCountedThreadSafe<CameraHalDelegate>; @@ -110,8 +109,6 @@ // |vendor_tag_ops_delegate_|. void OnGotVendorTagOpsOnIpcThread(); - using GetCameraInfoCallback = - base::OnceCallback<void(int32_t, cros::mojom::CameraInfoPtr)>; void GetCameraInfoOnIpcThread(int32_t camera_id, GetCameraInfoCallback callback); void OnGotCameraInfoOnIpcThread(int32_t camera_id, @@ -154,16 +151,10 @@ // UpdateBuiltInCameraInfo and |builtin_camera_info_updated_| to avoid race // conditions. For external cameras, the |camera_info_| would be read nad // updated in CameraDeviceStatusChange, which is also protected by - // |camera_info_lock_|. + // |camera_info_lock|. size_t num_builtin_cameras_; base::Lock camera_info_lock_; - std::unordered_map<int, cros::mojom::CameraInfoPtr> camera_info_; - - // A map from |VideoCaptureDeviceDescriptor.device_id| to camera id, which is - // updated in GetDeviceDescriptors() and queried in - // GetCameraIdFromDeviceId(). - base::Lock device_id_to_camera_id_lock_; - std::map<std::string, int> device_id_to_camera_id_; + std::unordered_map<std::string, cros::mojom::CameraInfoPtr> camera_info_; SEQUENCE_CHECKER(sequence_checker_);
diff --git a/media/capture/video/chromeos/camera_hal_delegate_unittest.cc b/media/capture/video/chromeos/camera_hal_delegate_unittest.cc index f9b515e..44dcb1e 100644 --- a/media/capture/video/chromeos/camera_hal_delegate_unittest.cc +++ b/media/capture/video/chromeos/camera_hal_delegate_unittest.cc
@@ -25,13 +25,6 @@ using testing::Invoke; using testing::Return; -namespace { - -constexpr uint32_t kDevicePathTag = 0x80000000; -constexpr char kFakeDevicePath[] = "/dev/video5566"; - -} // namespace - namespace media { class CameraHalDelegateTest : public ::testing::Test { @@ -121,24 +114,6 @@ camera_info->orientation = 0; camera_info->static_camera_characteristics = std::move(static_metadata); break; - case 2: - entry = cros::mojom::CameraMetadataEntry::New(); - entry->index = static_metadata->entry_count; - entry->tag = - static_cast<cros::mojom::CameraMetadataTag>(kDevicePathTag); - entry->type = cros::mojom::EntryType::TYPE_BYTE; - entry->count = sizeof(kFakeDevicePath); - entry->data.assign(std::begin(kFakeDevicePath), - std::end(kFakeDevicePath)); - - static_metadata->entry_count++; - static_metadata->entry_capacity++; - static_metadata->entries->push_back(std::move(entry)); - - camera_info->facing = cros::mojom::CameraFacing::CAMERA_FACING_EXTERNAL; - camera_info->orientation = 0; - camera_info->static_camera_characteristics = std::move(static_metadata); - break; default: FAIL() << "Invalid camera id"; } @@ -147,17 +122,10 @@ auto get_vendor_tag_ops_cb = [&](cros::mojom::VendorTagOpsRequest& vendor_tag_ops_request, - cros::mojom::CameraModule::GetVendorTagOpsCallback&) { + cros::mojom::CameraModule::GetVendorTagOpsCallback& cb) { mock_vendor_tag_ops_.Bind(std::move(vendor_tag_ops_request)); }; - auto set_callbacks_cb = - [&](cros::mojom::CameraModuleCallbacksPtr& callbacks, - cros::mojom::CameraModule::SetCallbacksCallback&) { - mock_camera_module_.NotifyCameraDeviceChange( - 2, cros::mojom::CameraDeviceStatus::CAMERA_DEVICE_STATUS_PRESENT); - }; - EXPECT_CALL(mock_camera_module_, DoGetNumberOfCameras(_)) .Times(1) .WillOnce(Invoke(get_number_of_cameras_cb)); @@ -165,8 +133,7 @@ mock_camera_module_, DoSetCallbacks(A<cros::mojom::CameraModuleCallbacksPtr&>(), A<cros::mojom::CameraModule::SetCallbacksCallback&>())) - .Times(1) - .WillOnce(Invoke(set_callbacks_cb)); + .Times(1); EXPECT_CALL(mock_camera_module_, DoGetVendorTagOps( A<cros::mojom::VendorTagOpsRequest&>(), @@ -183,29 +150,26 @@ 1, A<cros::mojom::CameraModule::GetCameraInfoCallback&>())) .Times(1) .WillOnce(Invoke(get_camera_info_cb)); - EXPECT_CALL(mock_camera_module_, - DoGetCameraInfo( - 2, A<cros::mojom::CameraModule::GetCameraInfoCallback&>())) - .Times(1) - .WillOnce(Invoke(get_camera_info_cb)); EXPECT_CALL(mock_vendor_tag_ops_, DoGetTagCount()) .Times(1) .WillOnce(Return(1)); + const uint32_t kFakeTag = 0x80000000; + EXPECT_CALL(mock_vendor_tag_ops_, DoGetAllTags()) .Times(1) - .WillOnce(Return(std::vector<uint32_t>{kDevicePathTag})); + .WillOnce(Return(std::vector<uint32_t>{kFakeTag})); - EXPECT_CALL(mock_vendor_tag_ops_, DoGetSectionName(kDevicePathTag)) + EXPECT_CALL(mock_vendor_tag_ops_, DoGetSectionName(kFakeTag)) .Times(1) .WillOnce(Return("com.google")); - EXPECT_CALL(mock_vendor_tag_ops_, DoGetTagName(kDevicePathTag)) + EXPECT_CALL(mock_vendor_tag_ops_, DoGetTagName(kFakeTag)) .Times(1) - .WillOnce(Return("usb.devicePath")); + .WillOnce(Return("fake.foo.bar")); - EXPECT_CALL(mock_vendor_tag_ops_, DoGetTagType(kDevicePathTag)) + EXPECT_CALL(mock_vendor_tag_ops_, DoGetTagType(kFakeTag)) .Times(1) .WillOnce( Return(static_cast<int32_t>(cros::mojom::EntryType::TYPE_BYTE))); @@ -213,15 +177,13 @@ VideoCaptureDeviceDescriptors descriptors; camera_hal_delegate_->GetDeviceDescriptors(&descriptors); - ASSERT_EQ(3u, descriptors.size()); + ASSERT_EQ(2U, descriptors.size()); // We have workaround to always put front camera at first. ASSERT_EQ(std::to_string(1), descriptors[0].device_id); ASSERT_EQ(VideoFacingMode::MEDIA_VIDEO_FACING_USER, descriptors[0].facing); ASSERT_EQ(std::to_string(0), descriptors[1].device_id); ASSERT_EQ(VideoFacingMode::MEDIA_VIDEO_FACING_ENVIRONMENT, descriptors[1].facing); - ASSERT_EQ(kFakeDevicePath, descriptors[2].device_id); - ASSERT_EQ(VideoFacingMode::MEDIA_VIDEO_FACING_NONE, descriptors[2].facing); // TODO(shik): Test external camera. Check the fields |display_name| and // |model_id| are set properly according to the vendor tags.
diff --git a/media/capture/video/chromeos/mock_camera_module.cc b/media/capture/video/chromeos/mock_camera_module.cc index b7da84d..9f0d04e 100644 --- a/media/capture/video/chromeos/mock_camera_module.cc +++ b/media/capture/video/chromeos/mock_camera_module.cc
@@ -3,12 +3,11 @@ // found in the LICENSE file. #include "media/capture/video/chromeos/mock_camera_module.h" +#include "base/bind.h" #include <memory> #include <utility> -#include "base/bind.h" - namespace media { namespace unittest_internal { @@ -67,20 +66,6 @@ std::move(callback).Run(); } -void MockCameraModule::NotifyCameraDeviceChange( - int camera_id, - cros::mojom::CameraDeviceStatus status) { - mock_module_thread_.task_runner()->PostTask( - FROM_HERE, base::Bind(&MockCameraModule::NotifyCameraDeviceChangeOnThread, - base::Unretained(this), camera_id, status)); -} - -void MockCameraModule::NotifyCameraDeviceChangeOnThread( - int camera_id, - cros::mojom::CameraDeviceStatus status) { - callbacks_->CameraDeviceStatusChange(camera_id, status); -} - cros::mojom::CameraModulePtrInfo MockCameraModule::GetInterfacePtrInfo() { base::WaitableEvent done(base::WaitableEvent::ResetPolicy::MANUAL, base::WaitableEvent::InitialState::NOT_SIGNALED); @@ -97,9 +82,6 @@ if (binding_.is_bound()) { binding_.Close(); } - if (callbacks_.is_bound()) { - callbacks_.reset(); - } } void MockCameraModule::BindOnThread(
diff --git a/media/capture/video/chromeos/mock_camera_module.h b/media/capture/video/chromeos/mock_camera_module.h index f10d2b7..2063b4c1 100644 --- a/media/capture/video/chromeos/mock_camera_module.h +++ b/media/capture/video/chromeos/mock_camera_module.h
@@ -63,15 +63,9 @@ void(cros::mojom::VendorTagOpsRequest& vendor_tag_ops_request, GetVendorTagOpsCallback& callback)); - void NotifyCameraDeviceChange(int camera_id, - cros::mojom::CameraDeviceStatus status); - cros::mojom::CameraModulePtrInfo GetInterfacePtrInfo(); private: - void NotifyCameraDeviceChangeOnThread(int camera_id, - cros::mojom::CameraDeviceStatus status); - void CloseBindingOnThread(); void BindOnThread(base::WaitableEvent* done,
diff --git a/media/capture/video/chromeos/reprocess_manager.cc b/media/capture/video/chromeos/reprocess_manager.cc index 9fce50d..ed5e466 100644 --- a/media/capture/video/chromeos/reprocess_manager.cc +++ b/media/capture/video/chromeos/reprocess_manager.cc
@@ -44,11 +44,10 @@ return kReprocessSuccess; } -ReprocessManager::ReprocessManager(CameraInfoGetter get_camera_info) +ReprocessManager::ReprocessManager(UpdateCameraInfoCallback callback) : sequenced_task_runner_(base::CreateSequencedTaskRunnerWithTraits( {base::TaskPriority::USER_VISIBLE})), - impl(std::make_unique<ReprocessManager::ReprocessManagerImpl>( - std::move(get_camera_info))) {} + impl(new ReprocessManager::ReprocessManagerImpl(std::move(callback))) {} ReprocessManager::~ReprocessManager() { sequenced_task_runner_->DeleteSoon(FROM_HERE, std::move(impl)); @@ -96,9 +95,19 @@ std::move(callback))); } +void ReprocessManager::UpdateCameraInfo( + const std::string& device_id, + const cros::mojom::CameraInfoPtr& camera_info) { + sequenced_task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&ReprocessManager::ReprocessManagerImpl::UpdateCameraInfo, + base::Unretained(impl.get()), device_id, + camera_info.Clone())); +} + ReprocessManager::ReprocessManagerImpl::ReprocessManagerImpl( - CameraInfoGetter get_camera_info) - : get_camera_info_(std::move(get_camera_info)) {} + UpdateCameraInfoCallback callback) + : update_camera_info_callback_(std::move(callback)) {} ReprocessManager::ReprocessManagerImpl::~ReprocessManagerImpl() = default; @@ -156,7 +165,24 @@ void ReprocessManager::ReprocessManagerImpl::GetCameraInfo( const std::string& device_id, GetCameraInfoCallback callback) { - std::move(callback).Run(get_camera_info_.Run(device_id)); + if (camera_info_map_[device_id]) { + std::move(callback).Run(camera_info_map_[device_id].Clone()); + } else { + get_camera_info_callback_queue_map_[device_id].push(std::move(callback)); + update_camera_info_callback_.Run(device_id); + } +} + +void ReprocessManager::ReprocessManagerImpl::UpdateCameraInfo( + const std::string& device_id, + cros::mojom::CameraInfoPtr camera_info) { + camera_info_map_[device_id] = std::move(camera_info); + + auto& callback_queue = get_camera_info_callback_queue_map_[device_id]; + while (!callback_queue.empty()) { + std::move(callback_queue.front()).Run(camera_info_map_[device_id].Clone()); + callback_queue.pop(); + } } } // namespace media
diff --git a/media/capture/video/chromeos/reprocess_manager.h b/media/capture/video/chromeos/reprocess_manager.h index c7dea66..2f362471 100644 --- a/media/capture/video/chromeos/reprocess_manager.h +++ b/media/capture/video/chromeos/reprocess_manager.h
@@ -47,14 +47,14 @@ // sequentialize to a single sequence. class CAPTURE_EXPORT ReprocessManager { public: - using CameraInfoGetter = base::RepeatingCallback<cros::mojom::CameraInfoPtr( - const std::string& device_id)>; using GetCameraInfoCallback = base::OnceCallback<void(cros::mojom::CameraInfoPtr camera_info)>; + using UpdateCameraInfoCallback = + base::RepeatingCallback<void(const std::string& device_id)>; class ReprocessManagerImpl { public: - ReprocessManagerImpl(CameraInfoGetter get_camera_info); + ReprocessManagerImpl(UpdateCameraInfoCallback callback); ~ReprocessManagerImpl(); void SetReprocessOption( @@ -73,11 +73,19 @@ void GetCameraInfo(const std::string& device_id, GetCameraInfoCallback callback); + void UpdateCameraInfo(const std::string& device_id, + cros::mojom::CameraInfoPtr camera_info); + private: base::flat_map<std::string, base::queue<ReprocessTask>> reprocess_task_queue_map_; - CameraInfoGetter get_camera_info_; + base::flat_map<std::string, cros::mojom::CameraInfoPtr> camera_info_map_; + + base::flat_map<std::string, base::queue<GetCameraInfoCallback>> + get_camera_info_callback_queue_map_; + + UpdateCameraInfoCallback update_camera_info_callback_; DISALLOW_COPY_AND_ASSIGN(ReprocessManagerImpl); }; @@ -85,7 +93,7 @@ static int GetReprocessReturnCode( cros::mojom::Effect effect, const cros::mojom::CameraMetadataPtr* metadata); - ReprocessManager(CameraInfoGetter callback); + ReprocessManager(UpdateCameraInfoCallback callback); ~ReprocessManager(); // Sets the reprocess option for given device id and effect. Each reprocess @@ -110,6 +118,10 @@ void GetCameraInfo(const std::string& device_id, GetCameraInfoCallback callback); + // Updates camera information for given device. + void UpdateCameraInfo(const std::string& device_id, + const cros::mojom::CameraInfoPtr& camera_info); + private: scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_; std::unique_ptr<ReprocessManagerImpl> impl;
diff --git a/media/capture/video/chromeos/video_capture_device_factory_chromeos.cc b/media/capture/video/chromeos/video_capture_device_factory_chromeos.cc index 03c20618..e3777da 100644 --- a/media/capture/video/chromeos/video_capture_device_factory_chromeos.cc +++ b/media/capture/video/chromeos/video_capture_device_factory_chromeos.cc
@@ -26,11 +26,10 @@ camera_hal_ipc_thread_("CameraHalIpcThread"), initialized_(Init()), weak_ptr_factory_(this) { - auto get_camera_info = + auto callback = base::BindRepeating(&VideoCaptureDeviceFactoryChromeOS::GetCameraInfo, base::Unretained(this)); - reprocess_manager_ = - std::make_unique<ReprocessManager>(std::move(get_camera_info)); + reprocess_manager_ = std::make_unique<ReprocessManager>(std::move(callback)); cros_image_capture_ = std::make_unique<CrosImageCaptureImpl>(reprocess_manager_.get()); } @@ -98,12 +97,23 @@ return true; } -cros::mojom::CameraInfoPtr VideoCaptureDeviceFactoryChromeOS::GetCameraInfo( +void VideoCaptureDeviceFactoryChromeOS::GetCameraInfo( const std::string& device_id) { if (!initialized_) { - return {}; + return; } - return camera_hal_delegate_->GetCameraInfoFromDeviceId(device_id); + camera_hal_delegate_->GetCameraInfo( + std::stoi(device_id), + BindToCurrentLoop( + base::BindOnce(&VideoCaptureDeviceFactoryChromeOS::OnGotCameraInfo, + weak_ptr_factory_.GetWeakPtr(), device_id))); +} + +void VideoCaptureDeviceFactoryChromeOS::OnGotCameraInfo( + const std::string& device_id, + int32_t result, + cros::mojom::CameraInfoPtr camera_info) { + reprocess_manager_->UpdateCameraInfo(device_id, std::move(camera_info)); } void VideoCaptureDeviceFactoryChromeOS::BindCrosImageCaptureRequest(
diff --git a/media/capture/video/chromeos/video_capture_device_factory_chromeos.h b/media/capture/video/chromeos/video_capture_device_factory_chromeos.h index 9f72384..616eb3e 100644 --- a/media/capture/video/chromeos/video_capture_device_factory_chromeos.h +++ b/media/capture/video/chromeos/video_capture_device_factory_chromeos.h
@@ -51,9 +51,13 @@ // succeeds. bool Init(); - // Gets camera info for the given |device_id|. Returns null CameraInfoPtr on - // error. - cros::mojom::CameraInfoPtr GetCameraInfo(const std::string& device_id); + // Actively request camera static metadata for given |device_id|. + void GetCameraInfo(const std::string& device_id); + + // Callback when receiving |camera_info| that contains camera static metadata. + void OnGotCameraInfo(const std::string& device_id, + int32_t result, + cros::mojom::CameraInfoPtr camera_info); const scoped_refptr<base::SingleThreadTaskRunner> task_runner_for_screen_observer_;
diff --git a/remoting/host/win/BUILD.gn b/remoting/host/win/BUILD.gn index cccfd8dd..78c11d2 100644 --- a/remoting/host/win/BUILD.gn +++ b/remoting/host/win/BUILD.gn
@@ -77,7 +77,7 @@ sources = [ "audio_volume_filter_win.cc", "audio_volume_filter_win.h", - "com_imported_mstscax.tlh", + "com_imported_mstscax.h", "com_security.cc", "com_security.h", "default_audio_device_change_detector.cc",
diff --git a/services/identity/public/cpp/identity_manager.cc b/services/identity/public/cpp/identity_manager.cc index c0c84d9b..72db9b0 100644 --- a/services/identity/public/cpp/identity_manager.cc +++ b/services/identity/public/cpp/identity_manager.cc
@@ -183,15 +183,14 @@ std::vector<CoreAccountInfo> IdentityManager::GetAccountsWithRefreshTokens() const { - std::vector<std::string> account_ids_with_tokens = + std::vector<CoreAccountId> account_ids_with_tokens = token_service_->GetAccounts(); std::vector<CoreAccountInfo> accounts; accounts.reserve(account_ids_with_tokens.size()); - for (const std::string& account_id : account_ids_with_tokens) { - accounts.push_back( - GetAccountInfoForAccountWithRefreshToken(CoreAccountId(account_id))); + for (const CoreAccountId& account_id : account_ids_with_tokens) { + accounts.push_back(GetAccountInfoForAccountWithRefreshToken(account_id)); } return accounts; @@ -199,15 +198,14 @@ std::vector<AccountInfo> IdentityManager::GetExtendedAccountInfoForAccountsWithRefreshToken() const { - std::vector<std::string> account_ids_with_tokens = + std::vector<CoreAccountId> account_ids_with_tokens = token_service_->GetAccounts(); std::vector<AccountInfo> accounts; accounts.reserve(account_ids_with_tokens.size()); - for (const std::string& account_id : account_ids_with_tokens) { - accounts.push_back( - GetAccountInfoForAccountWithRefreshToken(CoreAccountId(account_id))); + for (const CoreAccountId& account_id : account_ids_with_tokens) { + accounts.push_back(GetAccountInfoForAccountWithRefreshToken(account_id)); } return accounts; @@ -390,11 +388,13 @@ void IdentityManager::LegacySetPrimaryAccount( const std::string& gaia_id, const std::string& email_address) { - primary_account_manager_->SetAuthenticatedAccountInfo(gaia_id, email_address); - - // TODO(https://crbug.com/944012): Unify the firing of this observer - // notification between ChromeOS and other platforms. - FireOnPrimaryAccountSetNotification(primary_account_.value()); + // On ChromeOS the primary account is not guaranteed to be present in + // AccountTrackerService when it is set, but PrimaryAccountManager::SignIn() + // requires that it be so. + // TODO(https://crbug.com/967602): Eliminate the need to seed the account + // here. + account_tracker_service_->SeedAccountInfo(gaia_id, email_address); + primary_account_manager_->SignIn(email_address); } #endif @@ -494,15 +494,10 @@ return account_info; } -void IdentityManager::FireOnPrimaryAccountSetNotification( - const CoreAccountInfo& primary_account_info) { - for (auto& observer : observer_list_) { - observer.OnPrimaryAccountSet(primary_account_info); - } -} - void IdentityManager::GoogleSigninSucceeded(const AccountInfo& account_info) { - FireOnPrimaryAccountSetNotification(account_info); + for (auto& observer : observer_list_) { + observer.OnPrimaryAccountSet(account_info); + } } void IdentityManager::GoogleSignedOut(const AccountInfo& account_info) {
diff --git a/services/identity/public/cpp/identity_manager.h b/services/identity/public/cpp/identity_manager.h index a341ae0..be36eba 100644 --- a/services/identity/public/cpp/identity_manager.h +++ b/services/identity/public/cpp/identity_manager.h
@@ -582,14 +582,6 @@ AccountInfo GetAccountInfoForAccountWithRefreshToken( const CoreAccountId& account_id) const; - // Fires the IdentityManager::Observer::OnPrimaryAccountSet() notification - // to observers. - // TODO(https://crbug.com/944012): Unify the firing of this observer - // notification between ChromeOS and other platforms and eliminate the need - // for this helper method. - void FireOnPrimaryAccountSetNotification( - const CoreAccountInfo& primary_account_info); - // PrimaryAccountManager::Observer: void GoogleSigninSucceeded(const AccountInfo& account_info) override; void GoogleSignedOut(const AccountInfo& account_info) override;
diff --git a/services/identity/public/cpp/identity_test_utils.cc b/services/identity/public/cpp/identity_test_utils.cc index b5b2840..a76afa7 100644 --- a/services/identity/public/cpp/identity_test_utils.cc +++ b/services/identity/public/cpp/identity_test_utils.cc
@@ -94,16 +94,7 @@ std::string gaia_id = account_info.gaia; DCHECK(!gaia_id.empty()); -#if defined(OS_CHROMEOS) - // ChromeOS has no real notion of signin, so just plumb the information - // through. TODO(https://crbug.com/814787): What is the right long-term - // solution here? Tests shouldn't need to call legacy APIs, so either the - // need for this test flow should be eliminated or there should be a - // test-only API. - identity_manager->LegacySetPrimaryAccount(gaia_id, email); -#else primary_account_manager->SignIn(email); -#endif DCHECK(primary_account_manager->IsAuthenticated()); DCHECK(identity_manager->HasPrimaryAccount());
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index 5fde7d2..5ebb6876b 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -8832,5 +8832,1692 @@ "test": "services_unittests" } ] + }, + "linux-trusty-rel": { + "gtest_tests": [ + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "accessibility_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "angle_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "app_shell_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "aura_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "base_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "base_util_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "blink_common_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "blink_fuzzer_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "blink_heap_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "blink_platform_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "webkit_unit_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "blink_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "boringssl_crypto_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "boringssl_ssl_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ], + "shards": 10 + }, + "test": "browser_tests" + }, + { + "args": [ + "--disable-blink-features=HTMLImports,ShadowDOMV0,CustomElementsV0", + "--test-launcher-filter-file=../../testing/buildbot/filters/webui_html_imports_polyfill_browser_tests.filter" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "webui_html_imports_polyfill_browser_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "browser_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "cacheinvalidation_unittests" + }, + { + "args": [ + "--gtest_filter=-*UsingRealWebcam*" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "capture_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "cast_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "cc_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "chrome_app_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "chromedriver_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "components_browsertests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "components_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "compositor_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ], + "shards": 6 + }, + "test": "content_browsertests" + }, + { + "args": [ + "--disable-perfetto", + "--gtest_filter=TracingControllerTest.*:BackgroundTracingManagerBrowserTest.*" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "nonperfetto_content_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "content_browsertests" + }, + { + "args": [ + "--enable-features=VizDisplayCompositor,UseSkiaRenderer", + "--test-launcher-filter-file=../../testing/buildbot/filters/skia_renderer.content_browsertests.filter" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "skia_renderer_content_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "content_browsertests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "content_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "cronet_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "cronet_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "crypto_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "dbus_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "device_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "display_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "events_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "extensions_browsertests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "extensions_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "filesystem_service_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "gcm_unit_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "gfx_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "gin_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "google_apis_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "gpu_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "headless_browsertests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "headless_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ], + "shards": 3 + }, + "test": "interactive_ui_tests" + }, + { + "args": [ + "--disable-blink-features=HTMLImports,ShadowDOMV0,CustomElementsV0", + "--test-launcher-filter-file=../../testing/buildbot/filters/webui_html_imports_polyfill_interactive_ui_tests.filter" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "webui_html_imports_polyfill_interactive_ui_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "interactive_ui_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "ipc_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "jingle_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "latency_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "leveldb_service_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "libjingle_xmpp_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "media_blink_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "media_service_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "media_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "message_center_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "midi_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "mojo_core_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "mojo_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "nacl_helper_nonsfi_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "nacl_loader_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "native_theme_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "net_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "pdf_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "perfetto_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "ppapi_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "printing_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "remoting_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "sandbox_linux_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "service_manager_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "services_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "shell_dialogs_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "skia_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "snapshot_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "sql_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "storage_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "sync_integration_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "traffic_annotation_auditor_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "ui_base_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "ui_touch_selection_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "unit_tests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "url_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "views_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "viz_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "vr_common_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "vr_pixeltests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "wm_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "wtf_unittests" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "xr_browser_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + }, + "test": "xr_browser_tests" + } + ], + "isolated_scripts": [ + { + "isolate_name": "blink_python_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "blink_python_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "args": [ + "--test-type=integration" + ], + "isolate_name": "chromedriver_py_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "chromedriver_py_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "isolate_name": "chromedriver_replay_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "chromedriver_replay_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "isolate_name": "content_shell_crash_test", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "content_shell_crash_test", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "isolate_name": "devtools_closure_compile", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "devtools_closure_compile", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "isolate_name": "devtools_eslint", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "devtools_eslint", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "isolate_name": "flatbuffers_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "flatbuffers_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "isolate_name": "grit_python_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "grit_python_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "isolate_name": "metrics_python_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "metrics_python_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "args": [ + "--additional-driver-flag", + "--disable-site-isolation-trials", + "--additional-expectations", + "src/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials", + "--num-retries=3" + ], + "isolate_name": "blink_web_tests_exparchive", + "merge": { + "args": [ + "--verbose" + ], + "script": "//third_party/blink/tools/merge_web_test_results.py" + }, + "name": "not_site_per_process_webkit_layout_tests", + "results_handler": "layout tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ], + "shards": 10 + } + }, + { + "isolate_name": "telemetry_gpu_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "telemetry_gpu_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ], + "idempotent": false + } + }, + { + "isolate_name": "telemetry_perf_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "telemetry_perf_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ], + "idempotent": false, + "shards": 12 + } + }, + { + "args": [ + "--jobs=1", + "--extra-browser-args=--disable-gpu" + ], + "isolate_name": "telemetry_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "telemetry_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ], + "idempotent": false, + "shards": 4 + } + }, + { + "args": [ + "--gtest-benchmark-name=views_perftests" + ], + "isolate_name": "views_perftests", + "merge": { + "args": [ + "--smoke-test-mode" + ], + "script": "//tools/perf/process_perf_results.py" + }, + "name": "views_perftests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "isolate_name": "webdriver_wpt_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "webdriver_tests_suite", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ] + } + }, + { + "args": [ + "--num-retries=3" + ], + "isolate_name": "blink_web_tests_exparchive", + "merge": { + "args": [ + "--verbose" + ], + "script": "//third_party/blink/tools/merge_web_test_results.py" + }, + "name": "webkit_layout_tests", + "results_handler": "layout tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-14.04" + } + ], + "shards": 12 + } + } + ], + "scripts": [ + { + "name": "check_static_initializers", + "script": "check_static_initializers.py", + "swarming": {} + }, + { + "name": "checkdeps", + "script": "checkdeps.py", + "swarming": {} + }, + { + "name": "checkperms", + "script": "checkperms.py", + "swarming": {} + }, + { + "name": "headless_python_unittests", + "script": "headless_python_unittests.py", + "swarming": {} + }, + { + "name": "webkit_lint", + "script": "blink_lint_expectations.py", + "swarming": {} + } + ] } }
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 3290e7e6..076112d3 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -3464,6 +3464,16 @@ 'gtest_tests': 'ozone_linux_gtests', }, }, + 'linux-trusty-rel': { + 'mixins': [ + 'linux-trusty', + ], + 'test_suites': { + 'gtest_tests': 'chromium_linux_gtests', + 'isolated_scripts': 'chromium_linux_rel_isolated_scripts', + 'scripts': 'chromium_linux_scripts', + }, + }, }, }, {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index e8937c9..ebe3ce2 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -1852,6 +1852,24 @@ ] } ], + "DisableInitialMostVisitedFadeIn": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "DisableInitialMostVisitedFadeIn" + ] + } + ] + } + ], "DownloadHomeMoreButton": [ { "platforms": [
diff --git a/third_party/blink/public/web/web_ax_object.h b/third_party/blink/public/web/web_ax_object.h index 7014923..a1985d2d 100644 --- a/third_party/blink/public/web/web_ax_object.h +++ b/third_party/blink/public/web/web_ax_object.h
@@ -133,7 +133,6 @@ BLINK_EXPORT bool IsFocused() const; BLINK_EXPORT WebAXGrabbedState IsGrabbed() const; BLINK_EXPORT bool IsHovered() const; - BLINK_EXPORT bool IsLineBreakingObject() const; BLINK_EXPORT bool IsLinked() const; BLINK_EXPORT bool IsLoaded() const; BLINK_EXPORT bool IsModal() const;
diff --git a/third_party/blink/renderer/build/scripts/json5_generator.py b/third_party/blink/renderer/build/scripts/json5_generator.py index fa03672..8bd0c7a 100644 --- a/third_party/blink/renderer/build/scripts/json5_generator.py +++ b/third_party/blink/renderer/build/scripts/json5_generator.py
@@ -265,8 +265,10 @@ def cleanup_files(self, output_dir): for file_name in self._cleanup: path = os.path.join(output_dir, file_name) - if os.path.exists(path): + try: os.remove(path) + except OSError: + pass def set_gperf_path(self, gperf_path): self.gperf_path = gperf_path
diff --git a/third_party/blink/renderer/build/scripts/templates/feature_policy_helper.cc.tmpl b/third_party/blink/renderer/build/scripts/templates/feature_policy_helper.cc.tmpl index b50d3eb..9132b68 100644 --- a/third_party/blink/renderer/build/scripts/templates/feature_policy_helper.cc.tmpl +++ b/third_party/blink/renderer/build/scripts/templates/feature_policy_helper.cc.tmpl
@@ -54,13 +54,13 @@ } bool DisabledByOriginTrial(const String& feature_name, - ExecutionContext* execution_context) { + FeatureContext* feature_context) { {% for feature_name, dependencies in origin_trial_dependency_map.items() %} if (feature_name == k{{feature_name}}PolicyName) { return {%- for dependency in dependencies %} {%- if not loop.first %} &&{% endif %} - !RuntimeEnabledFeatures::{{dependency.name}}Enabled(execution_context) + !RuntimeEnabledFeatures::{{dependency.name}}Enabled(feature_context) {%- endfor %}; } {% endfor %}
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index 3c776a8..a454dd8 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -610,7 +610,9 @@ DocumentClassFlags document_classes) : ContainerNode(nullptr, kCreateDocument), TreeScope(*this), - ExecutionContext(V8PerIsolateData::MainThreadIsolate(), nullptr), + ExecutionContext(V8PerIsolateData::MainThreadIsolate(), + nullptr, + MakeGarbageCollected<OriginTrialContext>()), evaluate_media_queries_on_style_recalc_(false), pending_sheet_layout_(kNoLayoutWithPendingSheets), frame_(initializer.GetFrame()), @@ -8105,7 +8107,7 @@ // TODO(yoichio): We should remove these counters when v0 APIs are removed. // crbug.com/946875. if (const OriginTrialContext* origin_trial_context = - OriginTrialContext::FromOrCreate(this)) { + GetOriginTrialContext()) { if (feature == WebFeature::kHTMLImports && origin_trial_context->IsFeatureEnabled( OriginTrialFeature::kHTMLImports) &&
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h index 6f289c8..b6240f8 100644 --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h
@@ -1497,14 +1497,6 @@ mojom::FeaturePolicyDisposition, const String& message = g_empty_string) const override; - bool IsParsedFeaturePolicy(mojom::FeaturePolicyFeature feature) const { - return parsed_feature_policies_[static_cast<size_t>(feature)]; - } - - void SetParsedFeaturePolicy(mojom::FeaturePolicyFeature feature) { - parsed_feature_policies_.set(static_cast<size_t>(feature)); - } - void IncrementNumberOfCanvases(); void ProcessJavaScriptUrl(const KURL&, ContentSecurityPolicyDisposition); @@ -2029,10 +2021,6 @@ // https://tc39.github.io/ecma262/#sec-agent-clusters const base::UnguessableToken agent_cluster_id_; - // Tracks which feature policies have already been parsed, so as not to count - // them multiple times. - std::bitset<static_cast<size_t>(mojom::FeaturePolicyFeature::kMaxValue) + 1> - parsed_feature_policies_; // Tracks which features have already been potentially violated in this // document. This helps to count them only once per page load. mutable std::bitset<
diff --git a/third_party/blink/renderer/core/dom/document_test.cc b/third_party/blink/renderer/core/dom/document_test.cc index 51833b9..92b137c 100644 --- a/third_party/blink/renderer/core/dom/document_test.cc +++ b/third_party/blink/renderer/core/dom/document_test.cc
@@ -64,6 +64,7 @@ #include "third_party/blink/renderer/platform/heap/heap.h" #include "third_party/blink/renderer/platform/mojo/interface_invalidator.h" #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h" +#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" #include "third_party/blink/renderer/platform/weborigin/scheme_registry.h" #include "third_party/blink/renderer/platform/weborigin/security_origin.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" @@ -567,15 +568,14 @@ } TEST_F(DocumentTest, OutgoingReferrer) { - GetDocument().SetURL(KURL("https://www.example.com/hoge#fuga?piyo")); - GetDocument().SetSecurityOrigin( - SecurityOrigin::Create(KURL("https://www.example.com/"))); + NavigateTo(KURL("https://www.example.com/hoge#fuga?piyo")); EXPECT_EQ("https://www.example.com/hoge", GetDocument().OutgoingReferrer()); } TEST_F(DocumentTest, OutgoingReferrerWithUniqueOrigin) { - GetDocument().SetURL(KURL("https://www.example.com/hoge#fuga?piyo")); - GetDocument().SetSecurityOrigin(SecurityOrigin::CreateUniqueOpaque()); + NavigateTo(KURL("https://www.example.com/hoge#fuga?piyo"), "", + "sandbox allow-scripts"); + EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsOpaque()); EXPECT_EQ(String(), GetDocument().OutgoingReferrer()); } @@ -609,16 +609,11 @@ } TEST_F(DocumentTest, EnforceSandboxFlags) { - scoped_refptr<SecurityOrigin> origin = - SecurityOrigin::CreateFromString("http://example.test"); - GetDocument().SetSecurityOrigin(origin); - SandboxFlags mask = WebSandboxFlags::kNavigation; - GetDocument().EnforceSandboxFlags(mask); - EXPECT_EQ(origin, GetDocument().GetSecurityOrigin()); + NavigateTo(KURL("http://example.test/"), "", "sandbox allow-same-origin"); + EXPECT_FALSE(GetDocument().GetSecurityOrigin()->IsOpaque()); EXPECT_FALSE(GetDocument().GetSecurityOrigin()->IsPotentiallyTrustworthy()); - mask |= WebSandboxFlags::kOrigin; - GetDocument().EnforceSandboxFlags(mask); + NavigateTo(KURL("http://example.test/"), "", "sandbox"); EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsOpaque()); EXPECT_FALSE(GetDocument().GetSecurityOrigin()->IsPotentiallyTrustworthy()); @@ -628,22 +623,16 @@ url::SchemeType::SCHEME_WITH_HOST); SchemeRegistry::RegisterURLSchemeBypassingSecureContextCheck( "very-special-scheme"); - origin = - SecurityOrigin::CreateFromString("very-special-scheme://example.test"); - GetDocument().SetSecurityOrigin(origin); - GetDocument().EnforceSandboxFlags(mask); + NavigateTo(KURL("very-special-scheme://example.test"), "", "sandbox"); EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsOpaque()); EXPECT_FALSE(GetDocument().GetSecurityOrigin()->IsPotentiallyTrustworthy()); SchemeRegistry::RegisterURLSchemeAsSecure("very-special-scheme"); - GetDocument().SetSecurityOrigin(origin); - GetDocument().EnforceSandboxFlags(mask); + NavigateTo(KURL("very-special-scheme://example.test"), "", "sandbox"); EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsOpaque()); EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsPotentiallyTrustworthy()); - origin = SecurityOrigin::CreateFromString("https://example.test"); - GetDocument().SetSecurityOrigin(origin); - GetDocument().EnforceSandboxFlags(mask); + NavigateTo(KURL("https://example.test"), "", "sandbox"); EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsOpaque()); EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsPotentiallyTrustworthy()); } @@ -892,12 +881,7 @@ } TEST_F(DocumentTest, SandboxDisablesAppCache) { - scoped_refptr<SecurityOrigin> origin = - SecurityOrigin::CreateFromString("https://test.com"); - GetDocument().SetSecurityOrigin(origin); - SandboxFlags mask = WebSandboxFlags::kOrigin; - GetDocument().EnforceSandboxFlags(mask); - GetDocument().SetURL(KURL("https://test.com/foobar/document")); + NavigateTo(KURL("https://test.com/foobar/document"), "", "sandbox"); ApplicationCacheHost* appcache_host = GetDocument().Loader()->GetApplicationCacheHost(); @@ -1093,13 +1077,7 @@ INSTANTIATE_TEST_SUITE_P(, IsolatedWorldCSPTest, testing::Values(true, false)); TEST_F(DocumentTest, CanExecuteScriptsWithSandboxAndIsolatedWorld) { - constexpr SandboxFlags kSandboxMask = WebSandboxFlags::kScripts; - GetDocument().EnforceSandboxFlags(kSandboxMask); - // With FeaturePolicyForSandbox, all the sandbox flags must be explicitly - // converted to equivalent feature policies. Since sandbox is enforced above, - // the feature policies have to be reset; setting an empty header policy will - // internally convert the newly set sandbox flags to policies. - GetDocument().ApplyFeaturePolicyFromHeader(""); + NavigateTo(KURL("https://www.example.com/"), "", "sandbox"); LocalFrame* frame = GetDocument().GetFrame(); frame->GetSettings()->SetScriptEnabled(true);
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc index a811d653..65a5c9c 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc
@@ -3532,11 +3532,26 @@ // events). if (!IsSpatialNavigationEnabled(GetDocument().GetFrame())) return false; + + if (!GetLayoutObject()) + return false; + if (HasEventListeners(event_type_names::kClick) || HasEventListeners(event_type_names::kKeydown) || HasEventListeners(event_type_names::kKeypress) || HasEventListeners(event_type_names::kKeyup)) return true; + + // Some web apps use click-handlers to react on clicks within rects that are + // styled with {cursor: pointer}. Such rects *look* clickable so they probably + // are. Here we make Hand-trees' tip, the first (biggest) node with {cursor: + // pointer}, navigable because users shouldn't need to navigate through every + // sub element that inherit this CSS. + if (GetComputedStyle()->Cursor() == ECursor::kPointer && + ParentComputedStyle()->Cursor() != ECursor::kPointer) { + return true; + } + if (!IsSVGElement()) return false; return (HasEventListeners(event_type_names::kFocus) || @@ -3861,7 +3876,7 @@ ExceptionState& exception_state) { if (DeprecatedEqualIgnoringCase(where, "beforeBegin")) { if (ContainerNode* parent = parentNode()) { - parent->InsertBefore(new_child, this, exception_state); + parent->insertBefore(new_child, this, exception_state); if (!exception_state.HadException()) return new_child; } @@ -3869,18 +3884,18 @@ } if (DeprecatedEqualIgnoringCase(where, "afterBegin")) { - InsertBefore(new_child, firstChild(), exception_state); + insertBefore(new_child, firstChild(), exception_state); return exception_state.HadException() ? nullptr : new_child; } if (DeprecatedEqualIgnoringCase(where, "beforeEnd")) { - AppendChild(new_child, exception_state); + appendChild(new_child, exception_state); return exception_state.HadException() ? nullptr : new_child; } if (DeprecatedEqualIgnoringCase(where, "afterEnd")) { if (ContainerNode* parent = parentNode()) { - parent->InsertBefore(new_child, nextSibling(), exception_state); + parent->insertBefore(new_child, nextSibling(), exception_state); if (!exception_state.HadException()) return new_child; }
diff --git a/third_party/blink/renderer/core/dom/node.cc b/third_party/blink/renderer/core/dom/node.cc index e091a023..25caed6 100644 --- a/third_party/blink/renderer/core/dom/node.cc +++ b/third_party/blink/renderer/core/dom/node.cc
@@ -663,6 +663,10 @@ Node* Node::insertBefore(Node* new_child, Node* ref_child, ExceptionState& exception_state) { + new_child = TrustedTypesCheckForScriptNode(new_child, exception_state); + if (!new_child) + return nullptr; + auto* this_node = DynamicTo<ContainerNode>(this); if (this_node) return this_node->InsertBefore(new_child, ref_child, exception_state); @@ -680,6 +684,10 @@ Node* Node::replaceChild(Node* new_child, Node* old_child, ExceptionState& exception_state) { + new_child = TrustedTypesCheckForScriptNode(new_child, exception_state); + if (!new_child) + return nullptr; + auto* this_node = DynamicTo<ContainerNode>(this); if (this_node) return this_node->ReplaceChild(new_child, old_child, exception_state); @@ -710,6 +718,10 @@ } Node* Node::appendChild(Node* new_child, ExceptionState& exception_state) { + new_child = TrustedTypesCheckForScriptNode(new_child, exception_state); + if (!new_child) + return nullptr; + auto* this_node = DynamicTo<ContainerNode>(this); if (this_node) return this_node->AppendChild(new_child, exception_state); @@ -3043,6 +3055,21 @@ SetForceReattachLayoutTree(); } +Node* Node::TrustedTypesCheckForScriptNode( + Node* child, + ExceptionState& exception_state) const { + DCHECK(child); + bool needs_check = IsHTMLScriptElement(this) && child->IsTextNode() && + GetDocument().IsTrustedTypesEnabledForDoc(); + if (!needs_check) + return child; + + child = TrustedTypesCheckForHTMLScriptElement(child, &GetDocument(), + exception_state); + DCHECK_EQ(!child, exception_state.HadException()); + return child; +} + void Node::Trace(Visitor* visitor) { visitor->Trace(parent_or_shadow_host_node_); visitor->Trace(previous_);
diff --git a/third_party/blink/renderer/core/dom/node.h b/third_party/blink/renderer/core/dom/node.h index 5dffa89..a67b4a8b 100644 --- a/third_party/blink/renderer/core/dom/node.h +++ b/third_party/blink/renderer/core/dom/node.h
@@ -1047,6 +1047,9 @@ const HeapHashSet<Member<MutationObserverRegistration>>* TransientMutationObserverRegistry(); + inline Node* TrustedTypesCheckForScriptNode(Node* child, + ExceptionState&) const; + uint32_t node_flags_; Member<Node> parent_or_shadow_host_node_; Member<TreeScope> tree_scope_;
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc index 68ccd83..d8fd1dd1 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc
@@ -51,16 +51,22 @@ namespace blink { -ExecutionContext::ExecutionContext(v8::Isolate* isolate, Agent* agent) +ExecutionContext::ExecutionContext(v8::Isolate* isolate, + Agent* agent, + OriginTrialContext* origin_trial_context) : isolate_(isolate), circular_sequential_id_(0), in_dispatch_error_event_(false), is_context_destroyed_(false), csp_delegate_(MakeGarbageCollected<ExecutionContextCSPDelegate>(*this)), agent_(agent), + origin_trial_context_(origin_trial_context), window_interaction_tokens_(0), referrer_policy_(network::mojom::ReferrerPolicy::kDefault), - invalidator_(std::make_unique<InterfaceInvalidator>()) {} + invalidator_(std::make_unique<InterfaceInvalidator>()) { + if (origin_trial_context_) + origin_trial_context_->BindExecutionContext(this); +} ExecutionContext::~ExecutionContext() = default; @@ -103,11 +109,6 @@ ContextLifecycleNotifier::NotifyContextDestroyed(); } -bool ExecutionContext::FeatureEnabled(OriginTrialFeature feature) const { - const OriginTrialContext* context = OriginTrialContext::From(this); - return context && context->IsFeatureEnabled(feature); -} - void ExecutionContext::AddConsoleMessage(mojom::ConsoleMessageSource source, mojom::ConsoleMessageLevel level, const String& message) { @@ -265,6 +266,7 @@ visitor->Trace(pending_exceptions_); visitor->Trace(csp_delegate_); visitor->Trace(agent_); + visitor->Trace(origin_trial_context_); ContextLifecycleNotifier::Trace(visitor); ConsoleLogger::Trace(visitor); Supplementable<ExecutionContext>::Trace(visitor); @@ -288,4 +290,21 @@ return agent_->event_loop()->microtask_queue(); } +bool ExecutionContext::FeatureEnabled(OriginTrialFeature feature) const { + return origin_trial_context_ && + origin_trial_context_->IsFeatureEnabled(feature); +} + +void ExecutionContext::CountFeaturePolicyUsage(mojom::WebFeature feature) { + UseCounter::Count(*this, feature); +} + +bool ExecutionContext::FeaturePolicyFeatureObserved( + mojom::FeaturePolicyFeature feature) { + if (parsed_feature_policies_[static_cast<size_t>(feature)]) + return true; + parsed_feature_policies_.set(static_cast<size_t>(feature)); + return false; +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h index d81ece16..9367d02 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.h +++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -39,6 +39,7 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/execution_context/context_lifecycle_notifier.h" #include "third_party/blink/renderer/core/execution_context/context_lifecycle_observer.h" +#include "third_party/blink/renderer/core/feature_policy/feature_policy_parser_delegate.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" #include "third_party/blink/renderer/platform/loader/fetch/console_logger.h" @@ -81,6 +82,7 @@ class InterfaceInvalidator; class KURL; class LocalDOMWindow; +class OriginTrialContext; class PublicURLManager; class ResourceFetcher; class SecurityContext; @@ -123,7 +125,7 @@ public Supplementable<ExecutionContext>, public ConsoleLogger, public UseCounter, - public FeatureContext { + public FeaturePolicyParserDelegate { MERGE_GARBAGE_COLLECTED_MIXINS(); public: @@ -213,9 +215,6 @@ void SetLifecycleState(mojom::FrameLifecycleState); void NotifyContextDestroyed() override; - // FeatureContext override - bool FeatureEnabled(OriginTrialFeature) const override; - // ConsoleLogger implementation. void AddConsoleMessage(mojom::ConsoleMessageSource, mojom::ConsoleMessageLevel, @@ -300,10 +299,22 @@ v8::MicrotaskQueue* GetMicrotaskQueue() const; + OriginTrialContext* GetOriginTrialContext() const { + return origin_trial_context_; + } + virtual TrustedTypePolicyFactory* GetTrustedTypes() const { return nullptr; } + // FeaturePolicyParserDelegate override + bool FeatureEnabled(OriginTrialFeature) const override; + void CountFeaturePolicyUsage(mojom::WebFeature feature) override; + bool FeaturePolicyFeatureObserved( + mojom::FeaturePolicyFeature feature) override; + protected: - explicit ExecutionContext(v8::Isolate* isolate, Agent* agent); + explicit ExecutionContext(v8::Isolate* isolate, + Agent* agent, + OriginTrialContext* origin_trial_context); ~ExecutionContext() override; void SetAgent(Agent* agent) { @@ -331,6 +342,8 @@ Member<Agent> agent_; + Member<OriginTrialContext> origin_trial_context_; + // Counter that keeps track of how many window interaction calls are allowed // for this ExecutionContext. Callers are expected to call // |allowWindowInteraction()| and |consumeWindowInteraction()| in order to @@ -341,6 +354,11 @@ std::unique_ptr<InterfaceInvalidator> invalidator_; + // Tracks which feature policies have already been parsed, so as not to count + // them multiple times. + std::bitset<static_cast<size_t>(mojom::FeaturePolicyFeature::kMaxValue) + 1> + parsed_feature_policies_; + DISALLOW_COPY_AND_ASSIGN(ExecutionContext); };
diff --git a/third_party/blink/renderer/core/feature_policy/BUILD.gn b/third_party/blink/renderer/core/feature_policy/BUILD.gn index 9aec8ac..631d4f7 100644 --- a/third_party/blink/renderer/core/feature_policy/BUILD.gn +++ b/third_party/blink/renderer/core/feature_policy/BUILD.gn
@@ -12,6 +12,7 @@ "feature_policy_helper.h", "feature_policy_parser.cc", "feature_policy_parser.h", + "feature_policy_parser_delegate.h", "iframe_policy.h", "layout_animations_policy.cc", "layout_animations_policy.h",
diff --git a/third_party/blink/renderer/core/feature_policy/feature_policy_helper.h b/third_party/blink/renderer/core/feature_policy/feature_policy_helper.h index 921fb2a..f754261 100644 --- a/third_party/blink/renderer/core/feature_policy/feature_policy_helper.h +++ b/third_party/blink/renderer/core/feature_policy/feature_policy_helper.h
@@ -14,7 +14,7 @@ using FeatureNameMap = HashMap<String, mojom::FeaturePolicyFeature>; -class ExecutionContext; +class FeatureContext; // This method defines the feature names which will be recognized by the parser // for the Feature-Policy HTTP header and the <iframe> "allow" attribute, as @@ -24,7 +24,7 @@ // Returns true if this feature is currently disabled by an origin trial (it is // origin trial controlled, and the origin trial is not enabled). -bool DisabledByOriginTrial(const String&, ExecutionContext*); +bool DisabledByOriginTrial(const String&, FeatureContext*); } // namespace blink
diff --git a/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc b/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc index 8cba0f3..05041e6 100644 --- a/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc +++ b/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc
@@ -28,9 +28,9 @@ const String& policy, scoped_refptr<const SecurityOrigin> origin, Vector<String>* messages, - ExecutionContext* execution_context) { + FeaturePolicyParserDelegate* delegate) { return Parse(policy, origin, nullptr, messages, GetDefaultFeatureNameMap(), - execution_context); + delegate); } ParsedFeaturePolicy FeaturePolicyParser::ParseAttribute( @@ -49,7 +49,7 @@ scoped_refptr<const SecurityOrigin> src_origin, Vector<String>* messages, const FeatureNameMap& feature_names, - ExecutionContext* execution_context) { + FeaturePolicyParserDelegate* delegate) { ParsedFeaturePolicy allowlists; std::bitset<static_cast<size_t>(mojom::FeaturePolicyFeature::kMaxValue) + 1> features_specified; @@ -61,18 +61,16 @@ Vector<String> policy_items; // policy_items = [ policy *( "," [ policy ] ) ] policy.Split(',', policy_items); - if (policy_items.size() > 1) { - UseCounter::Count( - execution_context, + if (policy_items.size() > 1 && delegate) { + delegate->CountFeaturePolicyUsage( mojom::WebFeature::kFeaturePolicyCommaSeparatedDeclarations); } for (const String& item : policy_items) { Vector<String> entry_list; // entry_list = [ entry *( ";" [ entry ] ) ] item.Split(';', entry_list); - if (entry_list.size() > 1) { - UseCounter::Count( - execution_context, + if (entry_list.size() > 1 && delegate) { + delegate->CountFeaturePolicyUsage( mojom::WebFeature::kFeaturePolicySemicolonSeparatedDeclarations); } for (const String& entry : entry_list) { @@ -92,7 +90,7 @@ continue; } - if (DisabledByOriginTrial(feature_name, execution_context)) { + if (DisabledByOriginTrial(feature_name, delegate)) { if (messages) { messages->push_back("Origin trial controlled feature not enabled: '" + tokens[0] + "'."); @@ -110,13 +108,9 @@ // Count the use of this feature policy. if (src_origin) { - Document* document = DynamicTo<Document>(execution_context); - if (!document || !document->IsParsedFeaturePolicy(feature)) { + if (!delegate || !delegate->FeaturePolicyFeatureObserved(feature)) { UMA_HISTOGRAM_ENUMERATION("Blink.UseCounter.FeaturePolicy.Allow", feature); - if (document) { - document->SetParsedFeaturePolicy(feature); - } } } else { UMA_HISTOGRAM_ENUMERATION("Blink.UseCounter.FeaturePolicy.Header", @@ -139,16 +133,20 @@ feature == mojom::FeaturePolicyFeature::kUnoptimizedLosslessImages || feature == mojom::FeaturePolicyFeature::kUnoptimizedLosslessImagesStrict) { - UseCounter::Count(execution_context, - mojom::WebFeature::kUnoptimizedImagePolicies); + if (delegate) { + delegate->CountFeaturePolicyUsage( + mojom::WebFeature::kUnoptimizedImagePolicies); + } // Don't analyze allowlists for origin trial features. count_allowlist_type = false; } // Detect usage of UnsizedMediaPolicy origin trial if (feature == mojom::FeaturePolicyFeature::kUnsizedMedia) { - UseCounter::Count(execution_context, - mojom::WebFeature::kUnsizedMediaPolicy); + if (delegate) { + delegate->CountFeaturePolicyUsage( + mojom::WebFeature::kUnsizedMediaPolicy); + } // Don't analyze allowlists for origin trial features. count_allowlist_type = false; }
diff --git a/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h b/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h index 51327ef..7a9725c 100644 --- a/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h +++ b/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h
@@ -20,6 +20,7 @@ class Document; class ExecutionContext; +class FeaturePolicyParserDelegate; // These values match the "FeaturePolicyAllowlistType" enum in // tools/metrics/histograms/enums.xml. Entries should not be renumbered and @@ -63,7 +64,7 @@ const String& policy, scoped_refptr<const SecurityOrigin>, Vector<String>* messages, - ExecutionContext* execution_context = nullptr); + FeaturePolicyParserDelegate* delegate = nullptr); // Converts a container policy string into a vector of allowlists, given self // and src origins provided, one for each feature specified. Unrecognized @@ -90,7 +91,7 @@ scoped_refptr<const SecurityOrigin> src_origin, Vector<String>* messages, const FeatureNameMap& feature_names, - ExecutionContext* execution_context = nullptr); + FeaturePolicyParserDelegate* delegate = nullptr); // Used for LLVM fuzzer test static void ParseValueForFuzzer(mojom::PolicyValueType, const String&);
diff --git a/third_party/blink/renderer/core/feature_policy/feature_policy_parser_delegate.h b/third_party/blink/renderer/core/feature_policy/feature_policy_parser_delegate.h new file mode 100644 index 0000000..3d7cbf11d --- /dev/null +++ b/third_party/blink/renderer/core/feature_policy/feature_policy_parser_delegate.h
@@ -0,0 +1,23 @@ +// Copyright 2019 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 THIRD_PARTY_BLINK_RENDERER_CORE_FEATURE_POLICY_FEATURE_POLICY_PARSER_DELEGATE_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_FEATURE_POLICY_FEATURE_POLICY_PARSER_DELEGATE_H_ + +#include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom-blink.h" +#include "third_party/blink/renderer/core/frame/web_feature.h" +#include "third_party/blink/renderer/platform/runtime_enabled_features.h" + +namespace blink { + +class FeaturePolicyParserDelegate : public FeatureContext { + public: + virtual void CountFeaturePolicyUsage(mojom::WebFeature feature) = 0; + virtual bool FeaturePolicyFeatureObserved( + mojom::FeaturePolicyFeature feature) = 0; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_FEATURE_POLICY_FEATURE_POLICY_PARSER_DELEGATE_H_
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc index 87578b2..c912fdb 100644 --- a/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc +++ b/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc
@@ -239,12 +239,14 @@ // delivered in <meta> elements. TEST_F(ContentSecurityPolicyTest, SandboxInMeta) { csp->BindToDelegate(execution_context->GetContentSecurityPolicyDelegate()); + EXPECT_EQ(WebSandboxFlags::kNone, csp->GetSandboxMask()); csp->DidReceiveHeader("sandbox;", kContentSecurityPolicyHeaderTypeEnforce, kContentSecurityPolicyHeaderSourceMeta); - EXPECT_FALSE(execution_context->GetSecurityOrigin()->IsOpaque()); + EXPECT_EQ(WebSandboxFlags::kNone, csp->GetSandboxMask()); + execution_context->SetSandboxFlags(WebSandboxFlags::kAll); csp->DidReceiveHeader("sandbox;", kContentSecurityPolicyHeaderTypeEnforce, kContentSecurityPolicyHeaderSourceHTTP); - EXPECT_TRUE(execution_context->GetSecurityOrigin()->IsOpaque()); + EXPECT_EQ(WebSandboxFlags::kAll, csp->GetSandboxMask()); } // Tests that report-uri directives are discarded from policies
diff --git a/third_party/blink/renderer/core/html/html_link_element.cc b/third_party/blink/renderer/core/html/html_link_element.cc index 3d2cc53..20f59e92 100644 --- a/third_party/blink/renderer/core/html/html_link_element.cc +++ b/third_party/blink/renderer/core/html/html_link_element.cc
@@ -192,9 +192,6 @@ (Href().Protocol() == "chrome" || Href().Protocol() == "chrome-extension"); if (!imports_enabled) { - // Ensure the origin trial context is created, as the enabled check will - // return false if the context doesn't exist yet. - OriginTrialContext::FromOrCreate(&GetDocument()); imports_enabled = RuntimeEnabledFeatures::HTMLImportsEnabled(&GetDocument()); }
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc index 39f511bb..dab9603 100644 --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -1576,7 +1576,7 @@ if (GetFrameLoader().StateMachine()->CommittedFirstRealDocumentLoad()) { if (document->GetSettings() ->GetForceTouchEventFeatureDetectionForInspector()) { - OriginTrialContext::FromOrCreate(document)->AddFeature( + document->GetOriginTrialContext()->AddFeature( OriginTrialFeature::kTouchEventFeatureDetection); } @@ -1587,7 +1587,7 @@ if (origin.scheme() == "chrome-extension" && origin.DomainIs("jcgeabjmjgoblfofpppfkcoakmfobdko") && origin.port() == 0) { - OriginTrialContext::FromOrCreate(document)->AddFeature( + document->GetOriginTrialContext()->AddFeature( OriginTrialFeature::kAutoPictureInPicture); } #endif
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc b/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc index cc384aa..cd22cb7 100644 --- a/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc +++ b/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc
@@ -72,6 +72,7 @@ #include "third_party/blink/renderer/platform/loader/testing/mock_resource.h" #include "third_party/blink/renderer/platform/network/network_state_notifier.h" #include "third_party/blink/renderer/platform/testing/histogram_tester.h" +#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" #include "third_party/blink/renderer/platform/weborigin/kurl.h" #include "third_party/blink/renderer/platform/weborigin/security_violation_reporting_policy.h" @@ -119,9 +120,23 @@ protected: void SetUp() override { RecreateFetchContext(); } - void RecreateFetchContext() { + void RecreateFetchContext(const KURL& url = KURL(), + const String& feature_policy_header = String()) { dummy_page_holder = std::make_unique<DummyPageHolder>(IntSize(500, 500)); dummy_page_holder->GetPage().SetDeviceScaleFactorDeprecated(1.0); + if (url.IsValid()) { + auto params = WebNavigationParams::CreateWithHTMLBuffer( + SharedBuffer::Create(), url); + if (!feature_policy_header.IsEmpty()) { + params->response.SetHttpHeaderField(http_names::kFeaturePolicy, + feature_policy_header); + } + dummy_page_holder->GetFrame().Loader().CommitNavigation( + std::move(params), nullptr /* extra_data */); + blink::test::RunPendingTasks(); + ASSERT_EQ(url.GetString(), + dummy_page_holder->GetDocument().Url().GetString()); + } document = &dummy_page_holder->GetDocument(); owner = MakeGarbageCollected<DummyFrameOwner>(); } @@ -259,9 +274,7 @@ class FrameFetchContextModifyRequestTest : public FrameFetchContextTest { public: FrameFetchContextModifyRequestTest() - : example_origin(SecurityOrigin::Create(KURL("https://example.test/"))), - secure_origin(SecurityOrigin::Create( - KURL("https://secureorigin.test/image.png"))) {} + : example_origin(SecurityOrigin::Create(KURL("https://example.test/"))) {} protected: void ModifyRequestForCSP(ResourceRequest& resource_request, @@ -324,13 +337,16 @@ void ExpectIsAutomaticUpgradeSet(const char* input, const char* main_frame, + WebInsecureRequestPolicy policy, bool expected_value) { const KURL input_url(input); const KURL main_frame_url(main_frame); ResourceRequest resource_request(input_url); resource_request.SetRequestContext(mojom::RequestContextType::SCRIPT); - document->SetSecurityOrigin(SecurityOrigin::Create(KURL(main_frame_url))); + RecreateFetchContext(main_frame_url); + document->SetInsecureRequestPolicy(policy); + ModifyRequestForCSP(resource_request, network::mojom::RequestContextFrameType::kNone); @@ -365,7 +381,6 @@ } scoped_refptr<const SecurityOrigin> example_origin; - scoped_refptr<SecurityOrigin> secure_origin; }; TEST_F(FrameFetchContextModifyRequestTest, UpgradeInsecureResourceRequests) { @@ -438,7 +453,7 @@ TEST_F(FrameFetchContextModifyRequestTest, DoNotUpgradeInsecureResourceRequests) { - document->SetSecurityOrigin(secure_origin); + RecreateFetchContext(KURL("https://secureorigin.test/image.png")); document->SetInsecureRequestPolicy(kLeaveInsecureRequestsAlone); ExpectUpgrade("http://example.test/image.png", @@ -465,26 +480,27 @@ TEST_F(FrameFetchContextModifyRequestTest, IsAutomaticUpgradeSet) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeature(features::kMixedContentAutoupgrade); - document->SetInsecureRequestPolicy(kLeaveInsecureRequestsAlone); ExpectIsAutomaticUpgradeSet("http://example.test/image.png", - "https://example.test", true); + "https://example.test", + kLeaveInsecureRequestsAlone, true); } TEST_F(FrameFetchContextModifyRequestTest, IsAutomaticUpgradeNotSet) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeature(features::kMixedContentAutoupgrade); - document->SetInsecureRequestPolicy(kLeaveInsecureRequestsAlone); // Upgrade shouldn't happen if the resource is already https. ExpectIsAutomaticUpgradeSet("https://example.test/image.png", - "https://example.test", false); + "https://example.test", + kLeaveInsecureRequestsAlone, false); // Upgrade shouldn't happen if the site is http. ExpectIsAutomaticUpgradeSet("http://example.test/image.png", - "http://example.test", false); + "http://example.test", + kLeaveInsecureRequestsAlone, false); - document->SetInsecureRequestPolicy(kUpgradeInsecureRequests); // Flag shouldn't be set if upgrade was due to upgrade-insecure-requests. ExpectIsAutomaticUpgradeSet("http://example.test/image.png", - "https://example.test", false); + "https://example.test", kUpgradeInsecureRequests, + false); } TEST_F(FrameFetchContextModifyRequestTest, SendUpgradeInsecureRequestHeader) { @@ -573,12 +589,8 @@ FrameFetchContextHintsTest() = default; void SetUp() override { - FrameFetchContextTest::SetUp(); // Set the document URL to a secure document. - document->SetURL(KURL("https://www.example.com/")); - document->SetSecurityOrigin( - SecurityOrigin::Create(KURL("https://www.example.com/"))); - document->InitializeFeaturePolicy({}, {}, nullptr, nullptr); + RecreateFetchContext(KURL("https://www.example.com/")); Settings* settings = document->GetSettings(); settings->SetScriptEnabled(true); } @@ -657,10 +669,8 @@ // Verify that client hints are attched when the resources belong to a local // context. TEST_F(FrameFetchContextHintsTest, MonitorDeviceMemoryHintsLocalContext) { - document->SetURL(KURL("http://localhost/")); - document->SetSecurityOrigin( - SecurityOrigin::Create(KURL("http://localhost/"))); - document->InitializeFeaturePolicy({}, {}, nullptr, nullptr); + RecreateFetchContext(KURL("http://localhost/")); + document->GetSettings()->SetScriptEnabled(true); ExpectHeader("http://localhost/1.gif", "Device-Memory", false, ""); ClientHintsPreferences preferences; preferences.SetShouldSendForTesting(mojom::WebClientHintsType::kDeviceMemory); @@ -898,13 +908,12 @@ // Verify that the client hints should be attached for third-party subresources // fetched over secure transport, when specifically allowed by feature policy. TEST_F(FrameFetchContextHintsTest, MonitorAllHintsFeaturePolicy) { - ParsedFeaturePolicy policy = FeaturePolicyParser::ParseHeader( + RecreateFetchContext( + KURL("https://www.example.com/"), "ch-dpr *; ch-device-memory *; ch-downlink *; ch-ect *; ch-lang *;" "ch-rtt *; ch-ua *; ch-ua-arch *; ch-ua-platform *; ch-ua-model *;" - "ch-viewport-width *; ch-width *", - SecurityOrigin::CreateFromString("https://www.example.com/"), nullptr, - document); - document->InitializeFeaturePolicy(policy, {}, nullptr, nullptr); + "ch-viewport-width *; ch-width *"); + document->GetSettings()->SetScriptEnabled(true); ClientHintsPreferences preferences; preferences.SetShouldSendForTesting(mojom::WebClientHintsType::kDeviceMemory); preferences.SetShouldSendForTesting(mojom::WebClientHintsType::kDpr); @@ -960,11 +969,9 @@ // Verify that only the specifically allowed client hints are attached for // third-party subresources fetched over secure transport. TEST_F(FrameFetchContextHintsTest, MonitorSomeHintsFeaturePolicy) { - ParsedFeaturePolicy policy = FeaturePolicyParser::ParseHeader( - "ch-device-memory 'self' https://www.example.net", - SecurityOrigin::CreateFromString("https://www.example.com/"), nullptr, - document); - document->InitializeFeaturePolicy(policy, {}, nullptr, nullptr); + RecreateFetchContext(KURL("https://www.example.com/"), + "ch-device-memory 'self' https://www.example.net"); + document->GetSettings()->SetScriptEnabled(true); ClientHintsPreferences preferences; preferences.SetShouldSendForTesting(mojom::WebClientHintsType::kDeviceMemory); preferences.SetShouldSendForTesting(mojom::WebClientHintsType::kDpr); @@ -995,11 +1002,8 @@ // fetched over insecure transport, even when specifically allowed by feature // policy. TEST_F(FrameFetchContextHintsTest, MonitorHintsFeaturePolicyInsecureContext) { - ParsedFeaturePolicy policy = FeaturePolicyParser::ParseHeader( - "ch-device-memory *", - SecurityOrigin::CreateFromString("https://www.example.com/"), nullptr, - document); - document->InitializeFeaturePolicy(policy, {}, nullptr, nullptr); + RecreateFetchContext(KURL("https://www.example.com/"), "ch-device-memory *"); + document->GetSettings()->SetScriptEnabled(true); ExpectHeader("https://www.example.com/1.gif", "Device-Memory", false, ""); ClientHintsPreferences preferences; preferences.SetShouldSendForTesting(mojom::WebClientHintsType::kDeviceMemory); @@ -1263,13 +1267,11 @@ } TEST_F(FrameFetchContextTest, SetFirstPartyCookieWhenDetached) { + const KURL document_url("https://www2.example.com/foo/bar"); + RecreateFetchContext(document_url); + const KURL url("https://www.example.com/hoge/fuga"); ResourceRequest request(url); - const KURL document_url("https://www2.example.com/foo/bar"); - scoped_refptr<SecurityOrigin> origin = SecurityOrigin::Create(document_url); - - document->SetSecurityOrigin(origin); - document->SetURL(document_url); dummy_page_holder = nullptr; @@ -1280,25 +1282,23 @@ } TEST_F(FrameFetchContextTest, TopFrameOrigin) { + const KURL document_url("https://www2.example.com/foo/bar"); + RecreateFetchContext(document_url); + const SecurityOrigin* origin = document->GetSecurityOrigin(); + const KURL url("https://www.example.com/hoge/fuga"); ResourceRequest request(url); - const KURL document_url("https://www2.example.com/foo/bar"); - scoped_refptr<SecurityOrigin> origin = SecurityOrigin::Create(document_url); - - document->SetSecurityOrigin(origin); - document->SetURL(document_url); EXPECT_EQ(origin, GetTopFrameOrigin()); } TEST_F(FrameFetchContextTest, TopFrameOriginDetached) { + const KURL document_url("https://www2.example.com/foo/bar"); + RecreateFetchContext(document_url); + const SecurityOrigin* origin = document->GetSecurityOrigin(); + const KURL url("https://www.example.com/hoge/fuga"); ResourceRequest request(url); - const KURL document_url("https://www2.example.com/foo/bar"); - scoped_refptr<SecurityOrigin> origin = SecurityOrigin::Create(document_url); - - document->SetSecurityOrigin(origin); - document->SetURL(document_url); dummy_page_holder = nullptr;
diff --git a/third_party/blink/renderer/core/loader/http_equiv.cc b/third_party/blink/renderer/core/loader/http_equiv.cc index 855add6..af0137a 100644 --- a/third_party/blink/renderer/core/loader/http_equiv.cc +++ b/third_party/blink/renderer/core/loader/http_equiv.cc
@@ -122,7 +122,7 @@ document.GetContentSecurityPolicy()->ReportMetaOutsideHead(content); } else if (EqualIgnoringASCIICase(equiv, http_names::kOriginTrial)) { if (in_document_head_element) - OriginTrialContext::FromOrCreate(&document)->AddToken(content); + document.GetOriginTrialContext()->AddToken(content); } }
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc index f1165de..1f74745 100644 --- a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc +++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc
@@ -94,34 +94,17 @@ } // namespace +OriginTrialContext::OriginTrialContext() + : OriginTrialContext(TrialTokenValidator::Policy() + ? std::make_unique<TrialTokenValidator>() + : nullptr) {} + OriginTrialContext::OriginTrialContext( - ExecutionContext& context, std::unique_ptr<TrialTokenValidator> validator) - : Supplement<ExecutionContext>(context), - trial_token_validator_(std::move(validator)) {} + : trial_token_validator_(std::move(validator)) {} -// static -const char OriginTrialContext::kSupplementName[] = "OriginTrialContext"; - -// static -const OriginTrialContext* OriginTrialContext::From( - const ExecutionContext* context) { - return Supplement<ExecutionContext>::From<OriginTrialContext>(context); -} - -// static -OriginTrialContext* OriginTrialContext::FromOrCreate( - ExecutionContext* context) { - OriginTrialContext* origin_trials = - Supplement<ExecutionContext>::From<OriginTrialContext>(context); - if (!origin_trials) { - origin_trials = MakeGarbageCollected<OriginTrialContext>( - *context, TrialTokenValidator::Policy() - ? std::make_unique<TrialTokenValidator>() - : nullptr); - Supplement<ExecutionContext>::ProvideTo(*context, origin_trials); - } - return origin_trials; +void OriginTrialContext::BindExecutionContext(ExecutionContext* context) { + context_ = context; } // static @@ -157,7 +140,8 @@ const Vector<String>* tokens) { if (!tokens || tokens->IsEmpty()) return; - FromOrCreate(context)->AddTokens(*tokens); + DCHECK(context && context->GetOriginTrialContext()); + context->GetOriginTrialContext()->AddTokens(*tokens); } // static @@ -166,13 +150,17 @@ const Vector<OriginTrialFeature>* features) { if (!features || features->IsEmpty()) return; - FromOrCreate(context)->ActivateNavigationFeaturesFromInitiator(*features); + DCHECK(context && context->GetOriginTrialContext()); + context->GetOriginTrialContext()->ActivateNavigationFeaturesFromInitiator( + *features); } // static std::unique_ptr<Vector<String>> OriginTrialContext::GetTokens( ExecutionContext* execution_context) { - const OriginTrialContext* context = From(execution_context); + DCHECK(execution_context); + const OriginTrialContext* context = + execution_context->GetOriginTrialContext(); if (!context || context->tokens_.IsEmpty()) return nullptr; return std::make_unique<Vector<String>>(context->tokens_); @@ -182,7 +170,9 @@ std::unique_ptr<Vector<OriginTrialFeature>> OriginTrialContext::GetEnabledNavigationFeatures( ExecutionContext* execution_context) { - const OriginTrialContext* context = From(execution_context); + DCHECK(execution_context); + const OriginTrialContext* context = + execution_context->GetOriginTrialContext(); return context ? context->GetEnabledNavigationFeatures() : nullptr; } @@ -204,7 +194,7 @@ if (token.IsEmpty()) return; tokens_.push_back(token); - if (EnableTrialFromToken(token)) { + if (EnableTrialFromToken(GetSecurityOrigin(), IsSecureContext(), token)) { // Only install pending features if the provided token is valid. Otherwise, // there was no change to the list of enabled features. InitializePendingFeatures(); @@ -212,13 +202,19 @@ } void OriginTrialContext::AddTokens(const Vector<String>& tokens) { + AddTokens(GetSecurityOrigin(), IsSecureContext(), tokens); +} + +void OriginTrialContext::AddTokens(const SecurityOrigin* origin, + bool is_secure, + const Vector<String>& tokens) { if (tokens.IsEmpty()) return; bool found_valid = false; for (const String& token : tokens) { if (!token.IsEmpty()) { tokens_.push_back(token); - if (EnableTrialFromToken(token)) + if (EnableTrialFromToken(origin, is_secure, token)) found_valid = true; } } @@ -242,7 +238,7 @@ void OriginTrialContext::InitializePendingFeatures() { if (!enabled_features_.size() && !navigation_activated_features_.size()) return; - auto* document = DynamicTo<Document>(GetSupplementable()); + auto* document = DynamicTo<Document>(context_.Get()); if (!document) return; LocalFrame* frame = document->GetFrame(); @@ -290,12 +286,12 @@ // For the purposes of origin trials, we consider imported documents to be // part of the master document. Thus, check if the trial is enabled in the // master document and use that result. - auto* document = DynamicTo<Document>(GetSupplementable()); + auto* document = DynamicTo<Document>(context_.Get()); if (!document || !document->IsHTMLImport()) return false; const OriginTrialContext* context = - OriginTrialContext::From(&document->MasterDocument()); + document->MasterDocument().GetOriginTrialContext(); if (!context) return false; return context->IsFeatureEnabled(feature); @@ -309,7 +305,9 @@ return navigation_activated_features_.Contains(feature); } -bool OriginTrialContext::EnableTrialFromToken(const String& token) { +bool OriginTrialContext::EnableTrialFromToken(const SecurityOrigin* origin, + bool is_secure, + const String& token) { DCHECK(!token.IsEmpty()); // Origin trials are only enabled for secure origins @@ -319,13 +317,6 @@ // - For the purpose of origin trials, we consider worklets as running in the // same context as the originating document. Thus, the special logic here // to validate the token against the document context. - bool is_secure = false; - ExecutionContext* context = GetSupplementable(); - if (auto* scope = DynamicTo<WorkletGlobalScope>(context)) { - is_secure = scope->DocumentSecureContext(); - } else { - is_secure = context->IsSecureContext(); - } if (!is_secure) { TokenValidationResultHistogram().Count( static_cast<int>(OriginTrialTokenStatus::kInsecure)); @@ -338,12 +329,6 @@ return false; } - const SecurityOrigin* origin; - if (auto* scope = DynamicTo<WorkletGlobalScope>(context)) - origin = scope->DocumentSecurityOrigin(); - else - origin = context->GetSecurityOrigin(); - bool valid = false; StringUTF8Adaptor token_string(token); std::string trial_name_str; @@ -374,7 +359,28 @@ } void OriginTrialContext::Trace(blink::Visitor* visitor) { - Supplement<ExecutionContext>::Trace(visitor); + visitor->Trace(context_); +} + +const SecurityOrigin* OriginTrialContext::GetSecurityOrigin() { + const SecurityOrigin* origin; + CHECK(context_); + if (auto* scope = DynamicTo<WorkletGlobalScope>(context_.Get())) + origin = scope->DocumentSecurityOrigin(); + else + origin = context_->GetSecurityOrigin(); + return origin; +} + +bool OriginTrialContext::IsSecureContext() { + bool is_secure = false; + CHECK(context_); + if (auto* scope = DynamicTo<WorkletGlobalScope>(context_.Get())) { + is_secure = scope->DocumentSecureContext(); + } else { + is_secure = context_->IsSecureContext(); + } + return is_secure; } } // namespace blink
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context.h b/third_party/blink/renderer/core/origin_trials/origin_trial_context.h index 9a6b2b3..acf07bca 100644 --- a/third_party/blink/renderer/core/origin_trials/origin_trial_context.h +++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context.h
@@ -9,7 +9,6 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/origin_trials/origin_trials.h" -#include "third_party/blink/renderer/platform/supplementable.h" #include "third_party/blink/renderer/platform/wtf/hash_set.h" #include "third_party/blink/renderer/platform/wtf/text/string_hash.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -34,22 +33,12 @@ // // For more information, see https://github.com/jpchase/OriginTrials. class CORE_EXPORT OriginTrialContext final - : public GarbageCollectedFinalized<OriginTrialContext>, - public Supplement<ExecutionContext> { - USING_GARBAGE_COLLECTED_MIXIN(OriginTrialContext); - + : public GarbageCollectedFinalized<OriginTrialContext> { public: - static const char kSupplementName[]; + OriginTrialContext(); + explicit OriginTrialContext(std::unique_ptr<TrialTokenValidator> validator); - OriginTrialContext(ExecutionContext&, std::unique_ptr<TrialTokenValidator>); - - // Returns the OriginTrialContext for a specific ExecutionContext, if one - // exists. - static const OriginTrialContext* From(const ExecutionContext*); - - // Returns the OriginTrialContext for a specific ExecutionContext, creating - // one if one does not already exist. - static OriginTrialContext* FromOrCreate(ExecutionContext*); + void BindExecutionContext(ExecutionContext*); // Parses an Origin-Trial header as specified in // https://jpchase.github.io/OriginTrials/#header into individual tokens. @@ -84,6 +73,9 @@ void AddToken(const String& token); void AddTokens(const Vector<String>& tokens); + void AddTokens(const SecurityOrigin* origin, + bool is_secure, + const Vector<String>& tokens); void ActivateNavigationFeaturesFromInitiator( const Vector<OriginTrialFeature>& features); @@ -117,23 +109,29 @@ // enabled. void InitializePendingFeatures(); - void Trace(blink::Visitor*) override; + void Trace(blink::Visitor*); private: // Validate the trial token. If valid, the trial named in the token is // added to the list of enabled trials. Returns true or false to indicate if // the token is valid. - bool EnableTrialFromToken(const String& token); + bool EnableTrialFromToken(const SecurityOrigin* origin, + bool is_secure, + const String& token); // Installs JavaScript bindings on the relevant objects for the specified // OriginTrialFeature. void InstallFeature(OriginTrialFeature, ScriptState*); + const SecurityOrigin* GetSecurityOrigin(); + bool IsSecureContext(); + Vector<String> tokens_; HashSet<OriginTrialFeature> enabled_features_; HashSet<OriginTrialFeature> installed_features_; HashSet<OriginTrialFeature> navigation_activated_features_; std::unique_ptr<TrialTokenValidator> trial_token_validator_; + Member<ExecutionContext> context_; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context_test.cc b/third_party/blink/renderer/core/origin_trials/origin_trial_context_test.cc index 28cee35..d758326 100644 --- a/third_party/blink/renderer/core/origin_trials/origin_trial_context_test.cc +++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context_test.cc
@@ -76,11 +76,10 @@ protected: OriginTrialContextTest() : ScopedOriginTrialsForTest(true), - execution_context_(MakeGarbageCollected<NullExecutionContext>()), token_validator_(new MockTokenValidator), - origin_trial_context_(MakeGarbageCollected<OriginTrialContext>( - *execution_context_, - std::unique_ptr<MockTokenValidator>(token_validator_))), + execution_context_(MakeGarbageCollected<NullExecutionContext>( + MakeGarbageCollected<OriginTrialContext>( + std::unique_ptr<MockTokenValidator>(token_validator_)))), histogram_tester_(new HistogramTester()) {} MockTokenValidator* TokenValidator() { return token_validator_; } @@ -96,17 +95,21 @@ bool IsFeatureEnabled(const String& origin, OriginTrialFeature feature) { UpdateSecurityOrigin(origin); // Need at least one token to ensure the token validator is called. - origin_trial_context_->AddToken(kTokenPlaceholder); - return origin_trial_context_->IsFeatureEnabled(feature); + execution_context_->GetOriginTrialContext()->AddToken(kTokenPlaceholder); + return execution_context_->GetOriginTrialContext()->IsFeatureEnabled( + feature); } std::unique_ptr<Vector<OriginTrialFeature>> GetEnabledNavigationFeatures() { - return origin_trial_context_->GetEnabledNavigationFeatures(); + return execution_context_->GetOriginTrialContext() + ->GetEnabledNavigationFeatures(); } bool ActivateNavigationFeature(OriginTrialFeature feature) { - origin_trial_context_->ActivateNavigationFeaturesFromInitiator({feature}); - return origin_trial_context_->IsNavigationFeatureActivated(feature); + execution_context_->GetOriginTrialContext() + ->ActivateNavigationFeaturesFromInitiator({feature}); + return execution_context_->GetOriginTrialContext() + ->IsNavigationFeatureActivated(feature); } void ExpectStatusUniqueMetric(OriginTrialTokenStatus status, int count) { @@ -119,9 +122,8 @@ } private: - Persistent<NullExecutionContext> execution_context_; MockTokenValidator* token_validator_; - Persistent<OriginTrialContext> origin_trial_context_; + Persistent<NullExecutionContext> execution_context_; std::unique_ptr<HistogramTester> histogram_tester_; }; @@ -242,7 +244,7 @@ // Create a dummy document with an OriginTrialContext. auto dummy = std::make_unique<DummyPageHolder>(); Document* document = &dummy->GetDocument(); - OriginTrialContext* context = OriginTrialContext::FromOrCreate(document); + OriginTrialContext* context = document->GetOriginTrialContext(); // Enable the sample origin trial API ("Frobulate"). context->AddFeature(OriginTrialFeature::kOriginTrialsSampleAPI);
diff --git a/third_party/blink/renderer/core/testing/null_execution_context.cc b/third_party/blink/renderer/core/testing/null_execution_context.cc index fedccd4..50ecfd8 100644 --- a/third_party/blink/renderer/core/testing/null_execution_context.cc +++ b/third_party/blink/renderer/core/testing/null_execution_context.cc
@@ -14,8 +14,11 @@ namespace blink { -NullExecutionContext::NullExecutionContext() - : ExecutionContext(v8::Isolate::GetCurrent(), nullptr), +NullExecutionContext::NullExecutionContext( + OriginTrialContext* origin_trial_context) + : ExecutionContext(v8::Isolate::GetCurrent(), + nullptr, + origin_trial_context), tasks_need_pause_(false), is_secure_context_(true), scheduler_(scheduler::CreateDummyFrameScheduler()) {}
diff --git a/third_party/blink/renderer/core/testing/null_execution_context.h b/third_party/blink/renderer/core/testing/null_execution_context.h index ab785d7..6d5a5888 100644 --- a/third_party/blink/renderer/core/testing/null_execution_context.h +++ b/third_party/blink/renderer/core/testing/null_execution_context.h
@@ -23,7 +23,7 @@ USING_GARBAGE_COLLECTED_MIXIN(NullExecutionContext); public: - NullExecutionContext(); + NullExecutionContext(OriginTrialContext* origin_trial_context = nullptr); ~NullExecutionContext() override; void SetURL(const KURL& url) { url_ = url; } @@ -68,6 +68,8 @@ void CountUse(mojom::WebFeature) override {} void CountDeprecation(mojom::WebFeature) override {} + void SetSandboxFlags(WebSandboxFlags flags) { sandbox_flags_ = flags; } + using SecurityContext::GetSecurityOrigin; using SecurityContext::GetContentSecurityPolicy;
diff --git a/third_party/blink/renderer/core/testing/page_test_base.cc b/third_party/blink/renderer/core/testing/page_test_base.cc index cd8f8ff6..1f5057d2 100644 --- a/third_party/blink/renderer/core/testing/page_test_base.cc +++ b/third_party/blink/renderer/core/testing/page_test_base.cc
@@ -114,10 +114,22 @@ UpdateAllLifecyclePhasesForTest(); } -void PageTestBase::NavigateTo(const KURL& url) { - GetFrame().Loader().CommitNavigation( - WebNavigationParams::CreateWithHTMLBuffer(SharedBuffer::Create(), url), - nullptr /* extra_data */); +void PageTestBase::NavigateTo(const KURL& url, + const String& feature_policy_header, + const String& csp_header) { + auto params = + WebNavigationParams::CreateWithHTMLBuffer(SharedBuffer::Create(), url); + if (!feature_policy_header.IsEmpty()) { + params->response.SetHttpHeaderField(http_names::kFeaturePolicy, + feature_policy_header); + } + if (!csp_header.IsEmpty()) { + params->response.SetHttpHeaderField(http_names::kContentSecurityPolicy, + csp_header); + } + GetFrame().Loader().CommitNavigation(std::move(params), + nullptr /* extra_data */); + blink::test::RunPendingTasks(); ASSERT_EQ(url.GetString(), GetDocument().Url().GetString()); }
diff --git a/third_party/blink/renderer/core/testing/page_test_base.h b/third_party/blink/renderer/core/testing/page_test_base.h index 41e34543..0ec948e7 100644 --- a/third_party/blink/renderer/core/testing/page_test_base.h +++ b/third_party/blink/renderer/core/testing/page_test_base.h
@@ -35,7 +35,9 @@ // Navigate to |url| providing an empty response but // URL and security origin of the Document will be set to |url|. - void NavigateTo(const KURL& url); + void NavigateTo(const KURL& url, + const String& feature_policy_header = String(), + const String& csp_header = String()); Document& GetDocument() const; Page& GetPage() const;
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc index 94cb6ec7..ea8ed8d0 100644 --- a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc +++ b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
@@ -14,6 +14,8 @@ #include "third_party/blink/renderer/bindings/core/v8/usv_string_or_trusted_url.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/core/dom/document.h" +#include "third_party/blink/renderer/core/dom/node.h" +#include "third_party/blink/renderer/core/dom/text.h" #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h" #include "third_party/blink/renderer/core/trustedtypes/trusted_html.h" #include "third_party/blink/renderer/core/trustedtypes/trusted_script.h" @@ -37,6 +39,8 @@ kTrustedScriptAssignmentAndDefaultPolicyFailed, kTrustedURLAssignmentAndDefaultPolicyFailed, kTrustedScriptURLAssignmentAndDefaultPolicyFailed, + kTextNodeScriptAssignment, + kTextNodeScriptAssignmentAndDefaultPolicyFailed, }; const char* GetMessage(TrustedTypeViolationKind kind) { @@ -63,6 +67,15 @@ case kTrustedScriptURLAssignmentAndDefaultPolicyFailed: return "This document requires 'TrustedScriptURL' assignment and the " "'default' policy failed to execute."; + case kTextNodeScriptAssignment: + return "This document requires 'TrustedScript' assignment, " + "and inserting a text node into a script element is equivalent to " + "a 'TrustedScript' assignment."; + case kTextNodeScriptAssignmentAndDefaultPolicyFailed: + return "This document requires 'TrustedScript' assignment. " + "Inserting a text node into a script element is equivalent to " + "a 'TrustedScript' assignment and the default policy failed to " + "execute."; } NOTREACHED(); return ""; @@ -379,4 +392,31 @@ return result->toString(); } +Node* TrustedTypesCheckForHTMLScriptElement(Node* child, + Document* doc, + ExceptionState& exception_state) { + bool require_trusted_type = RequireTrustedTypes(doc); + if (!require_trusted_type) + return child; + + TrustedTypePolicy* default_policy = GetDefaultPolicy(doc); + if (!default_policy) { + return TrustedTypeFail(kTextNodeScriptAssignment, doc, exception_state) + ? nullptr + : child; + } + + TrustedScript* result = default_policy->CreateScript( + doc->GetIsolate(), child->textContent(), exception_state); + if (exception_state.HadException()) { + exception_state.ClearException(); + return TrustedTypeFail(kTextNodeScriptAssignmentAndDefaultPolicyFailed, doc, + exception_state) + ? nullptr + : child; + } + + return Text::Create(*doc, result->toString()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h index 65c11816..4dac44bb 100644 --- a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h +++ b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h
@@ -10,8 +10,10 @@ namespace blink { +class Document; class ExecutionContext; class ExceptionState; +class Node; class StringOrTrustedHTML; class StringOrTrustedHTMLOrTrustedScriptOrTrustedScriptURLOrTrustedURL; class StringOrTrustedScript; @@ -58,6 +60,17 @@ String CORE_EXPORT GetStringFromTrustedURL(USVStringOrTrustedURL, const ExecutionContext*, ExceptionState&); + +// For <script> elements, we need to treat insertion of DOM text nodes +// as equivalent to string assignment. This checks the child-node to be +// inserted and runs all of the Trusted Types checks if it's a text node. +// +// Returns nullptr if the check failed, or the node to use (possibly child) +// if they succeeded. +Node* TrustedTypesCheckForHTMLScriptElement(Node* child, + Document*, + ExceptionState&); + } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_CORE_TRUSTEDTYPES_TRUSTED_TYPES_UTIL_H_
diff --git a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc index 11d0f134..0dfa5b3 100644 --- a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc +++ b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
@@ -18,6 +18,7 @@ #include "third_party/blink/renderer/core/loader/worker_fetch_context.h" #include "third_party/blink/renderer/core/loader/worker_resource_fetcher_properties.h" #include "third_party/blink/renderer/core/loader/worker_resource_timing_notifier_impl.h" +#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" #include "third_party/blink/renderer/core/probe/core_probes.h" #include "third_party/blink/renderer/core/script/fetch_client_settings_object_impl.h" #include "third_party/blink/renderer/core/workers/worker_global_scope.h" @@ -175,7 +176,9 @@ WorkerClients* worker_clients, scoped_refptr<WebWorkerFetchContext> web_worker_fetch_context, WorkerReportingProxy& reporting_proxy) - : ExecutionContext(isolate, agent), + : ExecutionContext(isolate, + agent, + MakeGarbageCollected<OriginTrialContext>()), off_main_thread_fetch_option_(off_main_thread_fetch_option), name_(name), parent_devtools_token_(parent_devtools_token),
diff --git a/third_party/blink/renderer/devtools/BUILD.gn b/third_party/blink/renderer/devtools/BUILD.gn index 9514347..94af9a4 100644 --- a/third_party/blink/renderer/devtools/BUILD.gn +++ b/third_party/blink/renderer/devtools/BUILD.gn
@@ -284,7 +284,6 @@ "front_end/event_listeners/module.json", "front_end/extensions/ExtensionAPI.js", "front_end/extensions/ExtensionPanel.js", - "front_end/extensions/ExtensionRegistryStub.js", "front_end/extensions/ExtensionServer.js", "front_end/extensions/ExtensionTraceProvider.js", "front_end/extensions/ExtensionView.js",
diff --git a/third_party/blink/renderer/devtools/front_end/extensions/ExtensionRegistryStub.js b/third_party/blink/renderer/devtools/front_end/extensions/ExtensionRegistryStub.js deleted file mode 100644 index 54c1824..0000000 --- a/third_party/blink/renderer/devtools/front_end/extensions/ExtensionRegistryStub.js +++ /dev/null
@@ -1,40 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -if (!window.InspectorExtensionRegistry) { - /** - * @unrestricted - */ - Extensions.InspectorExtensionRegistryStub = class { - getExtensionsAsync() { - } - }; - - self.InspectorExtensionRegistry = new Extensions.InspectorExtensionRegistryStub(); -}
diff --git a/third_party/blink/renderer/devtools/front_end/extensions/ExtensionServer.js b/third_party/blink/renderer/devtools/front_end/extensions/ExtensionServer.js index f633923b..666471a 100644 --- a/third_party/blink/renderer/devtools/front_end/extensions/ExtensionServer.js +++ b/third_party/blink/renderer/devtools/front_end/extensions/ExtensionServer.js
@@ -620,8 +620,6 @@ this._registerResourceContentCommittedHandler(this._notifyUISourceCodeContentCommitted); SDK.targetManager.addEventListener(SDK.TargetManager.Events.InspectedURLChanged, this._inspectedURLChanged, this); - - self.InspectorExtensionRegistry.getExtensionsAsync(); } _notifyResourceAdded(event) {
diff --git a/third_party/blink/renderer/devtools/front_end/extensions/module.json b/third_party/blink/renderer/devtools/front_end/extensions/module.json index 99337be..3d825f3 100644 --- a/third_party/blink/renderer/devtools/front_end/extensions/module.json +++ b/third_party/blink/renderer/devtools/front_end/extensions/module.json
@@ -6,7 +6,6 @@ ], "scripts": [ "ExtensionAPI.js", - "ExtensionRegistryStub.js", "ExtensionTraceProvider.js", "ExtensionServer.js", "ExtensionPanel.js",
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn index 0e3eeb4..4dd43aff 100644 --- a/third_party/blink/renderer/modules/BUILD.gn +++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -337,6 +337,7 @@ "mediastream/mock_mojo_media_stream_dispatcher_host.cc", "mediastream/mock_mojo_media_stream_dispatcher_host.h", "mediastream/video_track_adapter_unittest.cc", + "nfc/nfc_proxy_test.cc", "notifications/notification_data_test.cc", "notifications/notification_image_loader_test.cc", "notifications/notification_resources_loader_test.cc",
diff --git a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc index dca46716..f314727 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
@@ -420,21 +420,6 @@ return AXNodeObject::IsRichlyEditable(); } -bool AXLayoutObject::IsLineBreakingObject() const { - if (IsDetached()) - return AXNodeObject::IsLineBreakingObject(); - - const LayoutObject* layout_object = GetLayoutObject(); - if (layout_object->IsBR() || layout_object->IsLayoutBlock() || - layout_object->IsAnonymousBlock() || - (layout_object->IsLayoutBlockFlow() && - layout_object->StyleRef().IsDisplayBlockContainer())) { - return true; - } - - return AXNodeObject::IsLineBreakingObject(); -} - bool AXLayoutObject::IsLinked() const { if (!IsLinkable(*this)) return false; @@ -693,7 +678,7 @@ if (alt_text) return alt_text->IsEmpty(); - if (IsWebArea() || layout_object_->IsListMarkerIncludingNGInside()) + if (IsWebArea() || layout_object_->IsListMarkerIncludingNG()) return false; // Positioned elements and scrollable containers are important for @@ -2098,8 +2083,6 @@ return false; if (GetCSSAltText(GetNode())) return false; - if (layout_object_->IsListMarkerIncludingNGInside()) - return false; return AXNodeObject::CanHaveChildren(); }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_layout_object.h b/third_party/blink/renderer/modules/accessibility/ax_layout_object.h index 96868bd..df8445d 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_layout_object.h +++ b/third_party/blink/renderer/modules/accessibility/ax_layout_object.h
@@ -81,7 +81,6 @@ bool IsDefault() const override; bool IsEditable() const override; bool IsRichlyEditable() const override; - bool IsLineBreakingObject() const override; bool IsLinked() const override; bool IsLoaded() const override; bool IsOffScreen() const override;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index f4af7fd..a1743d2 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -489,7 +489,6 @@ parent_(nullptr), last_modification_count_(-1), cached_is_ignored_(false), - cached_is_ignored_pass_through_(false), cached_is_inert_or_aria_hidden_(false), cached_is_descendant_of_leaf_node_(false), cached_is_descendant_of_disabled_node_(false), @@ -863,21 +862,35 @@ } bool AXObject::AccessibilityIsIgnored() const { - UpdateDistributionForFlatTreeTraversal(); + Node* node = GetNode(); + if (!node) { + AXObject* parent = this->ParentObject(); + while (!node && parent) { + node = parent->GetNode(); + parent = parent->ParentObject(); + } + } + + if (node) + node->UpdateDistributionForFlatTreeTraversal(); + + // TODO(aboxhall): Instead of this, propagate inert down through frames + Document* document = GetDocument(); + while (document && document->LocalOwner()) { + document->LocalOwner()->UpdateDistributionForFlatTreeTraversal(); + document = document->LocalOwner()->ownerDocument(); + } + UpdateCachedAttributeValuesIfNeeded(); return cached_is_ignored_; } -bool AXObject::AccessibilityIsIgnoredButIncludedInTree() const { - UpdateDistributionForFlatTreeTraversal(); - UpdateCachedAttributeValuesIfNeeded(); - return cached_is_ignored_pass_through_; -} - -// AccessibilityIsIncludedInTree should be true for all nodes that should be -// included in the tree, even if they are ignored +// TODO(janewman) AccessibilityIsIncludedInTree should be true for all nodes +// that should be included in the tree, even if they are ignored bool AXObject::AccessibilityIsIncludedInTree() const { - return !AccessibilityIsIgnored() || AccessibilityIsIgnoredButIncludedInTree(); + // TODO(janewman) add DCHECK to ensure we do not disallow unignored nodes from + // being in the tree. + return !AccessibilityIsIgnored(); } void AXObject::UpdateCachedAttributeValuesIfNeeded() const { @@ -910,24 +923,12 @@ : nullptr); cached_aria_column_index_ = ComputeAriaColumnIndex(); cached_aria_row_index_ = ComputeAriaRowIndex(); - - bool ignored_states_changed = false; if (cached_is_ignored_ != LastKnownIsIgnoredValue()) { last_known_is_ignored_value_ = cached_is_ignored_ ? kIgnoreObject : kIncludeObject; - ignored_states_changed = true; - } - const bool new_is_ignored_pass_through = - cached_is_ignored_ && - ComputeAccessibilityIsIgnoredPassThrough(ignored_reasons); - if (cached_is_ignored_pass_through_ != new_is_ignored_pass_through) { - cached_is_ignored_pass_through_ = new_is_ignored_pass_through; - ignored_states_changed = true; - } - - if (ignored_states_changed) { - if (AXObject* parent = ParentObjectIfExists()) + AXObject* parent = ParentObjectIfExists(); + if (parent) parent->ChildrenChanged(); } @@ -1172,21 +1173,6 @@ return nullptr; } -bool AXObject::ComputeAccessibilityIsIgnoredPassThrough( - const IgnoredReasons& ignored_reasons) const { - if (!GetNode()) - return false; - - // Always pass through Line Breaking objects, this is necessary to - // detect paragraph edges, which are defined as hard-line breaks. - // - // Though if the node is part of the shadow dom, or has the explicit - // internal Role::kIgnored, they aren't interesting for paragraph - // navigation so exclude those cases. - return RoleValue() != ax::mojom::Role::kIgnored && - !GetNode()->IsInShadowTree() && IsLineBreakingObject(); -} - const AXObject* AXObject::DatetimeAncestor(int max_levels_to_check) const { switch (RoleValue()) { case ax::mojom::Role::kDateTime: @@ -1305,27 +1291,6 @@ AncestorExposesActiveDescendant(); } -void AXObject::UpdateDistributionForFlatTreeTraversal() const { - Node* node = GetNode(); - if (!node) { - AXObject* parent = this->ParentObject(); - while (!node && parent) { - node = parent->GetNode(); - parent = parent->ParentObject(); - } - } - - if (node) - node->UpdateDistributionForFlatTreeTraversal(); - - // TODO(aboxhall): Instead of this, propagate inert down through frames - Document* document = GetDocument(); - while (document && document->LocalOwner()) { - document->LocalOwner()->UpdateDistributionForFlatTreeTraversal(); - document = document->LocalOwner()->ownerDocument(); - } -} - bool AXObject::IsARIAControlledByTextboxWithActiveDescendant() const { // This situation should mostly arise when using an active descendant on a // textbox inside an ARIA 1.1 combo box widget, which points to the selected @@ -1923,14 +1888,11 @@ } int AXObject::IndexInParent() const { - DCHECK(AccessibilityIsIncludedInTree()) - << "IndexInParent is only valid when a node is included in the tree"; - if (!ParentObjectIncludedInTree()) + if (!ParentObjectUnignored()) return 0; - const AXObjectVector& siblings = ParentObjectIncludedInTree()->Children(); + const AXObjectVector& siblings = ParentObjectUnignored()->Children(); wtf_size_t index = siblings.Find(this); - DCHECK(index != kNotFound); return (index == kNotFound) ? 0 : static_cast<int>(index); } @@ -2188,59 +2150,29 @@ } AXObject* AXObject::NextSibling() const { + AXObject* parent = ParentObjectUnignored(); + if (!parent) + return nullptr; + if (AccessibilityIsIgnored()) NOTREACHED() << "We don't support finding siblings for ignored objects."; - // Find the ancestor which is a direct descendant of the unignored object, - // and use its IndexInParent, which is invalid for out-of-tree nodes. - const AXObject* parent_unignored = nullptr; - const AXObject* child_of_unignored = this; - while (child_of_unignored) { - const AXObject* parent = child_of_unignored->ParentObjectIncludedInTree(); - if (parent && !parent->AccessibilityIsIgnored()) { - parent_unignored = parent; - break; - } - - child_of_unignored = parent; - } - - if (parent_unignored && child_of_unignored) { - const int index_in_parent_unignored = child_of_unignored->IndexInParent(); - if (index_in_parent_unignored < parent_unignored->ChildCount() - 1) { - return *(parent_unignored->Children().begin() + - index_in_parent_unignored + 1); - } - } + if (IndexInParent() < parent->ChildCount() - 1) + return *(parent->Children().begin() + IndexInParent() + 1); return nullptr; } AXObject* AXObject::PreviousSibling() const { + AXObject* parent = ParentObjectUnignored(); + if (!parent) + return nullptr; + if (AccessibilityIsIgnored()) NOTREACHED() << "We don't support finding siblings for ignored objects."; - // Find the ancestor which is a direct descendant of the unignored object, - // and use its IndexInParent, which is invalid for out-of-tree nodes. - const AXObject* parent_unignored = nullptr; - const AXObject* child_of_unignored = this; - while (child_of_unignored) { - const AXObject* parent = child_of_unignored->ParentObjectIncludedInTree(); - if (parent && !parent->AccessibilityIsIgnored()) { - parent_unignored = parent; - break; - } - - child_of_unignored = parent; - } - - if (parent_unignored && child_of_unignored) { - const int index_in_parent_unignored = child_of_unignored->IndexInParent(); - if (index_in_parent_unignored > 0) { - return *(parent_unignored->Children().begin() + - index_in_parent_unignored - 1); - } - } + if (IndexInParent() > 0) + return *(parent->Children().begin() + IndexInParent() - 1); return nullptr; } @@ -2317,16 +2249,6 @@ return parent; } -AXObject* AXObject::ParentObjectIncludedInTree() const { - AXObject* parent; - for (parent = ParentObject(); - parent && !parent->AccessibilityIsIncludedInTree(); - parent = parent->ParentObject()) { - } - - return parent; -} - // Container widgets are those that a user tabs into and arrows around // sub-widgets bool AXObject::IsContainerWidget() const { @@ -3430,12 +3352,12 @@ HeapVector<Member<const AXObject>> ancestors1; ancestors1.push_back(&first); while (ancestors1.back()) - ancestors1.push_back(ancestors1.back()->ParentObjectIncludedInTree()); + ancestors1.push_back(ancestors1.back()->ParentObjectUnignored()); HeapVector<Member<const AXObject>> ancestors2; ancestors2.push_back(&second); while (ancestors2.back()) - ancestors2.push_back(ancestors2.back()->ParentObjectIncludedInTree()); + ancestors2.push_back(ancestors2.back()->ParentObjectUnignored()); const AXObject* common_ancestor = nullptr; while (!ancestors1.IsEmpty() && !ancestors2.IsEmpty() &&
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h index 7b65659..2df6e99 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -478,7 +478,6 @@ return kGrabbedStateUndefined; } virtual bool IsHovered() const { return false; } - virtual bool IsLineBreakingObject() const { return false; } virtual bool IsLinked() const { return false; } virtual bool IsLoaded() const { return false; } virtual bool IsModal() const { return false; } @@ -499,9 +498,9 @@ bool CanSetValueAttribute() const; // Whether objects are ignored, i.e. hidden from the AT. + // TODO(janewman) Ignored nodes that are included in the tree should be marked + // with ax::mojom::State::kIgnored bool AccessibilityIsIgnored() const; - // Whether objects are ignored but included in the tree. - bool AccessibilityIsIgnoredButIncludedInTree() const; // Whether objects are included in the tree. Nodes that are included in the // tree are serialized, even if they are ignored. This allows browser-side @@ -523,8 +522,6 @@ bool IsDescendantOfLeafNode() const; AXObject* LeafNodeAncestor() const; bool IsDescendantOfDisabledNode() const; - bool ComputeAccessibilityIsIgnoredPassThrough( - const IgnoredReasons& ignored_reasons) const; const AXObject* DatetimeAncestor(int max_levels_to_check = 3) const; const AXObject* DisabledAncestor() const; bool LastKnownIsIgnoredValue() const; @@ -813,7 +810,6 @@ virtual AXObject* ComputeParentIfExists() const { return nullptr; } AXObject* CachedParentObject() const { return parent_; } AXObject* ParentObjectUnignored() const; - AXObject* ParentObjectIncludedInTree() const; AXObject* ContainerWidget() const; bool IsContainerWidget() const; @@ -1042,7 +1038,6 @@ mutable int last_modification_count_; mutable RGBA32 cached_background_color_; mutable bool cached_is_ignored_ : 1; - mutable bool cached_is_ignored_pass_through_ : 1; mutable bool cached_is_inert_or_aria_hidden_ : 1; mutable bool cached_is_descendant_of_leaf_node_ : 1; @@ -1062,7 +1057,6 @@ void UpdateCachedAttributeValuesIfNeeded() const; private: - void UpdateDistributionForFlatTreeTraversal() const; bool IsARIAControlledByTextboxWithActiveDescendant() const; bool AncestorExposesActiveDescendant() const; bool IsCheckable() const;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc index beb0efc..27b114f 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -520,6 +520,7 @@ inline_text_box_object_mapping_.Set(inline_text_box, axid); new_obj->Init(); new_obj->SetLastKnownIsIgnoredValue(new_obj->AccessibilityIsIgnored()); + return new_obj; } @@ -826,10 +827,10 @@ // hidden element's focusable state changes, it's ignored state must be // recomputed. ChildrenChangedWithCleanLayout(element->parentNode()); + } else { + // Refresh the focusable state on the exposed object. + MarkAXObjectDirty(obj, false); } - - // Refresh the focusable state and State::kIgnored on the exposed object. - MarkAXObjectDirty(obj, false); } void AXObjectCacheImpl::DocumentTitleChanged() {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_test.cc b/third_party/blink/renderer/modules/accessibility/ax_object_test.cc index 480d0d7..dd2de0bc 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_test.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object_test.cc
@@ -45,7 +45,7 @@ <p id="paragraph">hello<br id="br">there</p> <button id="button">button</button>)HTML"); - const AXObject* root = GetAXRootObject()->FirstChild(); + const AXObject* root = GetAXRootObject(); ASSERT_NE(nullptr, root); const AXObject* input = GetAXObjectByElementId("input"); ASSERT_NE(nullptr, input); @@ -71,8 +71,8 @@ EXPECT_EQ(ax::mojom::Role::kStaticText, paragraph->DeepestLastChild()->RoleValue()); - EXPECT_EQ(nullptr, paragraph->PreviousSibling()); - EXPECT_EQ(nullptr, input->NextSibling()); + EXPECT_EQ(paragraph->PreviousSibling(), input); + EXPECT_EQ(paragraph, input->NextSibling()); ASSERT_NE(nullptr, br->NextSibling()); EXPECT_EQ(ax::mojom::Role::kStaticText, br->NextSibling()->RoleValue()); ASSERT_NE(nullptr, br->PreviousSibling());
diff --git a/third_party/blink/renderer/modules/accessibility/ax_position.cc b/third_party/blink/renderer/modules/accessibility/ax_position.cc index ca52113..27464e9 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_position.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_position.cc
@@ -36,7 +36,7 @@ if (child.IsTextObject()) return CreateFirstPositionInObject(child, adjustment_behavior); - const AXObject* parent = child.ParentObjectIncludedInTree(); + const AXObject* parent = child.ParentObjectUnignored(); DCHECK(parent); AXPosition position(*parent); position.text_offset_or_child_index_ = child.IndexInParent(); @@ -58,7 +58,7 @@ if (child.IsTextObject()) return CreateLastPositionInObject(child, adjustment_behavior); - const AXObject* parent = child.ParentObjectIncludedInTree(); + const AXObject* parent = child.ParentObjectUnignored(); DCHECK(parent); AXPosition position(*parent); position.text_offset_or_child_index_ = child.IndexInParent() + 1; @@ -83,10 +83,9 @@ // If the container is not a text object, creating a position inside an // ignored container might result in an invalid position, because child count // is inaccurate. - const AXObject* unignored_container = - !container.AccessibilityIsIncludedInTree() - ? container.ParentObjectIncludedInTree() - : &container; + const AXObject* unignored_container = container.AccessibilityIsIgnored() + ? container.ParentObjectUnignored() + : &container; DCHECK(unignored_container); AXPosition position(*unignored_container); position.text_offset_or_child_index_ = 0; @@ -111,10 +110,9 @@ // If the container is not a text object, creating a position inside an // ignored container might result in an invalid position, because child count // is inaccurate. - const AXObject* unignored_container = - !container.AccessibilityIsIncludedInTree() - ? container.ParentObjectIncludedInTree() - : &container; + const AXObject* unignored_container = container.AccessibilityIsIgnored() + ? container.ParentObjectUnignored() + : &container; DCHECK(unignored_container); AXPosition position(*unignored_container); position.text_offset_or_child_index_ = unignored_container->ChildCount(); @@ -165,7 +163,7 @@ return {}; if (container_node->IsTextNode()) { - if (!container->AccessibilityIsIncludedInTree()) { + if (container->AccessibilityIsIgnored()) { // Find the closest DOM sibling that is unignored in the accessibility // tree. switch (adjustment_behavior) { @@ -180,10 +178,10 @@ // Do the next best thing by moving up to the unignored parent if it // exists. - if (!container || !container->ParentObjectIncludedInTree()) + if (!container || !container->ParentObjectUnignored()) return {}; - return CreateLastPositionInObject( - *container->ParentObjectIncludedInTree(), adjustment_behavior); + return CreateLastPositionInObject(*container->ParentObjectUnignored(), + adjustment_behavior); } case AXPositionAdjustmentBehavior::kMoveLeft: { @@ -197,10 +195,10 @@ // Do the next best thing by moving up to the unignored parent if it // exists. - if (!container || !container->ParentObjectIncludedInTree()) + if (!container || !container->ParentObjectUnignored()) return {}; return CreateFirstPositionInObject( - *container->ParentObjectIncludedInTree(), adjustment_behavior); + *container->ParentObjectUnignored(), adjustment_behavior); } } } @@ -223,8 +221,8 @@ } DCHECK(container_node->IsContainerNode()); - if (!container->AccessibilityIsIncludedInTree()) { - container = container->ParentObjectIncludedInTree(); + if (container->AccessibilityIsIgnored()) { + container = container->ParentObjectUnignored(); if (!container) return {}; @@ -246,7 +244,7 @@ // |ax_child| might be nullptr because not all DOM nodes can have AX // objects. For example, the "head" element has no corresponding AX // object. - if (!ax_child || !ax_child->AccessibilityIsIncludedInTree()) { + if (!ax_child || ax_child->AccessibilityIsIgnored()) { // Find the closest DOM sibling that is present and unignored in the // accessibility tree. switch (adjustment_behavior) { @@ -445,14 +443,14 @@ const AXObject* child = ChildAfterTreePosition(); if (!child) { const AXObject* next_in_order = container_object_->NextInTreeObject(); - if (!next_in_order || !next_in_order->ParentObjectIncludedInTree()) + if (!next_in_order || !next_in_order->ParentObjectUnignored()) return {}; return CreatePositionBeforeObject(*next_in_order, AXPositionAdjustmentBehavior::kMoveRight); } - if (!child->ParentObjectIncludedInTree()) + if (!child->ParentObjectUnignored()) return {}; return CreatePositionAfterObject(*child, @@ -492,7 +490,7 @@ } if (!object_before_position || - !object_before_position->ParentObjectIncludedInTree()) { + !object_before_position->ParentObjectUnignored()) { return {}; } @@ -541,17 +539,17 @@ // Case 1. // Neither text positions nor "after children" positions have a |child| // object. - if (!container->AccessibilityIsIncludedInTree() && child) { + if (container->AccessibilityIsIgnored() && child) { // |CreatePositionBeforeObject| already finds the unignored parent before // creating the new position, so we don't need to replicate the logic here. return CreatePositionBeforeObject(*child, adjustment_behavior); } // Cases 2 and 3. - if (!container->AccessibilityIsIncludedInTree()) { + if (container->AccessibilityIsIgnored()) { // Case 2. if (IsTextPosition()) { - if (!container->ParentObjectIncludedInTree()) + if (!container->ParentObjectUnignored()) return {}; // Calling |CreateNextPosition| or |CreatePreviousPosition| is not @@ -560,11 +558,11 @@ // any unignored siblings. switch (adjustment_behavior) { case AXPositionAdjustmentBehavior::kMoveRight: - return CreateLastPositionInObject( - *container->ParentObjectIncludedInTree(), adjustment_behavior); + return CreateLastPositionInObject(*container->ParentObjectUnignored(), + adjustment_behavior); case AXPositionAdjustmentBehavior::kMoveLeft: return CreateFirstPositionInObject( - *container->ParentObjectIncludedInTree(), adjustment_behavior); + *container->ParentObjectUnignored(), adjustment_behavior); } } @@ -579,7 +577,7 @@ } // Case 4. - if (child && !child->AccessibilityIsIncludedInTree()) { + if (child && child->AccessibilityIsIgnored()) { switch (adjustment_behavior) { case AXPositionAdjustmentBehavior::kMoveRight: return CreateLastPositionInObject(*container); @@ -659,7 +657,7 @@ ax_object_cache_impl.GetOrCreate(container_node); DCHECK(new_container); AXPosition position(*new_container); - if (new_container == container->ParentObjectIncludedInTree()) { + if (new_container == container->ParentObjectUnignored()) { position.text_offset_or_child_index_ = container->IndexInParent(); } else { switch (adjustment_behavior) { @@ -790,7 +788,7 @@ *next_node, container_node))) { const AXObject* next_object = ax_object_cache_impl->GetOrCreate(next_node); - if (next_object && next_object->AccessibilityIsIncludedInTree()) + if (next_object && !next_object->AccessibilityIsIgnored()) return next_object; } return nullptr; @@ -802,7 +800,7 @@ *previous_node, container_node))) { const AXObject* previous_object = ax_object_cache_impl->GetOrCreate(previous_node); - if (previous_object && previous_object->AccessibilityIsIncludedInTree()) + if (previous_object && !previous_object->AccessibilityIsIgnored()) return previous_object; } return nullptr;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_position_test.cc b/third_party/blink/renderer/modules/accessibility/ax_position_test.cc index cf32e0b8..f521f7a 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_position_test.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_position_test.cc
@@ -316,10 +316,10 @@ SetBodyInnerHTML(R"HTML(<input id="input" type="text" value="value"> <p id="paragraph">hello<br>there</p>)HTML"); - const AXObject* body = GetAXRootObject()->FirstChild(); - ASSERT_NE(nullptr, body); - const auto root_first = AXPosition::CreateFirstPositionInObject(*body); - const auto root_last = AXPosition::CreateLastPositionInObject(*body); + const AXObject* root = GetAXRootObject(); + ASSERT_NE(nullptr, root); + const auto root_first = AXPosition::CreateFirstPositionInObject(*root); + const auto root_last = AXPosition::CreateLastPositionInObject(*root); const AXObject* input = GetAXObjectByElementId("input"); ASSERT_NE(nullptr, input); @@ -674,10 +674,9 @@ const Node* paragraph = GetElementById("paragraph"); ASSERT_NE(nullptr, paragraph); - const AXObject* ax_body = GetAXRootObject()->FirstChild(); - ASSERT_NE(nullptr, ax_body); - ASSERT_EQ(ax::mojom::Role::kGenericContainer, ax_body->RoleValue()); - + const AXObject* ax_root = GetAXRootObject(); + ASSERT_NE(nullptr, ax_root); + ASSERT_EQ(ax::mojom::Role::kRootWebArea, ax_root->RoleValue()); // The HTML label element should be ignored. const AXObject* ax_label = GetAXObjectByElementId("label"); ASSERT_NE(nullptr, ax_label); @@ -699,7 +698,7 @@ AXPosition::FromPosition(position, TextAffinity::kDownstream, AXPositionAdjustmentBehavior::kMoveLeft); EXPECT_FALSE(ax_position.IsTextPosition()); - EXPECT_EQ(ax_body, ax_position.ContainerObject()); + EXPECT_EQ(ax_root, ax_position.ContainerObject()); EXPECT_EQ(0, ax_position.ChildIndex()); EXPECT_EQ(ax_paragraph, ax_position.ChildAfterTreePosition()); @@ -730,17 +729,7 @@ ASSERT_NE(nullptr, ax_root); ASSERT_EQ(ax::mojom::Role::kRootWebArea, ax_root->RoleValue()); ASSERT_EQ(1, ax_root->ChildCount()); - - const AXObject* ax_body = ax_root->FirstChild(); - ASSERT_NE(nullptr, ax_body); - ASSERT_EQ(ax::mojom::Role::kGenericContainer, ax_body->RoleValue()); - ASSERT_EQ(1, ax_body->ChildCount()); - - const AXObject* ax_hidden = GetAXObjectByElementId("hidden"); - ASSERT_NE(nullptr, ax_hidden); - ASSERT_EQ(ax::mojom::Role::kGenericContainer, ax_hidden->RoleValue()); - - const AXObject* ax_visible = GetAXObjectByElementId("visible"); + const AXObject* ax_visible = ax_root->FirstChild(); ASSERT_NE(nullptr, ax_visible); ASSERT_EQ(ax::mojom::Role::kParagraph, ax_visible->RoleValue()); @@ -769,23 +758,22 @@ const auto ax_position_first = AXPosition::CreateFirstPositionInObject(*ax_root); const auto position_first = ax_position_first.ToPositionWithAffinity(); - EXPECT_EQ(GetDocument().body()->parentElement(), position_first.AnchorNode()); + EXPECT_EQ(GetDocument().body(), position_first.AnchorNode()); EXPECT_FALSE(position_first.GetPosition().IsBeforeChildren()); - EXPECT_EQ(1, position_first.GetPosition().OffsetInContainerNode()); - EXPECT_EQ(GetDocument().body(), - position_first.GetPosition().ComputeNodeAfterPosition()); + EXPECT_EQ(2, position_first.GetPosition().OffsetInContainerNode()); + EXPECT_EQ(visible, position_first.GetPosition().ComputeNodeAfterPosition()); const auto ax_position_first_from_dom = AXPosition::FromPosition(position_first); EXPECT_EQ(ax_position_first, ax_position_first_from_dom); - EXPECT_EQ(ax_body, ax_position_first_from_dom.ChildAfterTreePosition()); + EXPECT_EQ(ax_visible, ax_position_first_from_dom.ChildAfterTreePosition()); // A DOM position before |hidden| should convert to an accessibility position // before |visible|. const auto position_before = Position::BeforeNode(*hidden); const auto ax_position_before_from_dom = AXPosition::FromPosition(position_before); - EXPECT_EQ(ax_body, ax_position_before_from_dom.ContainerObject()); + EXPECT_EQ(ax_root, ax_position_before_from_dom.ContainerObject()); EXPECT_EQ(0, ax_position_before_from_dom.ChildIndex()); EXPECT_EQ(ax_visible, ax_position_before_from_dom.ChildAfterTreePosition()); @@ -794,7 +782,7 @@ const auto position_after = Position::AfterNode(*hidden); const auto ax_position_after_from_dom = AXPosition::FromPosition(position_after); - EXPECT_EQ(ax_body, ax_position_after_from_dom.ContainerObject()); + EXPECT_EQ(ax_root, ax_position_after_from_dom.ContainerObject()); EXPECT_EQ(0, ax_position_after_from_dom.ChildIndex()); EXPECT_EQ(ax_visible, ax_position_after_from_dom.ChildAfterTreePosition()); } @@ -803,7 +791,7 @@ // Aria-hidden can cause things in the DOM to be hidden from accessibility. // -TEST_F(AccessibilityTest, BeforePositionInARIAHiddenShouldNotSkipARIAHidden) { +TEST_F(AccessibilityTest, BeforePositionInARIAHiddenShouldSkipARIAHidden) { SetBodyInnerHTML(R"HTML( <div role="main" id="container"> <p id="before">Before aria-hidden.</p> @@ -816,8 +804,6 @@ ASSERT_NE(nullptr, container); const Node* after = GetElementById("after"); ASSERT_NE(nullptr, after); - const Node* hidden = GetElementById("ariaHidden"); - ASSERT_NE(nullptr, hidden); const AXObject* ax_before = GetAXObjectByElementId("before"); ASSERT_NE(nullptr, ax_before); @@ -825,19 +811,18 @@ const AXObject* ax_after = GetAXObjectByElementId("after"); ASSERT_NE(nullptr, ax_after); ASSERT_EQ(ax::mojom::Role::kParagraph, ax_after->RoleValue()); - const AXObject* ax_hidden = GetAXObjectByElementId("ariaHidden"); - ASSERT_NE(nullptr, ax_hidden); - ASSERT_TRUE(ax_hidden->AccessibilityIsIgnored()); + ASSERT_NE(nullptr, GetAXObjectByElementId("ariaHidden")); + ASSERT_TRUE(GetAXObjectByElementId("ariaHidden")->AccessibilityIsIgnored()); const auto ax_position = AXPosition::CreatePositionAfterObject(*ax_before); const auto position = ax_position.ToPositionWithAffinity(); EXPECT_EQ(container, position.AnchorNode()); - EXPECT_EQ(3, position.GetPosition().OffsetInContainerNode()); - EXPECT_EQ(hidden, position.GetPosition().ComputeNodeAfterPosition()); + EXPECT_EQ(5, position.GetPosition().OffsetInContainerNode()); + EXPECT_EQ(after, position.GetPosition().ComputeNodeAfterPosition()); const auto ax_position_from_dom = AXPosition::FromPosition(position); EXPECT_EQ(ax_position, ax_position_from_dom); - EXPECT_EQ(ax_hidden, ax_position_from_dom.ChildAfterTreePosition()); + EXPECT_EQ(ax_after, ax_position_from_dom.ChildAfterTreePosition()); } TEST_F(AccessibilityTest, PreviousPositionAfterARIAHiddenShouldSkipARIAHidden) { @@ -872,13 +857,14 @@ const auto ax_position_previous = ax_position.CreatePreviousPosition(); const auto position_previous = ax_position_previous.ToPositionWithAffinity(); - EXPECT_EQ(nullptr, position_previous.AnchorNode()); - EXPECT_EQ(0, position_previous.GetPosition().OffsetInContainerNode()); + EXPECT_EQ(before->firstChild(), position_previous.AnchorNode()); + EXPECT_EQ(19, position_previous.GetPosition().OffsetInContainerNode()); EXPECT_EQ(nullptr, position_previous.GetPosition().ComputeNodeAfterPosition()); const auto ax_position_previous_from_dom = AXPosition::FromPosition(position_previous); + EXPECT_EQ(ax_position_previous, ax_position_previous_from_dom); EXPECT_EQ(nullptr, ax_position_previous_from_dom.ChildAfterTreePosition()); } @@ -897,7 +883,7 @@ const AXObject* ax_container = GetAXObjectByElementId("container"); ASSERT_NE(nullptr, ax_container); ASSERT_EQ(ax::mojom::Role::kMain, ax_container->RoleValue()); - ASSERT_EQ(3, ax_container->ChildCount()); + ASSERT_EQ(2, ax_container->ChildCount()); const AXObject* ax_before = GetAXObjectByElementId("before"); ASSERT_NE(nullptr, ax_before); ASSERT_EQ(ax::mojom::Role::kParagraph, ax_before->RoleValue()); @@ -905,68 +891,41 @@ ASSERT_NE(nullptr, ax_after); ASSERT_EQ(ax::mojom::Role::kParagraph, ax_after->RoleValue()); ASSERT_NE(nullptr, GetAXObjectByElementId("ariaHidden")); - const AXObject* ax_hidden = GetAXObjectByElementId("ariaHidden"); - ASSERT_TRUE(ax_hidden->AccessibilityIsIgnored()); + ASSERT_TRUE(GetAXObjectByElementId("ariaHidden")->AccessibilityIsIgnored()); const auto position_first = Position::FirstPositionInNode(*hidden); - auto ax_position_left = - AXPosition::FromPosition(position_first, TextAffinity::kDownstream, - AXPositionAdjustmentBehavior::kMoveLeft); - EXPECT_TRUE(ax_position_left.IsValid()); - EXPECT_FALSE(ax_position_left.IsTextPosition()); - EXPECT_EQ(ax_hidden, ax_position_left.ContainerObject()); - EXPECT_EQ(0, ax_position_left.ChildIndex()); - // This is an "after children" position. - EXPECT_EQ(nullptr, ax_position_left.ChildAfterTreePosition()); - - auto ax_position_right = - AXPosition::FromPosition(position_first, TextAffinity::kDownstream, - AXPositionAdjustmentBehavior::kMoveRight); - EXPECT_TRUE(ax_position_right.IsValid()); - EXPECT_FALSE(ax_position_right.IsTextPosition()); - EXPECT_EQ(ax_hidden, ax_position_right.ContainerObject()); - EXPECT_EQ(0, ax_position_right.ChildIndex()); - EXPECT_EQ(nullptr, ax_position_right.ChildAfterTreePosition()); - const auto position_before = Position::BeforeNode(*hidden); - ax_position_left = - AXPosition::FromPosition(position_before, TextAffinity::kDownstream, - AXPositionAdjustmentBehavior::kMoveLeft); - EXPECT_TRUE(ax_position_left.IsValid()); - EXPECT_FALSE(ax_position_left.IsTextPosition()); - EXPECT_EQ(ax_container, ax_position_left.ContainerObject()); - EXPECT_EQ(1, ax_position_left.ChildIndex()); - // This is an "after children" position. - EXPECT_EQ(ax_hidden, ax_position_left.ChildAfterTreePosition()); - - ax_position_right = - AXPosition::FromPosition(position_before, TextAffinity::kDownstream, - AXPositionAdjustmentBehavior::kMoveRight); - EXPECT_TRUE(ax_position_right.IsValid()); - EXPECT_FALSE(ax_position_right.IsTextPosition()); - EXPECT_EQ(ax_container, ax_position_right.ContainerObject()); - EXPECT_EQ(1, ax_position_right.ChildIndex()); - EXPECT_EQ(ax_hidden, ax_position_right.ChildAfterTreePosition()); - const auto position_after = Position::AfterNode(*hidden); - ax_position_left = - AXPosition::FromPosition(position_after, TextAffinity::kDownstream, - AXPositionAdjustmentBehavior::kMoveLeft); - EXPECT_TRUE(ax_position_left.IsValid()); - EXPECT_FALSE(ax_position_left.IsTextPosition()); - EXPECT_EQ(ax_hidden, ax_position_left.ContainerObject()); - EXPECT_EQ(0, ax_position_left.ChildIndex()); - // This is an "after children" position. - EXPECT_EQ(nullptr, ax_position_left.ChildAfterTreePosition()); + const auto positions = {position_first, position_before, position_after}; - ax_position_right = - AXPosition::FromPosition(position_after, TextAffinity::kDownstream, - AXPositionAdjustmentBehavior::kMoveRight); - EXPECT_TRUE(ax_position_right.IsValid()); - EXPECT_FALSE(ax_position_right.IsTextPosition()); - EXPECT_EQ(ax_container, ax_position_right.ContainerObject()); - EXPECT_EQ(2, ax_position_right.ChildIndex()); - EXPECT_EQ(ax_after, ax_position_right.ChildAfterTreePosition()); + for (const auto& position : positions) { + // + // |kMoveLeft| will create "after children" positions that are anchored to + // the paragraph before the element that is aria-hidden. + // + // |kMoveRight| will create positions that are anchored to the paragraph + // after the element that is aria-hidden. + // + + const auto ax_position_left = + AXPosition::FromPosition(position, TextAffinity::kDownstream, + AXPositionAdjustmentBehavior::kMoveLeft); + EXPECT_TRUE(ax_position_left.IsValid()); + EXPECT_FALSE(ax_position_left.IsTextPosition()); + EXPECT_EQ(ax_before, ax_position_left.ContainerObject()); + EXPECT_EQ(1, ax_position_left.ChildIndex()); + // This is an "after children" position. + EXPECT_EQ(nullptr, ax_position_left.ChildAfterTreePosition()); + + const auto ax_position_right = + AXPosition::FromPosition(position, TextAffinity::kDownstream, + AXPositionAdjustmentBehavior::kMoveRight); + EXPECT_TRUE(ax_position_right.IsValid()); + EXPECT_FALSE(ax_position_right.IsTextPosition()); + EXPECT_EQ(ax_container, ax_position_right.ContainerObject()); + EXPECT_EQ(1, ax_position_right.ChildIndex()); + EXPECT_EQ(ax_after, ax_position_right.ChildAfterTreePosition()); + } } //
diff --git a/third_party/blink/renderer/modules/accessibility/ax_range_test.cc b/third_party/blink/renderer/modules/accessibility/ax_range_test.cc index a8a73f7..2fef56e 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_range_test.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_range_test.cc
@@ -19,8 +19,6 @@ const AXObject* root = GetAXRootObject(); ASSERT_NE(nullptr, root); - const AXObject* body = root->FirstChild(); - ASSERT_NE(nullptr, body); const AXObject* input = GetAXObjectByElementId("input"); ASSERT_NE(nullptr, input); const AXObject* paragraph = GetAXObjectByElementId("paragraph"); @@ -36,10 +34,10 @@ const AXObject* button = GetAXObjectByElementId("button"); ASSERT_NE(nullptr, button); - EXPECT_EQ(body, AXRange(AXPosition::CreateFirstPositionInObject(*input), + EXPECT_EQ(root, AXRange(AXPosition::CreateFirstPositionInObject(*input), AXPosition::CreateLastPositionInObject(*button)) .CommonAncestorContainer()); - EXPECT_EQ(body, AXRange(AXPosition::CreateFirstPositionInObject(*br), + EXPECT_EQ(root, AXRange(AXPosition::CreateFirstPositionInObject(*br), AXPosition::CreateFirstPositionInObject(*button)) .CommonAncestorContainer()); EXPECT_EQ(paragraph, AXRange(AXPosition::CreatePositionBeforeObject(*text1),
diff --git a/third_party/blink/renderer/modules/accessibility/ax_selection_test.cc b/third_party/blink/renderer/modules/accessibility/ax_selection_test.cc index a1fcb05..45eddd0 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_selection_test.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_selection_test.cc
@@ -81,11 +81,10 @@ EXPECT_EQ(1, ax_selection.Extent().ChildIndex()); EXPECT_EQ( - "++<GenericContainer>\n" - "++++<Paragraph>\n" - "++++++<StaticText: Hel^lo.>\n" - "++++<Paragraph>\n" - "++++++<StaticText: How are you?>\n|", + "++<Paragraph>\n" + "++++<StaticText: Hel^lo.>\n" + "++<Paragraph>\n" + "++++<StaticText: How are you?>\n|", GetSelectionText(ax_selection)); } @@ -113,11 +112,10 @@ ax_selection.Extent().ChildIndex()); EXPECT_EQ( - "^++<GenericContainer>\n" - "++++<Paragraph>\n" - "++++++<StaticText: Hello.>\n" - "++++<Paragraph>\n" - "++++++<StaticText: How are you?>\n|", + "^++<Paragraph>\n" + "++++<StaticText: Hello.>\n" + "++<Paragraph>\n" + "++++<StaticText: How are you?>\n|", GetSelectionText(ax_selection)); } @@ -198,11 +196,10 @@ EXPECT_TRUE(ax_selection.Select()) << "The operation should now go through."; EXPECT_FALSE(Selection().GetSelectionInDOMTree().IsNone()); EXPECT_EQ( - "++<GenericContainer>\n" - "++++<Paragraph>\n" - "++++++<StaticText: Hel^lo.>\n" - "++++<Paragraph>\n" - "++++++<StaticText: How are you?>\n|", + "++<Paragraph>\n" + "++++<StaticText: Hel^lo.>\n" + "++<Paragraph>\n" + "++++<StaticText: How are you?>\n|", GetSelectionText(AXSelection::FromCurrentSelection(GetDocument()))); } @@ -258,9 +255,8 @@ EXPECT_EQ(text, dom_selection.Extent().AnchorNode()); EXPECT_EQ(5, dom_selection.Extent().OffsetInContainerNode()); EXPECT_EQ( - "++<GenericContainer>\n" - "++++<Paragraph>\n" - "++++++<StaticText: Hel^lo|>\n", + "++<Paragraph>\n" + "++++<StaticText: Hel^lo|>\n", GetSelectionText(ax_selection)); } @@ -289,9 +285,8 @@ EXPECT_EQ(text, dom_selection.Extent().AnchorNode()); EXPECT_EQ(10, dom_selection.Extent().OffsetInContainerNode()); EXPECT_EQ( - "++<GenericContainer>\n" - "++++<Paragraph>\n" - "++++++<StaticText: Hel^lo|>\n", + "++<Paragraph>\n" + "++++<StaticText: Hel^lo|>\n", GetSelectionText(ax_selection)); } @@ -332,11 +327,10 @@ // The selection anchor marker '^' should be before the line break and the // selection focus marker '|' should be after it. EXPECT_EQ( - "++<GenericContainer>\n" - "++++<Paragraph>\n" - "++++++<StaticText: Hello>\n" - "^++++++<LineBreak: \n>\n" - "|++++++<StaticText: |How are you.>\n", + "++<Paragraph>\n" + "++++<StaticText: Hello>\n" + "^++++<LineBreak: \n>\n" + "|++++<StaticText: |How are you.>\n", GetSelectionText(ax_selection)); } @@ -379,11 +373,10 @@ // The selection anchor marker '^' should be before the line break and the // selection focus marker '|' should be after it. EXPECT_EQ( - "++<GenericContainer>\n" - "++++<Paragraph>\n" - "++++++<StaticText: Hello>\n" - "^++++++<LineBreak: \n>\n" - "|++++++<StaticText: |How are you.>\n", + "++<Paragraph>\n" + "++++<StaticText: Hello>\n" + "^++++<LineBreak: \n>\n" + "|++++<StaticText: |How are you.>\n", GetSelectionText(ax_selection)); } @@ -398,9 +391,9 @@ SetBodyInnerHTML(R"HTML( <div id="main" role="main"> <p id="beforeHidden">Before aria-hidden.</p> - <p id="hidden1" aria-hidden="true" style="display:inline">Aria-hidden 1.</p> + <p id="hidden1" aria-hidden="true">Aria-hidden 1.</p> <p id="betweenHidden">In between two aria-hidden elements.</p> - <p id="hidden2" aria-hidden="true" style="display:inline">Aria-hidden 2.</p> + <p id="hidden2" aria-hidden="true">Aria-hidden 2.</p> <p id="afterHidden">After aria-hidden.</p> </div> )HTML"); @@ -416,23 +409,18 @@ const AXObject* ax_before = GetAXObjectByElementId("beforeHidden"); ASSERT_NE(nullptr, ax_before); ASSERT_EQ(ax::mojom::Role::kParagraph, ax_before->RoleValue()); - const AXObject* ax_hidden1 = GetAXObjectByElementId("hidden1"); - ASSERT_NE(nullptr, ax_hidden1); - ASSERT_EQ(ax::mojom::Role::kParagraph, ax_hidden1->RoleValue()); - ASSERT_TRUE(ax_hidden1->AccessibilityIsIgnored()); - ASSERT_FALSE(ax_hidden1->AccessibilityIsIncludedInTree()); const AXObject* ax_between = GetAXObjectByElementId("betweenHidden"); ASSERT_NE(nullptr, ax_between); ASSERT_EQ(ax::mojom::Role::kParagraph, ax_between->RoleValue()); - const AXObject* ax_hidden2 = GetAXObjectByElementId("hidden2"); - ASSERT_NE(nullptr, ax_hidden2); - ASSERT_EQ(ax::mojom::Role::kParagraph, ax_hidden2->RoleValue()); - ASSERT_TRUE(ax_hidden2->AccessibilityIsIgnored()); - ASSERT_FALSE(ax_hidden2->AccessibilityIsIncludedInTree()); const AXObject* ax_after = GetAXObjectByElementId("afterHidden"); ASSERT_NE(nullptr, ax_after); ASSERT_EQ(ax::mojom::Role::kParagraph, ax_after->RoleValue()); + ASSERT_NE(nullptr, GetAXObjectByElementId("hidden1")); + ASSERT_TRUE(GetAXObjectByElementId("hidden1")->AccessibilityIsIgnored()); + ASSERT_NE(nullptr, GetAXObjectByElementId("hidden2")); + ASSERT_TRUE(GetAXObjectByElementId("hidden2")->AccessibilityIsIgnored()); + const auto hidden_1_first = Position::FirstPositionInNode(*hidden_1); const auto hidden_2_first = Position::FirstPositionInNode(*hidden_2); const auto selection = SelectionInDOMTree::Builder() @@ -472,14 +460,13 @@ // aria-hidden. However, the AX selections should still differ if converted to // DOM selections. const std::string selection_text( - "++<GenericContainer>\n" - "++++<Main>\n" - "++++++<Paragraph>\n" - "++++++++<StaticText: Before aria-hidden.>\n" - "^++++++<Paragraph>\n" - "++++++++<StaticText: In between two aria-hidden elements.>\n" - "|++++++<Paragraph>\n" - "++++++++<StaticText: After aria-hidden.>\n"); + "++<Main>\n" + "++++<Paragraph>\n" + "++++++<StaticText: Before aria-hidden.>\n" + "^++++<Paragraph>\n" + "++++++<StaticText: In between two aria-hidden elements.>\n" + "|++++<Paragraph>\n" + "++++++<StaticText: After aria-hidden.>\n"); EXPECT_EQ(selection_text, GetSelectionText(ax_selection_shrink)); EXPECT_EQ(selection_text, GetSelectionText(ax_selection_extend)); } @@ -566,15 +553,14 @@ // The |AXSelection| should remain unaffected by any shrinking and should // include both list bullets. EXPECT_EQ( - "++<GenericContainer>\n" - "++++<Main>\n" - "++++++<List>\n" - "++++++++<ListItem>\n" - "++++++++++<ListMarker: \xE2\x80\xA2 >\n" - "^++++++++++<StaticText: Item 1.>\n" - "++++++++<ListItem>\n" - "++++++++++<ListMarker: \xE2\x80\xA2 >\n" - "++++++++++<StaticText: Item 2.|>\n", + "++<Main>\n" + "++++<List>\n" + "++++++<ListItem>\n" + "++++++++<ListMarker: \xE2\x80\xA2 >\n" + "^++++++++<StaticText: Item 1.>\n" + "++++++<ListItem>\n" + "++++++++<ListMarker: \xE2\x80\xA2 >\n" + "++++++++<StaticText: Item 2.|>\n", GetSelectionText(ax_selection)); }
diff --git a/third_party/blink/renderer/modules/accessibility/testing/data/selection/aria-hidden-ax.txt b/third_party/blink/renderer/modules/accessibility/testing/data/selection/aria-hidden-ax.txt index 4bca54e..a3ac8395 100644 --- a/third_party/blink/renderer/modules/accessibility/testing/data/selection/aria-hidden-ax.txt +++ b/third_party/blink/renderer/modules/accessibility/testing/data/selection/aria-hidden-ax.txt
@@ -2,11 +2,10 @@ ================================================================================ AXSelection from AX object anchored position in "Main": "", 1 to AX object anchored position in "Main": "", 2 ================================================================================ -++<GenericContainer> -++++<Main> -++++++<Paragraph> -++++++++<StaticText: Before aria-hidden.> -^++++++<Paragraph> -++++++++<StaticText: In the middle of aria-hidden.> -|++++++<Paragraph> -++++++++<StaticText: After aria-hidden.> +++<Main> +++++<Paragraph> +++++++<StaticText: Before aria-hidden.> +^++++<Paragraph> +++++++<StaticText: In the middle of aria-hidden.> +|++++<Paragraph> +++++++<StaticText: After aria-hidden.>
diff --git a/third_party/blink/renderer/modules/accessibility/testing/data/selection/aria-hidden.html b/third_party/blink/renderer/modules/accessibility/testing/data/selection/aria-hidden.html index ecf690e0..88f9d7a 100644 --- a/third_party/blink/renderer/modules/accessibility/testing/data/selection/aria-hidden.html +++ b/third_party/blink/renderer/modules/accessibility/testing/data/selection/aria-hidden.html
@@ -3,9 +3,9 @@ <body> <div role="main"> <p>Before aria-hidden.</p> - ^<p aria-hidden="true" style="display:inline">Aria-hidden 1.</p> + ^<p aria-hidden="true">Aria-hidden 1.</p> <p>In the middle of aria-hidden.</p> - <p aria-hidden="true" style="display:inline">Aria-hidden 2.</p>| + <p aria-hidden="true">Aria-hidden 2.</p>| <p>After aria-hidden.</p> </div> </body>
diff --git a/third_party/blink/renderer/modules/accessibility/testing/data/selection/list-ax.txt b/third_party/blink/renderer/modules/accessibility/testing/data/selection/list-ax.txt index 2d576b50..cdb8cd6d 100644 --- a/third_party/blink/renderer/modules/accessibility/testing/data/selection/list-ax.txt +++ b/third_party/blink/renderer/modules/accessibility/testing/data/selection/list-ax.txt
@@ -2,48 +2,46 @@ ================================================================================ AXSelection from AX object anchored position in "List": "", 1 to AX object anchored position in "List": "", 3 ================================================================================ -++<GenericContainer> -++++<List> -++++++<ListItem> -++++++++<ListMarker: 1. > -++++++++<StaticText: tic> -^++++++<ListItem> -++++++++<ListMarker: 2. > -++++++++<StaticText: tac> -++++++<ListItem> -++++++++<ListMarker: 3. > -++++++++<StaticText: toe> -|++++<List> -++++++<ListItem> -++++++++<StaticText: tic> -++++++<StaticText: > -++++++<ListItem> -++++++++<StaticText: tac> -++++++<StaticText: > -++++++<ListItem> -++++++++<StaticText: toe> +++<List> +++++<ListItem> +++++++<ListMarker: 1. > +++++++<StaticText: tic> +^++++<ListItem> +++++++<ListMarker: 2. > +++++++<StaticText: tac> +++++<ListItem> +++++++<ListMarker: 3. > +++++++<StaticText: toe> +|++<List> +++++<ListItem> +++++++<StaticText: tic> +++++<StaticText: > +++++<ListItem> +++++++<StaticText: tac> +++++<StaticText: > +++++<ListItem> +++++++<StaticText: toe> ================================================================================ -AXSelection from AX object anchored position in "GenericContainer": "", 1 to AX object anchored position in "GenericContainer": "", 2 +AXSelection from AX object anchored position in "WebArea": "", 1 to AX object anchored position in "WebArea": "", 2 ================================================================================ -++<GenericContainer> -++++<List> -++++++<ListItem> -++++++++<ListMarker: 1. > -++++++++<StaticText: tic> -++++++<ListItem> -++++++++<ListMarker: 2. > -++++++++<StaticText: tac> -++++++<ListItem> -++++++++<ListMarker: 3. > -++++++++<StaticText: toe> -^++++<List> -++++++<ListItem> -++++++++<StaticText: tic> -++++++<StaticText: > -++++++<ListItem> -++++++++<StaticText: tac> -++++++<StaticText: > -++++++<ListItem> -++++++++<StaticText: toe> +++<List> +++++<ListItem> +++++++<ListMarker: 1. > +++++++<StaticText: tic> +++++<ListItem> +++++++<ListMarker: 2. > +++++++<StaticText: tac> +++++<ListItem> +++++++<ListMarker: 3. > +++++++<StaticText: toe> +^++<List> +++++<ListItem> +++++++<StaticText: tic> +++++<StaticText: > +++++<ListItem> +++++++<StaticText: tac> +++++<StaticText: > +++++<ListItem> +++++++<StaticText: toe> | \ No newline at end of file
diff --git a/third_party/blink/renderer/modules/accessibility/testing/data/selection/svg-ax.txt b/third_party/blink/renderer/modules/accessibility/testing/data/selection/svg-ax.txt index 1f7d0fd..7a736f17 100644 --- a/third_party/blink/renderer/modules/accessibility/testing/data/selection/svg-ax.txt +++ b/third_party/blink/renderer/modules/accessibility/testing/data/selection/svg-ax.txt
@@ -3,28 +3,25 @@ AXSelection from AX text position in "StaticText": "Some text. ", 0 to AX text position in "StaticText": " More text.", 0 ================================================================================ ++<GenericContainer> -++++<GenericContainer> -++++++<Paragraph> -^++++++++<StaticText: ^Some text. > -++++++++<Image: Square> -|++++++++<StaticText: | More text.> +++++<Paragraph> +^++++++<StaticText: ^Some text. > +++++++<Image: Square> +|++++++<StaticText: | More text.> ================================================================================ AXSelection from AX text position in "StaticText": "Some text. ", 10 to AX text position in "StaticText": " More text.", 1 ================================================================================ ++<GenericContainer> -++++<GenericContainer> -++++++<Paragraph> -++++++++<StaticText: Some text.^ > -++++++++<Image: Square> -++++++++<StaticText: |More text.> +++++<Paragraph> +++++++<StaticText: Some text.^ > +++++++<Image: Square> +++++++<StaticText: |More text.> ================================================================================ AXSelection from AX text position in "StaticText": "Some text. ", 11 to AX text position in "StaticText": " More text.", 11 ================================================================================ ++<GenericContainer> -++++<GenericContainer> -++++++<Paragraph> -++++++++<StaticText: Some text. ^> -++++++++<Image: Square> -++++++++<StaticText: More text.|> +++++<Paragraph> +++++++<StaticText: Some text. ^> +++++++<Image: Square> +++++++<StaticText: More text.|>
diff --git a/third_party/blink/renderer/modules/accessibility/testing/data/selection/table-ax.txt b/third_party/blink/renderer/modules/accessibility/testing/data/selection/table-ax.txt index ce4a68b..670a7cbf 100644 --- a/third_party/blink/renderer/modules/accessibility/testing/data/selection/table-ax.txt +++ b/third_party/blink/renderer/modules/accessibility/testing/data/selection/table-ax.txt
@@ -2,103 +2,99 @@ ================================================================================ AXSelection from AX text position in "StaticText": "Sum", 0 to AX text position in "StaticText": "Subtraction", 11 ================================================================================ -++<GenericContainer> -++++<Table> -++++++<Row> -++++++++<ColumnHeader: Sum> -^++++++++++<StaticText: ^Sum> -++++++++<ColumnHeader: Subtraction> -++++++++++<StaticText: Subtraction|> -++++++<Row> -++++++++<Cell: 10> -++++++++++<StaticText: 10> -++++++++<Cell: 7> -++++++++++<StaticText: 7> -++++++<Row> -++++++++<Cell: 2> -++++++++++<StaticText: 2> -++++++++<Cell: 4> -++++++++++<StaticText: 4> -++++++<Row> -++++++++<Cell: 12> -++++++++++<StaticText: 12> -++++++++<Cell: 3> -++++++++++<StaticText: 3> +++<Table> +++++<Row> +++++++<ColumnHeader: Sum> +^++++++++<StaticText: ^Sum> +++++++<ColumnHeader: Subtraction> +++++++++<StaticText: Subtraction|> +++++<Row> +++++++<Cell: 10> +++++++++<StaticText: 10> +++++++<Cell: 7> +++++++++<StaticText: 7> +++++<Row> +++++++<Cell: 2> +++++++++<StaticText: 2> +++++++<Cell: 4> +++++++++<StaticText: 4> +++++<Row> +++++++<Cell: 12> +++++++++<StaticText: 12> +++++++<Cell: 3> +++++++++<StaticText: 3> ================================================================================ AXSelection from AX text position in "StaticText": "7", 1 to AX text position in "StaticText": "10", 0 ================================================================================ -++<GenericContainer> -++++<Table> -++++++<Row> -++++++++<ColumnHeader: Sum> -++++++++++<StaticText: Sum> -++++++++<ColumnHeader: Subtraction> -++++++++++<StaticText: Subtraction> -++++++<Row> -++++++++<Cell: 10> -|++++++++++<StaticText: |10> -++++++++<Cell: 7> -++++++++++<StaticText: 7^> -++++++<Row> -++++++++<Cell: 2> -++++++++++<StaticText: 2> -++++++++<Cell: 4> -++++++++++<StaticText: 4> -++++++<Row> -++++++++<Cell: 12> -++++++++++<StaticText: 12> -++++++++<Cell: 3> -++++++++++<StaticText: 3> +++<Table> +++++<Row> +++++++<ColumnHeader: Sum> +++++++++<StaticText: Sum> +++++++<ColumnHeader: Subtraction> +++++++++<StaticText: Subtraction> +++++<Row> +++++++<Cell: 10> +|++++++++<StaticText: |10> +++++++<Cell: 7> +++++++++<StaticText: 7^> +++++<Row> +++++++<Cell: 2> +++++++++<StaticText: 2> +++++++<Cell: 4> +++++++++<StaticText: 4> +++++<Row> +++++++<Cell: 12> +++++++++<StaticText: 12> +++++++<Cell: 3> +++++++++<StaticText: 3> ================================================================================ AXSelection from AX text position in "StaticText": "2", 1 to AX text position in "StaticText": "4", 0 ================================================================================ -++<GenericContainer> -++++<Table> -++++++<Row> -++++++++<ColumnHeader: Sum> -++++++++++<StaticText: Sum> -++++++++<ColumnHeader: Subtraction> -++++++++++<StaticText: Subtraction> -++++++<Row> -++++++++<Cell: 10> -++++++++++<StaticText: 10> -++++++++<Cell: 7> -++++++++++<StaticText: 7> -++++++<Row> -++++++++<Cell: 2> -++++++++++<StaticText: 2^> -++++++++<Cell: 4> -|++++++++++<StaticText: |4> -++++++<Row> -++++++++<Cell: 12> -++++++++++<StaticText: 12> -++++++++<Cell: 3> -++++++++++<StaticText: 3> +++<Table> +++++<Row> +++++++<ColumnHeader: Sum> +++++++++<StaticText: Sum> +++++++<ColumnHeader: Subtraction> +++++++++<StaticText: Subtraction> +++++<Row> +++++++<Cell: 10> +++++++++<StaticText: 10> +++++++<Cell: 7> +++++++++<StaticText: 7> +++++<Row> +++++++<Cell: 2> +++++++++<StaticText: 2^> +++++++<Cell: 4> +|++++++++<StaticText: |4> +++++<Row> +++++++<Cell: 12> +++++++++<StaticText: 12> +++++++<Cell: 3> +++++++++<StaticText: 3> ================================================================================ AXSelection from AX text position in "StaticText": "12", 0 to AX text position in "StaticText": "3", 1 ================================================================================ -++<GenericContainer> -++++<Table> -++++++<Row> -++++++++<ColumnHeader: Sum> -++++++++++<StaticText: Sum> -++++++++<ColumnHeader: Subtraction> -++++++++++<StaticText: Subtraction> -++++++<Row> -++++++++<Cell: 10> -++++++++++<StaticText: 10> -++++++++<Cell: 7> -++++++++++<StaticText: 7> -++++++<Row> -++++++++<Cell: 2> -++++++++++<StaticText: 2> -++++++++<Cell: 4> -++++++++++<StaticText: 4> -++++++<Row> -++++++++<Cell: 12> -^++++++++++<StaticText: ^12> -++++++++<Cell: 3> -++++++++++<StaticText: 3|> +++<Table> +++++<Row> +++++++<ColumnHeader: Sum> +++++++++<StaticText: Sum> +++++++<ColumnHeader: Subtraction> +++++++++<StaticText: Subtraction> +++++<Row> +++++++<Cell: 10> +++++++++<StaticText: 10> +++++++<Cell: 7> +++++++++<StaticText: 7> +++++<Row> +++++++<Cell: 2> +++++++++<StaticText: 2> +++++++<Cell: 4> +++++++++<StaticText: 4> +++++<Row> +++++++<Cell: 12> +^++++++++<StaticText: ^12> +++++++<Cell: 3> +++++++++<StaticText: 3|>
diff --git a/third_party/blink/renderer/modules/csspaint/css_paint_image_generator_impl.cc b/third_party/blink/renderer/modules/csspaint/css_paint_image_generator_impl.cc index 5f6b8ac..46543be 100644 --- a/third_party/blink/renderer/modules/csspaint/css_paint_image_generator_impl.cc +++ b/third_party/blink/renderer/modules/csspaint/css_paint_image_generator_impl.cc
@@ -78,7 +78,7 @@ return true; } if (definition && definition->GetRegisteredDefinitionCount() != - PaintWorklet::kNumGlobalScopes) { + PaintWorklet::kNumGlobalScopesPerThread) { definition = nullptr; return false; }
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet.cc index 4f6bd2d..9d619d7 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet.cc
@@ -29,7 +29,7 @@ } } // namespace -const wtf_size_t PaintWorklet::kNumGlobalScopes = 2u; +const wtf_size_t PaintWorklet::kNumGlobalScopesPerThread = 2u; const size_t kMaxPaintCountToSwitch = 30u; // static @@ -93,7 +93,8 @@ } wtf_size_t PaintWorklet::SelectNewGlobalScope() { - return static_cast<wtf_size_t>(base::RandGenerator(kNumGlobalScopes)); + return static_cast<wtf_size_t>( + base::RandGenerator(kNumGlobalScopesPerThread)); } scoped_refptr<Image> PaintWorklet::Paint(const String& name, @@ -164,7 +165,7 @@ // second time with the same |name| (i.e. there is already a document // definition associated with |name| if (existing_document_definition->GetRegisteredDefinitionCount() == - PaintWorklet::kNumGlobalScopes) + PaintWorklet::kNumGlobalScopesPerThread) pending_generator_registry_->NotifyGeneratorReady(name); } else { auto document_definition = std::make_unique<DocumentPaintDefinition>( @@ -197,12 +198,19 @@ } bool PaintWorklet::NeedsToCreateGlobalScope() { - return GetNumberOfGlobalScopes() < kNumGlobalScopes; + wtf_size_t num_scopes_needed = kNumGlobalScopesPerThread; + // If we are running off main thread, we will need twice as many global scopes + if (RuntimeEnabledFeatures::OffMainThreadCSSPaintEnabled()) + num_scopes_needed *= 2; + return GetNumberOfGlobalScopes() < num_scopes_needed; } WorkletGlobalScopeProxy* PaintWorklet::CreateGlobalScope() { DCHECK(NeedsToCreateGlobalScope()); - if (!RuntimeEnabledFeatures::OffMainThreadCSSPaintEnabled()) { + // It does not matter which thread creates its global scopes first, here we + // choose to have the worker thread global scopes created first. + if (!RuntimeEnabledFeatures::OffMainThreadCSSPaintEnabled() || + GetNumberOfGlobalScopes() >= kNumGlobalScopesPerThread) { return MakeGarbageCollected<PaintWorkletGlobalScopeProxy>( To<Document>(GetExecutionContext())->GetFrame(), ModuleResponsesMap(), GetNumberOfGlobalScopes() + 1);
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet.h b/third_party/blink/renderer/modules/csspaint/paint_worklet.h index 6725821c..717fee2 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet.h +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet.h
@@ -31,7 +31,7 @@ static const char kSupplementName[]; // At this moment, paint worklet allows at most two global scopes at any time. - static const wtf_size_t kNumGlobalScopes; + static const wtf_size_t kNumGlobalScopesPerThread; static PaintWorklet* From(LocalDOMWindow&); explicit PaintWorklet(LocalFrame*); @@ -74,6 +74,20 @@ Vector<CSSSyntaxDescriptor> input_argument_types, double alpha); + HeapVector<Member<WorkletGlobalScopeProxy>>& GetGlobalScopesForTesting() { + return proxies_; + } + + void AddGlobalScopeForTesting() { proxies_.push_back(CreateGlobalScope()); } + + bool NeedsToCreateGlobalScopeForTesting() { + return NeedsToCreateGlobalScope(); + } + + void SetProxyClientForTesting(PaintWorkletProxyClient* proxy_client) { + proxy_client_ = proxy_client; + } + protected: // Since paint worklet has more than one global scope, we MUST override this // function and provide our own selection logic.
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope.cc index 8290a5e..28671f0 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope.cc
@@ -28,6 +28,8 @@ #include "third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h" #include "third_party/blink/renderer/platform/bindings/callback_method_retriever.h" #include "third_party/blink/renderer/platform/bindings/v8_binding_macros.h" +#include "third_party/blink/renderer/platform/runtime_enabled_features.h" +#include "third_party/blink/renderer/platform/wtf/wtf.h" namespace blink { @@ -98,7 +100,6 @@ LocalFrame* frame, std::unique_ptr<GlobalScopeCreationParams> creation_params, WorkerReportingProxy& reporting_proxy) { - DCHECK(!RuntimeEnabledFeatures::OffMainThreadCSSPaintEnabled()); auto* global_scope = MakeGarbageCollected<PaintWorkletGlobalScope>( frame, std::move(creation_params), reporting_proxy); global_scope->ScriptController()->Initialize(NullURL()); @@ -134,7 +135,7 @@ void PaintWorkletGlobalScope::Dispose() { DCHECK(IsContextThread()); - if (RuntimeEnabledFeatures::OffMainThreadCSSPaintEnabled()) { + if (!WTF::IsMainThread()) { if (PaintWorkletProxyClient* proxy_client = PaintWorkletProxyClient::From(Clients())) proxy_client->Dispose(); @@ -214,7 +215,7 @@ input_argument_types, context_settings); paint_definitions_.Set(name, definition); - if (RuntimeEnabledFeatures::OffMainThreadCSSPaintEnabled()) { + if (!WTF::IsMainThread()) { PaintWorkletProxyClient* proxy_client = PaintWorkletProxyClient::From(Clients()); proxy_client->RegisterCSSPaintDefinition(name, definition, exception_state); @@ -234,9 +235,7 @@ double PaintWorkletGlobalScope::devicePixelRatio() const { // TODO(smcgruer): Implement |devicePixelRatio| for worklet-thread bound // PaintWorkletGlobalScope. - return RuntimeEnabledFeatures::OffMainThreadCSSPaintEnabled() - ? 1.0 - : GetFrame()->DevicePixelRatio(); + return WTF::IsMainThread() ? GetFrame()->DevicePixelRatio() : 1.0; } void PaintWorkletGlobalScope::Trace(blink::Visitor* visitor) { @@ -245,7 +244,7 @@ } void PaintWorkletGlobalScope::RegisterWithProxyClientIfNeeded() { - if (registered_ || !RuntimeEnabledFeatures::OffMainThreadCSSPaintEnabled()) + if (registered_ || WTF::IsMainThread()) return; if (PaintWorkletProxyClient* proxy_client =
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc index 8b37010..626800e 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc
@@ -63,7 +63,7 @@ global_scopes_.push_back(To<PaintWorkletGlobalScope>(global_scope)); // Wait for all global scopes to be set before registering. - if (global_scopes_.size() < PaintWorklet::kNumGlobalScopes) { + if (global_scopes_.size() < PaintWorklet::kNumGlobalScopesPerThread) { return; } @@ -108,7 +108,7 @@ // Notify the main thread only once all global scopes have registered the same // named paint definition (with the same definition as well). if (document_definition->GetRegisteredDefinitionCount() == - PaintWorklet::kNumGlobalScopes) { + PaintWorklet::kNumGlobalScopesPerThread) { const Vector<AtomicString>& custom_properties = definition->CustomInvalidationProperties(); // Make a deep copy of the |custom_properties| into a Vector<String> so that @@ -161,9 +161,9 @@ // TODO(smcgruer): Once we are passing bundles of PaintWorklets here, we // should shuffle the bundle randomly and then assign half to the first global // scope, and half to the rest. - DCHECK_EQ(global_scopes_.size(), PaintWorklet::kNumGlobalScopes); - PaintWorkletGlobalScope* global_scope = - global_scopes_[base::RandInt(0, PaintWorklet::kNumGlobalScopes - 1)]; + DCHECK_EQ(global_scopes_.size(), PaintWorklet::kNumGlobalScopesPerThread); + PaintWorkletGlobalScope* global_scope = global_scopes_[base::RandInt( + 0, (PaintWorklet::kNumGlobalScopesPerThread)-1)]; const PaintWorkletInput* input = static_cast<const PaintWorkletInput*>(compositor_input);
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client_test.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client_test.cc index d38fe56c..c60672d 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client_test.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client_test.cc
@@ -61,13 +61,13 @@ // create multiple WorkerThread for this. Note that the underlying thread // may be shared even though they are unique WorkerThread instances! Vector<std::unique_ptr<WorkerThread>> worklet_threads; - for (size_t i = 0; i < PaintWorklet::kNumGlobalScopes; i++) { + for (size_t i = 0; i < PaintWorklet::kNumGlobalScopesPerThread; i++) { worklet_threads.push_back(CreateThreadAndProvidePaintWorkletProxyClient( &GetDocument(), reporting_proxy_.get(), proxy_client_)); } // Add the global scopes. This must happen on the worklet thread. - for (size_t i = 0; i < PaintWorklet::kNumGlobalScopes; i++) { + for (size_t i = 0; i < PaintWorklet::kNumGlobalScopesPerThread; i++) { base::WaitableEvent waitable_event; PostCrossThreadTask( *worklet_threads[i]->GetTaskRunner(TaskType::kInternalTest), @@ -93,7 +93,7 @@ waitable_event.Wait(); // And finally clean up. - for (size_t i = 0; i < PaintWorklet::kNumGlobalScopes; i++) { + for (size_t i = 0; i < PaintWorklet::kNumGlobalScopesPerThread; i++) { worklet_threads[i]->Terminate(); worklet_threads[i]->WaitForShutdownForTesting(); } @@ -130,18 +130,18 @@ // First, add all but one of the global scopes. The proxy client should not // yet register itself. - for (size_t i = 0; i < PaintWorklet::kNumGlobalScopes - 1; i++) { + for (size_t i = 0; i < PaintWorklet::kNumGlobalScopesPerThread - 1; i++) { proxy_client->AddGlobalScope(To<WorkletGlobalScope>(thread->GlobalScope())); } EXPECT_EQ(proxy_client->GetGlobalScopesForTesting().size(), - PaintWorklet::kNumGlobalScopes - 1); + PaintWorklet::kNumGlobalScopesPerThread - 1); EXPECT_EQ(dispatcher->PainterMapForTesting().size(), 0u); // Now add the final global scope. This should trigger the registration. proxy_client->AddGlobalScope(To<WorkletGlobalScope>(thread->GlobalScope())); EXPECT_EQ(proxy_client->GetGlobalScopesForTesting().size(), - PaintWorklet::kNumGlobalScopes); + PaintWorklet::kNumGlobalScopesPerThread); EXPECT_EQ(dispatcher->PainterMapForTesting().size(), 1u); waitable_event->Signal(); @@ -177,7 +177,7 @@ // use ASSERT_EQ here as that would crash the worklet thread and the test // would timeout rather than fail. EXPECT_EQ(proxy_client->GetGlobalScopesForTesting().size(), - PaintWorklet::kNumGlobalScopes); + PaintWorklet::kNumGlobalScopesPerThread); // Register the painter on all global scopes. for (const auto& global_scope : proxy_client->GetGlobalScopesForTesting()) { @@ -211,10 +211,10 @@ // use ASSERT_EQ here as that would crash the worklet thread and the test // would timeout rather than fail. EXPECT_EQ(proxy_client->GetGlobalScopesForTesting().size(), - PaintWorklet::kNumGlobalScopes); + PaintWorklet::kNumGlobalScopesPerThread); // This test doesn't make sense if there's only one global scope! - EXPECT_GT(PaintWorklet::kNumGlobalScopes, 1u); + EXPECT_GT(PaintWorklet::kNumGlobalScopesPerThread, 1u); const Vector<CrossThreadPersistent<PaintWorkletGlobalScope>>& global_scopes = proxy_client->GetGlobalScopesForTesting(); @@ -347,7 +347,7 @@ // use ASSERT_EQ here as that would crash the worklet thread and the test // would timeout rather than fail. EXPECT_EQ(proxy_client->GetGlobalScopesForTesting().size(), - PaintWorklet::kNumGlobalScopes); + PaintWorklet::kNumGlobalScopesPerThread); // Register a new paint function on all but one global scope. They should not // end up posting a task to the PaintWorklet. @@ -376,4 +376,50 @@ &RunAllDefinitionsMustBeRegisteredBeforePostingTestOnWorklet); } +void RunAllGlobalScopesMustBeCreatedTestOnWorklet( + WorkerThread* thread, + PaintWorkletProxyClient* proxy_client, + scoped_refptr<PaintWorkletPaintDispatcher> dispatcher, + base::WaitableEvent* waitable_event) { + for (size_t i = 0; i < PaintWorklet::kNumGlobalScopesPerThread; i++) { + proxy_client->AddGlobalScope(To<WorkletGlobalScope>(thread->GlobalScope())); + } + + EXPECT_EQ(proxy_client->GetGlobalScopesForTesting().size(), + PaintWorklet::kNumGlobalScopesPerThread); + + waitable_event->Signal(); +} + +TEST_F(PaintWorkletProxyClientTest, AllGlobalScopesMustBeCreated) { + ScopedOffMainThreadCSSPaintForTest off_main_thread_css_paint(true); + + std::unique_ptr<WorkerThread> worklet_thread = + CreateThreadAndProvidePaintWorkletProxyClient( + &GetDocument(), reporting_proxy_.get(), proxy_client_); + + EXPECT_TRUE(proxy_client_->GetGlobalScopesForTesting().IsEmpty()); + + base::WaitableEvent waitable_event; + PostCrossThreadTask( + *worklet_thread->GetTaskRunner(TaskType::kInternalTest), FROM_HERE, + CrossThreadBindOnce( + &RunAllGlobalScopesMustBeCreatedTestOnWorklet, + CrossThreadUnretained(worklet_thread.get()), + CrossThreadPersistent<PaintWorkletProxyClient>(proxy_client_), + dispatcher_, CrossThreadUnretained(&waitable_event))); + waitable_event.Wait(); + + paint_worklet_->SetProxyClientForTesting(proxy_client_); + while (paint_worklet_->NeedsToCreateGlobalScopeForTesting()) { + paint_worklet_->AddGlobalScopeForTesting(); + } + + EXPECT_EQ(paint_worklet_->GetGlobalScopesForTesting().size(), + 2 * PaintWorklet::kNumGlobalScopesPerThread); + + worklet_thread->Terminate(); + worklet_thread->WaitForShutdownForTesting(); +} + } // namespace blink
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_test.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_test.cc index ed5cb1c..7b7eec0 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet_test.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_test.cc
@@ -34,7 +34,7 @@ // was switched in the test. wtf_size_t SelectNewGlobalScope() override { return (GetActiveGlobalScopeForTesting() + 1) % - PaintWorklet::kNumGlobalScopes; + PaintWorklet::kNumGlobalScopesPerThread; } size_t GetActiveGlobalScope() { return GetActiveGlobalScopeForTesting(); }
diff --git a/third_party/blink/renderer/modules/exported/web_ax_object.cc b/third_party/blink/renderer/modules/exported/web_ax_object.cc index 65d1065e..47d9fac1 100644 --- a/third_party/blink/renderer/modules/exported/web_ax_object.cc +++ b/third_party/blink/renderer/modules/exported/web_ax_object.cc
@@ -330,13 +330,6 @@ return private_->IsHovered(); } -bool WebAXObject::IsLineBreakingObject() const { - if (IsDetached()) - return false; - - return private_->IsLineBreakingObject(); -} - bool WebAXObject::IsLinked() const { if (IsDetached()) return false;
diff --git a/third_party/blink/renderer/modules/nfc/BUILD.gn b/third_party/blink/renderer/modules/nfc/BUILD.gn index 1151cc9f..1e4f5a0 100644 --- a/third_party/blink/renderer/modules/nfc/BUILD.gn +++ b/third_party/blink/renderer/modules/nfc/BUILD.gn
@@ -12,5 +12,9 @@ "nfc.h", "nfc_error.cc", "nfc_error.h", + "nfc_proxy.cc", + "nfc_proxy.h", + "nfc_reader.cc", + "nfc_reader.h", ] }
diff --git a/third_party/blink/renderer/modules/nfc/DEPS b/third_party/blink/renderer/modules/nfc/DEPS index 25717df..99dfeaa 100644 --- a/third_party/blink/renderer/modules/nfc/DEPS +++ b/third_party/blink/renderer/modules/nfc/DEPS
@@ -2,3 +2,10 @@ "+mojo/public/cpp/bindings/binding.h", "+services/device/public/mojom/nfc.mojom-blink.h", ] + +specific_include_rules = { + "nfc_proxy_test\.cc": [ + "+base/run_loop.h", + "+base/test/bind_test_util.h", + ], +}
diff --git a/third_party/blink/renderer/modules/nfc/nfc_proxy.cc b/third_party/blink/renderer/modules/nfc/nfc_proxy.cc new file mode 100644 index 0000000..6bb51f5 --- /dev/null +++ b/third_party/blink/renderer/modules/nfc/nfc_proxy.cc
@@ -0,0 +1,162 @@ +// Copyright 2019 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 "third_party/blink/renderer/modules/nfc/nfc_proxy.h" + +#include <utility> + +#include "services/service_manager/public/cpp/interface_provider.h" +#include "third_party/blink/renderer/modules/nfc/nfc_reader.h" +#include "third_party/blink/renderer/platform/mojo/mojo_helper.h" + +namespace blink { + +// static +const char NFCProxy::kSupplementName[] = "NFCProxy"; + +// static +NFCProxy* NFCProxy::From(Document& document) { + // https://w3c.github.io/web-nfc/#security-policies + // WebNFC API must be only accessible from top level browsing context. + if (!document.IsInMainFrame()) { + return nullptr; + } + + NFCProxy* nfc_proxy = Supplement<Document>::From<NFCProxy>(document); + if (!nfc_proxy) { + nfc_proxy = MakeGarbageCollected<NFCProxy>(document); + Supplement<Document>::ProvideTo(document, nfc_proxy); + } + return nfc_proxy; +} + +// NFCProxy +NFCProxy::NFCProxy(Document& document) + : PageVisibilityObserver(document.GetPage()), + Supplement<Document>(document), + client_binding_(this) {} + +NFCProxy::~NFCProxy() = default; + +void NFCProxy::Dispose() { + client_binding_.Close(); +} + +void NFCProxy::Trace(blink::Visitor* visitor) { + visitor->Trace(readers_); + PageVisibilityObserver::Trace(visitor); + Supplement<Document>::Trace(visitor); +} + +void NFCProxy::AddReader(NFCReader* reader) { + DCHECK(reader); + + if (readers_.Contains(reader)) + return; + + EnsureMojoConnection(); + nfc_->Watch(reader->options().Clone(), + WTF::Bind(&NFCProxy::OnReaderRegistered, WrapPersistent(this), + WrapPersistent(reader))); +} + +void NFCProxy::RemoveReader(NFCReader* reader) { + auto iter = readers_.find(reader); + if (iter != readers_.end()) { + nfc_->CancelWatch(iter->value, + WTF::Bind(&NFCProxy::OnCancelWatch, WrapPersistent(this), + WrapPersistent(reader))); + readers_.erase(iter); + } +} + +void NFCProxy::Push(device::mojom::blink::NDEFMessagePtr message, + device::mojom::blink::NFCPushOptionsPtr options, + device::mojom::blink::NFC::PushCallback cb) { + EnsureMojoConnection(); + nfc_->Push(std::move(message), std::move(options), std::move(cb)); +} + +void NFCProxy::PageVisibilityChanged() { + // If service is not initialized, there cannot be any pending NFC activities + if (!nfc_) + return; + + // NFC operations should be suspended. + // https://w3c.github.io/web-nfc/#nfc-suspended + if (GetPage()->IsPageVisible()) + nfc_->ResumeNFCOperations(); + else + nfc_->SuspendNFCOperations(); +} + +// device::mojom::blink::NFCClient implementation. +void NFCProxy::OnWatch(const Vector<uint32_t>& ids, + device::mojom::blink::NDEFMessagePtr message) { + // Dispatch the event to all matched and registered observers. + // All readers in the list should be active. + for (auto pair : readers_) { + if (ids.Contains(pair.value)) { + pair.key->OnMessage(*message); + } + } +} + +void NFCProxy::OnReaderRegistered(NFCReader* reader, + uint32_t id, + device::mojom::blink::NFCErrorPtr error) { + DCHECK(reader); + + if (error) { + reader->OnError(*error); + return; + } + + readers_.insert(reader, id); +} + +void NFCProxy::OnCancelWatch(NFCReader* reader, + device::mojom::blink::NFCErrorPtr error) { + DCHECK(reader); + + if (error) { + reader->OnError(*error); + } +} + +void NFCProxy::EnsureMojoConnection() { + if (nfc_) + return; + + // See https://bit.ly/2S0zRAS for task types. + auto task_runner = + GetSupplementable()->GetTaskRunner(TaskType::kMiscPlatformAPI); + GetSupplementable()->GetInterfaceProvider()->GetInterface( + mojo::MakeRequest(&nfc_, task_runner)); + nfc_.set_connection_error_handler( + WTF::Bind(&NFCProxy::OnMojoConnectionError, WrapWeakPersistent(this))); + + // Set client for OnWatch event. + device::mojom::blink::NFCClientPtr client; + client_binding_.Bind(mojo::MakeRequest(&client, task_runner), task_runner); + nfc_->SetClient(std::move(client)); +} + +void NFCProxy::OnMojoConnectionError() { + nfc_.reset(); + + // Notify all active readers about the connection error. + // NFCWriter::push() should wrap the callback using + // mojo::WrapCallbackWithDefaultInvokeIfNotRun() with a default error. + auto error = device::mojom::blink::NFCError::New( + device::mojom::blink::NFCErrorType::NOT_SUPPORTED); + for (auto pair : readers_) { + pair.key->OnError(*error); + } + + // Clear the reader list. + readers_.clear(); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/modules/nfc/nfc_proxy.h b/third_party/blink/renderer/modules/nfc/nfc_proxy.h new file mode 100644 index 0000000..f5cb556a --- /dev/null +++ b/third_party/blink/renderer/modules/nfc/nfc_proxy.h
@@ -0,0 +1,75 @@ +// Copyright 2019 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 THIRD_PARTY_BLINK_RENDERER_MODULES_NFC_NFC_PROXY_H_ +#define THIRD_PARTY_BLINK_RENDERER_MODULES_NFC_NFC_PROXY_H_ + +#include "mojo/public/cpp/bindings/binding.h" +#include "services/device/public/mojom/nfc.mojom-blink.h" +#include "third_party/blink/renderer/core/dom/document.h" +#include "third_party/blink/renderer/core/page/page_visibility_observer.h" +#include "third_party/blink/renderer/modules/modules_export.h" +#include "third_party/blink/renderer/platform/wtf/hash_map.h" + +namespace blink { + +class Document; +class NFCReader; + +// This is a proxy class used by NFCWriter(s) and NFCReader(s) to connect +// to the DeviceService for device::mojom::blink::NFC service. +class MODULES_EXPORT NFCProxy final + : public GarbageCollectedFinalized<NFCProxy>, + public PageVisibilityObserver, + public Supplement<Document>, + public device::mojom::blink::NFCClient { + USING_GARBAGE_COLLECTED_MIXIN(NFCProxy); + USING_PRE_FINALIZER(NFCProxy, Dispose); + + public: + static const char kSupplementName[]; + static NFCProxy* From(Document&); + + explicit NFCProxy(Document&); + ~NFCProxy() override; + + void Dispose(); + + void Trace(blink::Visitor*) override; + + void AddReader(NFCReader*); + void RemoveReader(NFCReader*); + void Push(device::mojom::blink::NDEFMessagePtr message, + device::mojom::blink::NFCPushOptionsPtr options, + device::mojom::blink::NFC::PushCallback cb); + + // Implementation of PageVisibilityObserver. + void PageVisibilityChanged() override; + + private: + // Implementation of device::mojom::blink::NFCClient. + void OnWatch(const Vector<uint32_t>& ids, + device::mojom::blink::NDEFMessagePtr) override; + + void OnReaderRegistered(NFCReader* reader, + uint32_t id, + device::mojom::blink::NFCErrorPtr error); + void OnCancelWatch(NFCReader* reader, + device::mojom::blink::NFCErrorPtr error); + + // For the Mojo connection with the DeviceService. + void EnsureMojoConnection(); + void OnMojoConnectionError(); + + // The <NFCReader, WatchId> map. + using ReaderMap = HeapHashMap<WeakMember<NFCReader>, uint32_t>; + ReaderMap readers_; + + device::mojom::blink::NFCPtr nfc_; + mojo::Binding<device::mojom::blink::NFCClient> client_binding_; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_NFC_NFC_PROXY_H_
diff --git a/third_party/blink/renderer/modules/nfc/nfc_proxy_test.cc b/third_party/blink/renderer/modules/nfc/nfc_proxy_test.cc new file mode 100644 index 0000000..7402148 --- /dev/null +++ b/third_party/blink/renderer/modules/nfc/nfc_proxy_test.cc
@@ -0,0 +1,234 @@ +// Copyright 2019 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 <map> +#include <memory> +#include <utility> + +#include "base/run_loop.h" +#include "base/test/bind_test_util.h" +#include "services/service_manager/public/cpp/interface_provider.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" +#include "third_party/blink/renderer/core/testing/page_test_base.h" +#include "third_party/blink/renderer/modules/nfc/nfc_proxy.h" +#include "third_party/blink/renderer/modules/nfc/nfc_reader.h" +#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" + +namespace blink { +namespace { + +using ::testing::_; +using ::testing::Invoke; + +using device::mojom::blink::NDEFMessage; +using device::mojom::blink::NDEFMessagePtr; +using device::mojom::blink::NFCClientPtr; +using device::mojom::blink::NFCError; +using device::mojom::blink::NFCErrorPtr; +using device::mojom::blink::NFCErrorType; +using device::mojom::blink::NFCPushOptionsPtr; +using device::mojom::blink::NFCPushTarget; +using device::mojom::blink::NFCReaderOptions; +using device::mojom::blink::NFCReaderOptionsPtr; + +static const char kTestUrl[] = "https://w3c.github.io/web-nfc/"; + +MATCHER_P(MessageEquals, expected, "") { + // Only check the first data array. + if (arg.data.size() != 1) + return false; + + const auto& received_data = arg.data[0]->data; + if (received_data.size() != expected.size()) + return false; + + for (WTF::wtf_size_t i = 0; i < received_data.size(); i++) { + if (received_data[i] != expected[i]) { + return false; + } + } + return true; +} + +class MockNFCReader : public GarbageCollectedFinalized<MockNFCReader>, + public NFCReader { + USING_GARBAGE_COLLECTED_MIXIN(MockNFCReader); + + public: + explicit MockNFCReader(NFCReaderOptionsPtr options) + : NFCReader(std::move(options)) {} + + void Trace(blink::Visitor* visitor) override { NFCReader::Trace(visitor); } + + MOCK_METHOD1(OnMessage, void(const NDEFMessage& message)); + MOCK_METHOD1(OnError, void(const NFCError& error)); +}; + +class FakeNfcService : public device::mojom::blink::NFC { + public: + FakeNfcService() : binding_(this) {} + ~FakeNfcService() override = default; + + void BindRequest(mojo::ScopedMessagePipeHandle handle) { + DCHECK(!binding_.is_bound()); + binding_.Bind(device::mojom::blink::NFCRequest(std::move(handle))); + binding_.set_connection_error_handler( + WTF::Bind(&FakeNfcService::OnConnectionError, WTF::Unretained(this))); + } + + void OnConnectionError() { + if (binding_.is_bound()) + binding_.Unbind(); + + client_.reset(); + } + + void TriggerWatchEvent() { + if (!client_ || !tag_message_) + return; + + // Only match the watches using |url| in options. + WTF::Vector<uint32_t> ids; + for (auto& pair : watches_) { + if (pair.second->url == tag_message_->url) { + ids.push_back(pair.first); + } + } + + if (!ids.IsEmpty()) { + client_->OnWatch(std::move(ids), tag_message_.Clone()); + } + } + + void set_tag_message(NDEFMessagePtr message) { + tag_message_ = std::move(message); + } + + WTF::Vector<uint32_t> GetWatches() { + WTF::Vector<uint32_t> ids; + for (auto& pair : watches_) { + ids.push_back(pair.first); + } + return ids; + } + + private: + // Override methods from device::mojom::blink::NFC. + void SetClient(NFCClientPtr client) override { client_ = std::move(client); } + void Push(NDEFMessagePtr message, + NFCPushOptionsPtr options, + PushCallback callback) override { + set_tag_message(std::move(message)); + std::move(callback).Run(nullptr); + } + void CancelPush(NFCPushTarget target, CancelPushCallback callback) override { + std::move(callback).Run(nullptr); + } + void Watch(NFCReaderOptionsPtr options, WatchCallback callback) override { + uint32_t id = ++last_watch_id_; + watches_.insert(std::make_pair(id, std::move(options))); + std::move(callback).Run(id, nullptr); + } + void CancelWatch(uint32_t id, CancelWatchCallback callback) override { + if (watches_.erase(id) < 1) { + std::move(callback).Run(NFCError::New(NFCErrorType::NOT_FOUND)); + } else { + std::move(callback).Run(nullptr); + } + } + void CancelAllWatches(CancelAllWatchesCallback callback) override { + watches_.clear(); + std::move(callback).Run(nullptr); + } + void SuspendNFCOperations() override {} + void ResumeNFCOperations() override {} + + NDEFMessagePtr tag_message_; + NFCClientPtr client_; + uint32_t last_watch_id_ = 0; + std::map<uint32_t, NFCReaderOptionsPtr> watches_; + mojo::Binding<device::mojom::blink::NFC> binding_; +}; + +// Overrides requests for NFC mojo requests with FakeNfcService instances. +class NFCProxyTest : public PageTestBase { + public: + NFCProxyTest() { nfc_service_ = std::make_unique<FakeNfcService>(); } + + void SetUp() override { + PageTestBase::SetUp(IntSize()); + + service_manager::InterfaceProvider::TestApi test_api( + GetDocument().GetInterfaceProvider()); + test_api.SetBinderForName( + device::mojom::blink::NFC::Name_, + WTF::BindRepeating(&FakeNfcService::BindRequest, + WTF::Unretained(nfc_service()))); + } + + FakeNfcService* nfc_service() { return nfc_service_.get(); } + + void DestroyNfcService() { nfc_service_.reset(); } + + private: + std::unique_ptr<FakeNfcService> nfc_service_; +}; + +TEST_F(NFCProxyTest, SuccessfulPath) { + auto& document = GetDocument(); + auto* nfc_proxy = NFCProxy::From(document); + NFCReaderOptionsPtr read_options = NFCReaderOptions::New(); + read_options->url = kTestUrl; + auto* reader = MakeGarbageCollected<MockNFCReader>(std::move(read_options)); + + nfc_proxy->AddReader(reader); + test::RunPendingTasks(); + EXPECT_EQ(nfc_service()->GetWatches().size(), 1u); + + // Construct a NDEFMessagePtr + auto message = device::mojom::blink::NDEFMessage::New(); + message->url = kTestUrl; + auto record = device::mojom::blink::NDEFRecord::New(); + WTF::Vector<uint8_t> record_data( + {0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10}); + record->record_type = device::mojom::blink::NDEFRecordType::OPAQUE_RECORD; + record->data = WTF::Vector<uint8_t>(record_data); + message->data.push_back(std::move(record)); + + base::RunLoop loop; + EXPECT_CALL(*reader, OnMessage(MessageEquals(record_data))) + .WillOnce(Invoke([&](const NDEFMessage& message) { loop.Quit(); })); + + nfc_proxy->Push(std::move(message), /*options=*/nullptr, + base::BindLambdaForTesting([&](NFCErrorPtr error) { + nfc_service()->TriggerWatchEvent(); + })); + loop.Run(); + + nfc_proxy->RemoveReader(reader); + test::RunPendingTasks(); + EXPECT_EQ(nfc_service()->GetWatches().size(), 0u); +} + +TEST_F(NFCProxyTest, ErrorPath) { + auto& document = GetDocument(); + auto* nfc_proxy = NFCProxy::From(document); + NFCReaderOptionsPtr read_options = NFCReaderOptions::New(); + read_options->url = kTestUrl; + auto* reader = MakeGarbageCollected<MockNFCReader>(std::move(read_options)); + + nfc_proxy->AddReader(reader); + test::RunPendingTasks(); + + base::RunLoop loop; + EXPECT_CALL(*reader, OnError(_)).WillOnce(Invoke([&](const NFCError&) { + loop.Quit(); + })); + DestroyNfcService(); + loop.Run(); +} + +} // namespace +} // namespace blink
diff --git a/third_party/blink/renderer/modules/nfc/nfc_reader.cc b/third_party/blink/renderer/modules/nfc/nfc_reader.cc new file mode 100644 index 0000000..88d42b3 --- /dev/null +++ b/third_party/blink/renderer/modules/nfc/nfc_reader.cc
@@ -0,0 +1,22 @@ +// Copyright 2019 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 "third_party/blink/renderer/modules/nfc/nfc_reader.h" + +#include <utility> + +namespace blink { + +NFCReader::NFCReader(device::mojom::blink::NFCReaderOptionsPtr options) + : options_(std::move(options)) {} + +void NFCReader::Trace(blink::Visitor* visitor) {} + +// An reading event with NDEF message. +void NFCReader::OnMessage(const device::mojom::blink::NDEFMessage& message) {} + +// An reading error has occurred. +void NFCReader::OnError(const device::mojom::blink::NFCError& error) {} + +} // namespace blink
diff --git a/third_party/blink/renderer/modules/nfc/nfc_reader.h b/third_party/blink/renderer/modules/nfc/nfc_reader.h new file mode 100644 index 0000000..87f32d57 --- /dev/null +++ b/third_party/blink/renderer/modules/nfc/nfc_reader.h
@@ -0,0 +1,38 @@ +// Copyright 2019 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 THIRD_PARTY_BLINK_RENDERER_MODULES_NFC_NFC_READER_H_ +#define THIRD_PARTY_BLINK_RENDERER_MODULES_NFC_NFC_READER_H_ + +#include "services/device/public/mojom/nfc.mojom-blink.h" +#include "third_party/blink/renderer/modules/modules_export.h" +#include "third_party/blink/renderer/platform/heap/handle.h" + +namespace blink { + +class MODULES_EXPORT NFCReader : public GarbageCollectedMixin { + public: + explicit NFCReader(device::mojom::blink::NFCReaderOptionsPtr options); + virtual ~NFCReader() {} + + void Trace(blink::Visitor*) override; + + // Get reader options. + const device::mojom::blink::NFCReaderOptions& options() const { + return *options_; + } + + // An reading event with NDEF message. + virtual void OnMessage(const device::mojom::blink::NDEFMessage& message); + + // An reading error has occurred. + virtual void OnError(const device::mojom::blink::NFCError& error); + + private: + device::mojom::blink::NFCReaderOptionsPtr options_; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_NFC_NFC_READER_H_
diff --git a/third_party/blink/renderer/platform/animation/compositor_animation_client.h b/third_party/blink/renderer/platform/animation/compositor_animation_client.h index 095c7a35..97b47e4 100644 --- a/third_party/blink/renderer/platform/animation/compositor_animation_client.h +++ b/third_party/blink/renderer/platform/animation/compositor_animation_client.h
@@ -5,14 +5,14 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_ANIMATION_COMPOSITOR_ANIMATION_CLIENT_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_ANIMATION_COMPOSITOR_ANIMATION_CLIENT_H_ -#include "third_party/blink/public/platform/web_common.h" +#include "third_party/blink/renderer/platform/platform_export.h" namespace blink { class CompositorAnimation; // A client for compositor representation of Animation. -class BLINK_PLATFORM_EXPORT CompositorAnimationClient { +class PLATFORM_EXPORT CompositorAnimationClient { public: virtual ~CompositorAnimationClient();
diff --git a/third_party/blink/renderer/platform/audio/push_pull_fifo.h b/third_party/blink/renderer/platform/audio/push_pull_fifo.h index d7373903..a86ad7e 100644 --- a/third_party/blink/renderer/platform/audio/push_pull_fifo.h +++ b/third_party/blink/renderer/platform/audio/push_pull_fifo.h
@@ -5,8 +5,8 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_AUDIO_PUSH_PULL_FIFO_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_AUDIO_PUSH_PULL_FIFO_H_ -#include "third_party/blink/public/platform/web_common.h" #include "third_party/blink/renderer/platform/audio/audio_bus.h" +#include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/threading.h" @@ -37,7 +37,7 @@ // and fifo_Bus_) so the thread safety must be handled with care. // // TODO(hongchan): add a unit test for multi-thread access. -class BLINK_PLATFORM_EXPORT PushPullFIFO { +class PLATFORM_EXPORT PushPullFIFO { USING_FAST_MALLOC(PushPullFIFO); public:
diff --git a/third_party/blink/renderer/platform/partition_alloc_memory_dump_provider.h b/third_party/blink/renderer/platform/partition_alloc_memory_dump_provider.h index ee6dad2..4340ae3 100644 --- a/third_party/blink/renderer/platform/partition_alloc_memory_dump_provider.h +++ b/third_party/blink/renderer/platform/partition_alloc_memory_dump_provider.h
@@ -7,11 +7,11 @@ #include "base/macros.h" #include "base/trace_event/memory_dump_provider.h" -#include "third_party/blink/public/platform/web_common.h" +#include "third_party/blink/renderer/platform/platform_export.h" namespace blink { -class BLINK_PLATFORM_EXPORT PartitionAllocMemoryDumpProvider final +class PLATFORM_EXPORT PartitionAllocMemoryDumpProvider final : public base::trace_event::MemoryDumpProvider { // TODO(tasak): PartitionAllocMemoryDumpProvider should be // USING_FAST_MALLOC. c.f. crbug.com/584196
diff --git a/third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h b/third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h index 045e7f6..5e779ae 100644 --- a/third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h +++ b/third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h
@@ -15,7 +15,7 @@ #include "base/single_thread_task_runner.h" #include "base/time/time.h" #include "base/trace_event/trace_event.h" -#include "third_party/blink/public/platform/web_common.h" +#include "third_party/blink/renderer/platform/platform_export.h" namespace base { namespace trace_event { @@ -44,7 +44,7 @@ using IdleTask = base::OnceCallback<void(base::TimeTicks)>; // Used to request idle task deadlines and signal posting of idle tasks. - class BLINK_PLATFORM_EXPORT Delegate { + class PLATFORM_EXPORT Delegate { public: Delegate(); virtual ~Delegate();
diff --git a/third_party/blink/renderer/platform/wtf/time.cc b/third_party/blink/renderer/platform/wtf/time.cc index a378a72..3d3897a 100644 --- a/third_party/blink/renderer/platform/wtf/time.cc +++ b/third_party/blink/renderer/platform/wtf/time.cc
@@ -34,29 +34,11 @@ namespace WTF { -static TimeFunction g_mock_time_function_for_testing = nullptr; - double CurrentTime() { - if (g_mock_time_function_for_testing) - return g_mock_time_function_for_testing(); return base::Time::Now().ToDoubleT(); } -TimeFunction SetTimeFunctionsForTesting(TimeFunction new_function) { - TimeFunction old_function = g_mock_time_function_for_testing; - g_mock_time_function_for_testing = new_function; - return old_function; -} - -TimeFunction GetTimeFunctionForTesting() { - return g_mock_time_function_for_testing; -} - TimeTicks CurrentTimeTicks() { - if (g_mock_time_function_for_testing) { - return base::TimeTicks() + - base::TimeDelta::FromSecondsD(g_mock_time_function_for_testing()); - } return base::TimeTicks::Now(); }
diff --git a/third_party/blink/renderer/platform/wtf/time.h b/third_party/blink/renderer/platform/wtf/time.h index b8b1dec..b69059d 100644 --- a/third_party/blink/renderer/platform/wtf/time.h +++ b/third_party/blink/renderer/platform/wtf/time.h
@@ -37,15 +37,6 @@ using TimeFunction = double (*)(); -// Make all the time functions (currentTime(), monotonicallyIncreasingTime(), -// systemTraceTime()) return the result of the supplied function. Returns the -// pointer to the old time function. For both setting and getting, nullptr -// means using the default timing function returning the actual time. -WTF_EXPORT TimeFunction SetTimeFunctionsForTesting(TimeFunction); - -// Allows wtf/Time.h to use the same mock time function -WTF_EXPORT TimeFunction GetTimeFunctionForTesting(); - // Monotonically increasing clock time since an arbitrary and unspecified origin // time. Mockable using SetTimeFunctionsForTesting(). WTF_EXPORT TimeTicks CurrentTimeTicks(); @@ -62,10 +53,8 @@ using WTF::CurrentTimeTicks; using WTF::CurrentTimeTicksInMilliseconds; using WTF::CurrentTimeTicksInSeconds; -using WTF::SetTimeFunctionsForTesting; using WTF::Time; using WTF::TimeDelta; -using WTF::TimeFunction; using WTF::TimeTicks; #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_TIME_H_
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-features=NetworkService b/third_party/blink/web_tests/FlagExpectations/disable-features=NetworkService index 45ec228..c39c5626 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-features=NetworkService +++ b/third_party/blink/web_tests/FlagExpectations/disable-features=NetworkService
@@ -41,3 +41,10 @@ Bug(none) http/tests/security/img-redirect-to-crossorigin-credentials.html [ Skip ] Bug(none) mhtml/cid_in_html_resource.html [ Skip ] Bug(none) virtual/omt-worker-fetch [ Skip ] + +# Flaky tests: +Bug(none) external/wpt/html/cross-origin/null.tentative.html [ Skip ] +Bug(none) external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints.html [ Skip ] +Bug(none) external/wpt/mediacapture-image/MediaStreamTrack-getSettings.html [ Skip ] +Bug(none) media/video-buffered-unknown-duration.html [ Skip ] +Bug(none) virtual/blink-cors/http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index f6073276..ed8777f 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -5598,7 +5598,7 @@ # Sheriff 2019-03-25 crbug.com/944025 http/tests/preload/meta-viewport-device-width-link-headers.html [ Pass Failure ] crbug.com/945665 http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.js [ Pass Failure ] -crbug.com/945665 http/tests/devtools/elements/styles-3/styles-add-new-rule.js [ Pass Failure ] +crbug.com/945665 http/tests/devtools/elements/styles-3/styles-add-new-rule.js [ Pass Failure Timeout ] crbug.com/945665 http/tests/devtools/elements/styles-3/styles-disable-inherited.js [ Pass Failure ] crbug.com/945665 [ Win7 ] http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.js [ Failure Pass ] crbug.com/945665 http/tests/devtools/elements/styles-3/styles-change-node-while-editing.js [ Pass Failure ] @@ -5801,6 +5801,7 @@ crbug.com/943636 html5lib/generated/run-tests18-write.html [ Pass Failure ] crbug.com/943636 html5lib/generated/run-tests7-data.html [ Pass Failure ] crbug.com/943636 html5lib/generated/run-tests7-write.html [ Pass Failure ] +crbug.com/966932 http/tests/devtools/a11y-axe-core/elements/main-tool-test.js [ Timeout Pass ] crbug.com/943636 http/tests/devtools/console/console-eval-object-literal.js [ Pass Failure ] crbug.com/943636 http/tests/devtools/console/console-link-to-snippet.js [ Pass Failure ] crbug.com/943636 http/tests/devtools/console/console-log-eval-syntax-error.js [ Pass Failure ] @@ -5818,9 +5819,6 @@ crbug.com/943636 virtual/mouseevent_fractional/fast/events/window-onerror-05.html [ Pass Failure ] crbug.com/943636 virtual/omt-worker-fetch/fast/workers/worker-onerror-01.html [ Pass Failure ] -# Sheriff 2019-05-24 -crbug.com/966932 [ Linux ] http/tests/devtools/a11y-axe-core/elements/main-tool-test.js [ Timeout Pass ] - # Sheriff 2019-05-27 crbug.com/942411 [ Win ] http/tests/devtools/network/network-search.js [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/W3CImportExpectations b/third_party/blink/web_tests/W3CImportExpectations index b4d8a33..3f35cc1 100644 --- a/third_party/blink/web_tests/W3CImportExpectations +++ b/third_party/blink/web_tests/W3CImportExpectations
@@ -464,3 +464,13 @@ # Tests that fail in content_shell but pass when run manually. external/wpt/client-hints/accept_ch_lifetime.https.html [ Skip ] external/wpt/client-hints/accept_ch.https.html [ Skip ] + +# TODO(crbug.com/974254): Remove the following once we can handle spaces in test names. +external/wpt/webdriver/tests/element_click/interactability.py +external/wpt/webdriver/tests/find_element/find.py +external/wpt/webdriver/tests/find_element_from_element/find.py +external/wpt/webdriver/tests/find_elements/find.py +external/wpt/webdriver/tests/find_elements_from_element/find.py +external/wpt/webdriver/tests/new_session/invalid_capabilities.py +external/wpt/webdriver/tests/new_session/response.py +external/wpt/webdriver/tests/send_alert_text/send.py
diff --git a/third_party/blink/web_tests/accessibility/adjacent-continuations-cause-assertion-failure-expected.txt b/third_party/blink/web_tests/accessibility/adjacent-continuations-cause-assertion-failure-expected.txt index 7e8c4fa..1c825a75 100644 --- a/third_party/blink/web_tests/accessibility/adjacent-continuations-cause-assertion-failure-expected.txt +++ b/third_party/blink/web_tests/accessibility/adjacent-continuations-cause-assertion-failure-expected.txt
@@ -8,17 +8,15 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". AXRole: AXWebArea + AXRole: AXStaticText "x" + AXRole: AXInlineTextBox "x" AXRole: AXGenericContainer - AXRole: AXGenericContainer - AXRole: AXStaticText "x" - AXRole: AXInlineTextBox "x" - AXRole: AXGenericContainer - AXRole: AXStaticText "y" - AXRole: AXInlineTextBox "y" - AXRole: AXStaticText "z" - AXRole: AXInlineTextBox "z" - AXRole: AXGenericContainer - AXRole: AXStaticText "End of test" + AXRole: AXStaticText "y" + AXRole: AXInlineTextBox "y" + AXRole: AXStaticText "z" + AXRole: AXInlineTextBox "z" + AXRole: AXGenericContainer + AXRole: AXStaticText "End of test" PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/aria-hidden-hides-all-elements.html b/third_party/blink/web_tests/accessibility/aria-hidden-hides-all-elements.html index f094bf5..4db72a7 100644 --- a/third_party/blink/web_tests/accessibility/aria-hidden-hides-all-elements.html +++ b/third_party/blink/web_tests/accessibility/aria-hidden-hides-all-elements.html
@@ -26,45 +26,17 @@ <script> test(function(t) { - var content = accessibilityController.accessibleElementById("main"); - assert_equals(content.childrenCount, 8); - assert_true(content.isIgnored); - assert_false(content.childAtIndex(0).isIgnored); - assert_false(content.childAtIndex(1).isIgnored); - assert_false(content.childAtIndex(2).isIgnored); - assert_false(content.childAtIndex(3).isIgnored); - assert_true(content.childAtIndex(4).isIgnored); - assert_true(content.childAtIndex(5).isIgnored); - assert_false(content.childAtIndex(6).isIgnored); - assert_false(content.childAtIndex(7).isIgnored); + var content = accessibilityController.accessibleElementById("content"); + assert_equals(content.childrenCount, 6); document.getElementById("ul").tabIndex = -1; - assert_equals(content.childrenCount, 8, - "Making list focusable should not impact if it's hidden"); - assert_true(content.isIgnored); - assert_false(content.childAtIndex(0).isIgnored); - assert_false(content.childAtIndex(1).isIgnored); - assert_false(content.childAtIndex(2).isIgnored); - assert_false(content.childAtIndex(3).isIgnored); - assert_true(content.childAtIndex(4).isIgnored); - assert_false(content.childAtIndex(5).isIgnored); - assert_false(content.childAtIndex(6).isIgnored); - assert_false(content.childAtIndex(7).isIgnored); - + assert_equals(content.childrenCount, 7, + "Making list focusable should make it not hidden"); document.getElementById("ul").removeAttribute("tabindex"); - assert_equals(content.childrenCount, 8, + assert_equals(content.childrenCount, 6, "Making list unfocusable should make it hidden again"); - assert_true(content.isIgnored); - assert_false(content.childAtIndex(0).isIgnored); - assert_false(content.childAtIndex(1).isIgnored); - assert_false(content.childAtIndex(2).isIgnored); - assert_false(content.childAtIndex(3).isIgnored); - assert_true(content.childAtIndex(4).isIgnored); - assert_true(content.childAtIndex(5).isIgnored); - assert_false(content.childAtIndex(6).isIgnored); - assert_false(content.childAtIndex(7).isIgnored); }); </script>
diff --git a/third_party/blink/web_tests/accessibility/aria-hidden-update.html b/third_party/blink/web_tests/accessibility/aria-hidden-update.html index 539e5f16..7c1a1a0b 100644 --- a/third_party/blink/web_tests/accessibility/aria-hidden-update.html +++ b/third_party/blink/web_tests/accessibility/aria-hidden-update.html
@@ -30,43 +30,24 @@ assert_equals(parent.childAtIndex(0).name, button1.name, "button1 is first"); assert_equals(parent.childAtIndex(1).name, button2.name, "button2 is second"); assert_equals(parent.childAtIndex(2).name, button3.name, "button3 is third"); - assert_false(parent.childAtIndex(0).isIgnored); - assert_false(parent.childAtIndex(1).isIgnored); - assert_false(parent.childAtIndex(2).isIgnored); - // Make the 2nd button hidden. All 3 children should still be present. + // Make the 2nd button hidden. Only 1 and 3 should be present. document.getElementById("button2").setAttribute("aria-hidden", "true"); - // Verify that the 3 children are present. - assert_equals(parent.childAtIndex(0).name, button1.name, "button1 is first"); - assert_equals(parent.childAtIndex(1).name, button2.name, "button2 is second"); - assert_equals(parent.childAtIndex(2).name, button3.name, "button3 is third"); - assert_false(parent.childAtIndex(0).isIgnored); - assert_true(parent.childAtIndex(1).isIgnored); - assert_false(parent.childAtIndex(2).isIgnored); + assert_equals(parent.childAtIndex(0).name, button1.name, "button1 is first after setting button2 aria-hidden"); + assert_equals(parent.childAtIndex(1).name, button3.name, "button3 is second after setting button2 aria-hidden"); - // Make the 1st button hidden. All 3 children should still be present. + // Make the 1st button hidden. Only 3 should be present. document.getElementById("button1").setAttribute("aria-hidden", "true"); - // Verify that the 3 children are present. - assert_equals(parent.childAtIndex(0).name, button1.name, "button1 is first"); - assert_equals(parent.childAtIndex(1).name, button2.name, "button2 is second"); - assert_equals(parent.childAtIndex(2).name, button3.name, "button3 is third"); - assert_true(parent.childAtIndex(0).isIgnored); - assert_true(parent.childAtIndex(1).isIgnored); - assert_false(parent.childAtIndex(2).isIgnored); + assert_equals(parent.childAtIndex(0).name, button3.name, "button3 is first after setting button1 aria-hidden"); - // Make the 2nd button not hidden. All 3 children should still be present. + // Make the 2nd button not hidden. 2 and 3 should be present. document.getElementById("button2").setAttribute("aria-hidden", "false"); - // Verify that the 3 children are present. - assert_equals(parent.childAtIndex(0).name, button1.name, "button1 is first"); - assert_equals(parent.childAtIndex(1).name, button2.name, "button2 is second"); - assert_equals(parent.childAtIndex(2).name, button3.name, "button3 is third"); - assert_true(parent.childAtIndex(0).isIgnored); - assert_false(parent.childAtIndex(1).isIgnored); - assert_false(parent.childAtIndex(2).isIgnored); -}, "This test makes sure that when aria-hidden changes, the AX hierarchy does not change."); + assert_equals(parent.childAtIndex(0).name, button2.name, "button2 is first after clearning button2 aria-hidden"); + assert_equals(parent.childAtIndex(1).name, button3.name, "button3 is second after clearing button2 aria-hidden"); +}, "This test makes sure that when aria-hidden changes, the AX hierarchy is updated."); </script> </body>
diff --git a/third_party/blink/web_tests/accessibility/aria-hidden-updates-alldescendants.html b/third_party/blink/web_tests/accessibility/aria-hidden-updates-alldescendants.html index 7f2b3c9..50fc3d5cf 100644 --- a/third_party/blink/web_tests/accessibility/aria-hidden-updates-alldescendants.html +++ b/third_party/blink/web_tests/accessibility/aria-hidden-updates-alldescendants.html
@@ -30,22 +30,14 @@ test((t) => { var main = axElementById("main"); - assert_equals(main.childrenCount, 4); - assert_false(main.childAtIndex(0).isIgnored); - assert_true(main.childAtIndex(1).isIgnored); - assert_true(main.childAtIndex(2).isIgnored); - assert_true(main.childAtIndex(3).isIgnored); + assert_equals(main.childrenCount, 1); var group = document.getElementsByTagName('main')[0]; var items = group.getElementsByTagName('div'); items[0].removeAttribute('aria-hidden'); - assert_equals(main.childrenCount, 4, - "After removing aria-hidden, the count should still be 4."); - assert_false(main.childAtIndex(0).isIgnored); - assert_false(main.childAtIndex(1).isIgnored); - assert_true(main.childAtIndex(2).isIgnored); - assert_true(main.childAtIndex(3).isIgnored); + assert_equals(main.childrenCount, 2, + "After removing aria-hidden, the new count should be 2."); // And most importantly... assert_equals(main.childAtIndex(1).childrenCount, 1,
diff --git a/third_party/blink/web_tests/accessibility/aria-hidden-with-elements-expected.txt b/third_party/blink/web_tests/accessibility/aria-hidden-with-elements-expected.txt index f1d3109..f8c28a8 100644 --- a/third_party/blink/web_tests/accessibility/aria-hidden-with-elements-expected.txt +++ b/third_party/blink/web_tests/accessibility/aria-hidden-with-elements-expected.txt
@@ -11,14 +11,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS child.childrenCount is 6 -PASS child.childAtIndex(0).isIgnored is true -PASS child.childAtIndex(1).isIgnored is true -PASS child.childAtIndex(2).isIgnored is true -PASS child.childAtIndex(3).isIgnored is true -PASS child.childAtIndex(4).isIgnored is true -PASS child.childAtIndex(5).isIgnored is true -PASS child.role is 'AXRole: AXGenericContainer' +PASS child.childrenCount is 0 PASS child.role is 'AXRole: AXHeading' PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/aria-hidden-with-elements.html b/third_party/blink/web_tests/accessibility/aria-hidden-with-elements.html index 573b1f6..dbd0385 100644 --- a/third_party/blink/web_tests/accessibility/aria-hidden-with-elements.html +++ b/third_party/blink/web_tests/accessibility/aria-hidden-with-elements.html
@@ -42,24 +42,18 @@ description("This tests that aria-hidden works as expected on elements that are subclasses of AccessibilityRenderObject"); if (window.accessibilityController) { - var container = accessibilityController.accessibleElementById("container"); - // first child is an AXGroup that has 0 unignored children - var child = container.childAtIndex(0); - shouldBe("child.childrenCount", "6") - for(let i = 0; i < child.childrenCount; ++i) { - shouldBeTrue("child.childAtIndex(" + i +").isIgnored"); - } - let i = 1; - for(; i < container.childrenCount; ++i) { - child = container.childAtIndex(i); - if (!child.isIgnored) - break; - } - shouldBe("child.role", "'AXRole: AXGenericContainer'"); - child = container.childAtIndex(++i); - shouldBe("child.role", "'AXRole: AXHeading'"); + + var container = accessibilityController.accessibleElementById("container"); + + // first child is an AXGroup that has no children + var child = container.childAtIndex(0); + shouldBe("child.childrenCount", "0"); + + // The second child we ask for from the web area should be the heading, and we should have skipped over everything else. + child = container.childAtIndex(1); + shouldBe("child.role", "'AXRole: AXHeading'"); } </script>
diff --git a/third_party/blink/web_tests/accessibility/aria-hidden.html b/third_party/blink/web_tests/accessibility/aria-hidden.html index 35e5fd36..157d480 100644 --- a/third_party/blink/web_tests/accessibility/aria-hidden.html +++ b/third_party/blink/web_tests/accessibility/aria-hidden.html
@@ -14,9 +14,9 @@ test((t) => { var body = document.getElementById("body"); body.focus(); - var h2 = accessibilityController.focusedElement.childAtIndex(0).childAtIndex(0); - assert_equals(h2.name, "h1 test"); -}, "This tests that the aria-hidden attribute works correctly with accessibility. The H1 element (and its children) should appear in the AX hierarchy. The H1 element should be the first child"); + var h2 = accessibilityController.focusedElement.childAtIndex(0); + assert_equals(h2.name, "h2"); +}, "This tests that the aria-hidden attribute works correctly with accessibility. The H1 element (and its children) should not appear in the AX hierarchy. The H2 element should be the first child"); </script>
diff --git a/third_party/blink/web_tests/accessibility/aria-list-and-listitem-expected.txt b/third_party/blink/web_tests/accessibility/aria-list-and-listitem-expected.txt index e810782..1c39c22 100644 --- a/third_party/blink/web_tests/accessibility/aria-list-and-listitem-expected.txt +++ b/third_party/blink/web_tests/accessibility/aria-list-and-listitem-expected.txt
@@ -2,9 +2,9 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -obj.childAtIndex(0).childAtIndex(0).role = AXRole: AXList -obj.childAtIndex(0).childAtIndex(0).childAtIndex(0).role = AXRole: AXListItem -obj.childAtIndex(0).childAtIndex(0).childAtIndex(1).role = AXRole: AXListItem +obj.childAtIndex(0).role = AXRole: AXList +obj.childAtIndex(0).childAtIndex(0).role = AXRole: AXListItem +obj.childAtIndex(0).childAtIndex(1).role = AXRole: AXListItem PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/blink/web_tests/accessibility/aria-list-and-listitem.html b/third_party/blink/web_tests/accessibility/aria-list-and-listitem.html index 1d766b2e..f0274ef6 100644 --- a/third_party/blink/web_tests/accessibility/aria-list-and-listitem.html +++ b/third_party/blink/web_tests/accessibility/aria-list-and-listitem.html
@@ -23,9 +23,9 @@ document.getElementById("body").focus(); var obj = accessibilityController.focusedElement; + debug("obj.childAtIndex(0).role = " + obj.childAtIndex(0).role); debug("obj.childAtIndex(0).childAtIndex(0).role = " + obj.childAtIndex(0).childAtIndex(0).role); - debug("obj.childAtIndex(0).childAtIndex(0).childAtIndex(0).role = " + obj.childAtIndex(0).childAtIndex(0).childAtIndex(0).role); - debug("obj.childAtIndex(0).childAtIndex(0).childAtIndex(1).role = " + obj.childAtIndex(0).childAtIndex(0).childAtIndex(1).role); + debug("obj.childAtIndex(0).childAtIndex(1).role = " + obj.childAtIndex(0).childAtIndex(1).role); } </script>
diff --git a/third_party/blink/web_tests/accessibility/aria-none-role-expected.txt b/third_party/blink/web_tests/accessibility/aria-none-role-expected.txt index 59f83276..68842a4 100644 --- a/third_party/blink/web_tests/accessibility/aria-none-role-expected.txt +++ b/third_party/blink/web_tests/accessibility/aria-none-role-expected.txt
@@ -1,10 +1,10 @@ Link and text -This tests that the aria 'none' role works by successfully ignoring the element in the AX tree. +This tests that the aria 'none' role works by successfully removing the element from the AX tree. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS firstChild.isIgnored is true +PASS firstChild.role is 'AXRole: AXLink' PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/blink/web_tests/accessibility/aria-none-role.html b/third_party/blink/web_tests/accessibility/aria-none-role.html index be277bd..d5f86e3 100644 --- a/third_party/blink/web_tests/accessibility/aria-none-role.html +++ b/third_party/blink/web_tests/accessibility/aria-none-role.html
@@ -14,7 +14,7 @@ <script> - description("This tests that the aria 'none' role works by successfully ignoring the element in the AX tree."); + description("This tests that the aria 'none' role works by successfully removing the element from the AX tree."); if (window.accessibilityController) { @@ -22,7 +22,7 @@ body.focus(); var firstChild = accessibilityController.focusedElement.childAtIndex(0); - shouldBeTrue("firstChild.isIgnored"); + shouldBe("firstChild.role", "'AXRole: AXLink'"); } </script>
diff --git a/third_party/blink/web_tests/accessibility/aria-option-role.html b/third_party/blink/web_tests/accessibility/aria-option-role.html index 7b1cdd2..9d35a251 100644 --- a/third_party/blink/web_tests/accessibility/aria-option-role.html +++ b/third_party/blink/web_tests/accessibility/aria-option-role.html
@@ -16,9 +16,7 @@ var body = document.getElementById("body"); body.focus(); - var listBox = accessibilityController.focusedElement.childAtIndex(0).childAtIndex(0); - assert_equals(listBox.role, "AXRole: AXListBox"); - + var listBox = accessibilityController.focusedElement.childAtIndex(0); var firstChild = listBox.childAtIndex(0); var secondChild = listBox.childAtIndex(1); assert_equals(firstChild.role, "AXRole: AXListBoxOption");
diff --git a/third_party/blink/web_tests/accessibility/aria-owns-dynamic-changes.html b/third_party/blink/web_tests/accessibility/aria-owns-dynamic-changes.html index 73db0a8..aa9b6bc 100644 --- a/third_party/blink/web_tests/accessibility/aria-owns-dynamic-changes.html +++ b/third_party/blink/web_tests/accessibility/aria-owns-dynamic-changes.html
@@ -31,8 +31,7 @@ assert_equals(axFutureParent.childrenCount, 1, "after setting aria-oens"); child.style.visibility = 'hidden'; - assert_equals(axFutureParent.childrenCount, 1, "after setting hidden"); - assert_true(axFutureParent.childAtIndex(0).isIgnored); + assert_equals(axFutureParent.childrenCount, 0, "after setting hidden"); child.style.visibility = 'visible'; assert_equals(axFutureParent.childrenCount, 1, "after setting visible");
diff --git a/third_party/blink/web_tests/accessibility/aria-presentational-role-expected.txt b/third_party/blink/web_tests/accessibility/aria-presentational-role-expected.txt index 5447d45..3bd56fd 100644 --- a/third_party/blink/web_tests/accessibility/aria-presentational-role-expected.txt +++ b/third_party/blink/web_tests/accessibility/aria-presentational-role-expected.txt
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS firstChild.isIgnored is true +PASS firstChild.role is 'AXRole: AXLink' PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/blink/web_tests/accessibility/aria-presentational-role.html b/third_party/blink/web_tests/accessibility/aria-presentational-role.html index 0a73d9b4..fa02d05 100644 --- a/third_party/blink/web_tests/accessibility/aria-presentational-role.html +++ b/third_party/blink/web_tests/accessibility/aria-presentational-role.html
@@ -22,7 +22,7 @@ body.focus(); var firstChild = accessibilityController.focusedElement.childAtIndex(0); - shouldBeTrue("firstChild.isIgnored"); + shouldBe("firstChild.role", "'AXRole: AXLink'"); } </script>
diff --git a/third_party/blink/web_tests/accessibility/aria-tab-roles.html b/third_party/blink/web_tests/accessibility/aria-tab-roles.html index aae1cdd..3a98f96 100644 --- a/third_party/blink/web_tests/accessibility/aria-tab-roles.html +++ b/third_party/blink/web_tests/accessibility/aria-tab-roles.html
@@ -21,10 +21,10 @@ var body = document.getElementById("body"); body.focus(); - var tabList = accessibilityController.focusedElement.childAtIndex(0).childAtIndex(0); + var tabList = accessibilityController.focusedElement.childAtIndex(0); var tab1 = tabList.childAtIndex(0); var tab2 = tabList.childAtIndex(1); - var tabPanel = accessibilityController.focusedElement.childAtIndex(0).childAtIndex(1); + var tabPanel = accessibilityController.focusedElement.childAtIndex(1); assert_equals(tabList.role, "AXRole: AXTabList"); assert_equals(tab1.role, "AXRole: AXTab");
diff --git a/third_party/blink/web_tests/accessibility/aria-tables-expected.txt b/third_party/blink/web_tests/accessibility/aria-tables-expected.txt index dd0f33a..08d817b 100644 --- a/third_party/blink/web_tests/accessibility/aria-tables-expected.txt +++ b/third_party/blink/web_tests/accessibility/aria-tables-expected.txt
@@ -11,40 +11,39 @@ End of test AXRole: AXWebArea - AXRole: AXGenericContainer - AXRole: AXGrid - AXRole: AXRow - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXRow - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXRow - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXParagraph - AXRole: AXStaticText "End of test" + AXRole: AXGrid + AXRole: AXRow + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXRow + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXRow + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXParagraph + AXRole: AXStaticText "End of test" PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/description-calc-aria-describedby.html b/third_party/blink/web_tests/accessibility/description-calc-aria-describedby.html index f4bfed4..abb9be6 100644 --- a/third_party/blink/web_tests/accessibility/description-calc-aria-describedby.html +++ b/third_party/blink/web_tests/accessibility/description-calc-aria-describedby.html
@@ -117,7 +117,7 @@ <script> test(function(t){ - assert_true(accessibilityController.accessibleElementById("description6").isIgnored); + assert_equals(accessibilityController.accessibleElementById("description6"), undefined); var axDescribedby6 = accessibilityController.accessibleElementById("describedby6"); assert_equals(axDescribedby6.name, "Contents"); assert_equals(axDescribedby6.nameFrom, "contents");
diff --git a/third_party/blink/web_tests/accessibility/div-within-anchors-causes-crash-expected.txt b/third_party/blink/web_tests/accessibility/div-within-anchors-causes-crash-expected.txt index 67de7884..44279c2 100644 --- a/third_party/blink/web_tests/accessibility/div-within-anchors-causes-crash-expected.txt +++ b/third_party/blink/web_tests/accessibility/div-within-anchors-causes-crash-expected.txt
@@ -6,20 +6,13 @@ Before: AXRole: AXWebArea + AXRole: AXLink AXRole: AXGenericContainer - AXRole: AXGenericContainer - AXRole: AXGenericContainer - AXRole: AXLink - AXRole: AXGenericContainer - AXRole: AXGenericContainer - AXRole: AXStaticText "End of test" + AXRole: AXStaticText "End of test" After: AXRole: AXWebArea AXRole: AXGenericContainer - AXRole: AXGenericContainer - AXRole: AXGenericContainer - AXRole: AXGenericContainer - AXRole: AXStaticText "End of test" + AXRole: AXStaticText "End of test" PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt b/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt index 3f24e2f..43c1f2a 100644 --- a/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt +++ b/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt
@@ -50,150 +50,149 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". AXRole: AXWebArea + AXRole: AXBanner + AXRole: AXStaticText "This is a Header for this page" + AXRole: AXInlineTextBox "This is a Header for this page" + AXRole: AXHeading "Heading" + AXRole: AXStaticText "Heading" + AXRole: AXInlineTextBox "Heading" AXRole: AXGenericContainer - AXRole: AXBanner - AXRole: AXStaticText "This is a Header for this page" - AXRole: AXInlineTextBox "This is a Header for this page" - AXRole: AXHeading "Heading" - AXRole: AXStaticText "Heading" - AXRole: AXInlineTextBox "Heading" - AXRole: AXGenericContainer - AXRole: AXStaticText "Division" - AXRole: AXInlineTextBox "Division" - AXRole: AXParagraph - AXRole: AXStaticText "Paragraph" - AXRole: AXInlineTextBox "Paragraph" - AXRole: AXRuby - AXRole: AXAnnotation - AXRole: AXStaticText "한êµ" - AXRole: AXInlineTextBox "한êµ" - AXRole: AXStaticText "韓國" - AXRole: AXInlineTextBox "韓國" - AXRole: AXDescriptionList - AXRole: AXDescriptionListTerm - AXRole: AXStaticText "Coffee" - AXRole: AXInlineTextBox "Coffee" - AXRole: AXDescriptionListDetail - AXRole: AXStaticText "- black hot drink" - AXRole: AXInlineTextBox "- black hot drink" - AXRole: AXDescriptionListTerm - AXRole: AXStaticText "Milk" - AXRole: AXInlineTextBox "Milk" - AXRole: AXDescriptionListDetail - AXRole: AXStaticText "- white cold drink" - AXRole: AXInlineTextBox "- white cold drink" - AXRole: AXMath - AXRole: AXStaticText "x " - AXRole: AXInlineTextBox "x " - AXRole: AXStaticText "+ " - AXRole: AXInlineTextBox "+ " - AXRole: AXStaticText "a " - AXRole: AXInlineTextBox "a " - AXRole: AXStaticText "/ " - AXRole: AXInlineTextBox "/ " - AXRole: AXStaticText "b" - AXRole: AXInlineTextBox "b" - AXRole: AXMain - AXRole: AXArticle - AXRole: AXGenericContainer - AXRole: AXHeading "Most important heading here" - AXRole: AXStaticText "Most important heading here" - AXRole: AXInlineTextBox "Most important heading here" - AXRole: AXHeading "Google Chrome" - AXRole: AXStaticText "Google Chrome" - AXRole: AXInlineTextBox "Google Chrome" - AXRole: AXParagraph - AXRole: AXStaticText "Google Chrome is a free, open-source web browser developed by Google, released in 2008." - AXRole: AXInlineTextBox "Google Chrome is a free, open-source web browser developed by Google, " - AXRole: AXInlineTextBox "released in 2008." - AXRole: AXGenericContainer - AXRole: AXParagraph - AXRole: AXStaticText "Footer in article" - AXRole: AXInlineTextBox "Footer in article" - AXRole: AXNavigation - AXRole: AXLink "HTML" - AXRole: AXStaticText "HTML" - AXRole: AXInlineTextBox "HTML" - AXRole: AXStaticText " | " - AXRole: AXInlineTextBox " | " - AXRole: AXLink "CSS" - AXRole: AXStaticText "CSS" - AXRole: AXInlineTextBox "CSS" - AXRole: AXStaticText " | " - AXRole: AXInlineTextBox " | " - AXRole: AXLink "JavaScript" - AXRole: AXStaticText "JavaScript" - AXRole: AXInlineTextBox "JavaScript" - AXRole: AXStaticText " |" - AXRole: AXInlineTextBox " |" - AXRole: AXComplementary - AXRole: AXParagraph - AXRole: AXStaticText "Text that appears under aside" - AXRole: AXInlineTextBox "Text that appears under aside" - AXRole: AXPre - AXRole: AXStaticText "Text in a pre -element -" - AXRole: AXInlineTextBox "Text in a pre" - AXRole: AXInlineTextBox " -" - AXRole: AXInlineTextBox "element" - AXRole: AXInlineTextBox " -" - AXRole: AXRegion + AXRole: AXStaticText "Division" + AXRole: AXInlineTextBox "Division" + AXRole: AXParagraph + AXRole: AXStaticText "Paragraph" + AXRole: AXInlineTextBox "Paragraph" + AXRole: AXRuby + AXRole: AXAnnotation + AXRole: AXStaticText "한êµ" + AXRole: AXInlineTextBox "한êµ" + AXRole: AXStaticText "韓國" + AXRole: AXInlineTextBox "韓國" + AXRole: AXDescriptionList + AXRole: AXDescriptionListTerm + AXRole: AXStaticText "Coffee" + AXRole: AXInlineTextBox "Coffee" + AXRole: AXDescriptionListDetail + AXRole: AXStaticText "- black hot drink" + AXRole: AXInlineTextBox "- black hot drink" + AXRole: AXDescriptionListTerm + AXRole: AXStaticText "Milk" + AXRole: AXInlineTextBox "Milk" + AXRole: AXDescriptionListDetail + AXRole: AXStaticText "- white cold drink" + AXRole: AXInlineTextBox "- white cold drink" + AXRole: AXMath + AXRole: AXStaticText "x " + AXRole: AXInlineTextBox "x " + AXRole: AXStaticText "+ " + AXRole: AXInlineTextBox "+ " + AXRole: AXStaticText "a " + AXRole: AXInlineTextBox "a " + AXRole: AXStaticText "/ " + AXRole: AXInlineTextBox "/ " + AXRole: AXStaticText "b" + AXRole: AXInlineTextBox "b" + AXRole: AXMain + AXRole: AXArticle AXRole: AXGenericContainer AXRole: AXHeading "Most important heading here" AXRole: AXStaticText "Most important heading here" AXRole: AXInlineTextBox "Most important heading here" + AXRole: AXHeading "Google Chrome" + AXRole: AXStaticText "Google Chrome" + AXRole: AXInlineTextBox "Google Chrome" AXRole: AXParagraph - AXRole: AXStaticText "Section" - AXRole: AXInlineTextBox "Section" + AXRole: AXStaticText "Google Chrome is a free, open-source web browser developed by Google, released in 2008." + AXRole: AXInlineTextBox "Google Chrome is a free, open-source web browser developed by Google, " + AXRole: AXInlineTextBox "released in 2008." AXRole: AXGenericContainer AXRole: AXParagraph - AXRole: AXStaticText "Footer in section" - AXRole: AXInlineTextBox "Footer in section" + AXRole: AXStaticText "Footer in article" + AXRole: AXInlineTextBox "Footer in article" + AXRole: AXNavigation + AXRole: AXLink "HTML" + AXRole: AXStaticText "HTML" + AXRole: AXInlineTextBox "HTML" + AXRole: AXStaticText " | " + AXRole: AXInlineTextBox " | " + AXRole: AXLink "CSS" + AXRole: AXStaticText "CSS" + AXRole: AXInlineTextBox "CSS" + AXRole: AXStaticText " | " + AXRole: AXInlineTextBox " | " + AXRole: AXLink "JavaScript" + AXRole: AXStaticText "JavaScript" + AXRole: AXInlineTextBox "JavaScript" + AXRole: AXStaticText " |" + AXRole: AXInlineTextBox " |" + AXRole: AXComplementary + AXRole: AXParagraph + AXRole: AXStaticText "Text that appears under aside" + AXRole: AXInlineTextBox "Text that appears under aside" + AXRole: AXPre + AXRole: AXStaticText "Text in a pre +element +" + AXRole: AXInlineTextBox "Text in a pre" + AXRole: AXInlineTextBox " +" + AXRole: AXInlineTextBox "element" + AXRole: AXInlineTextBox " +" + AXRole: AXRegion AXRole: AXGenericContainer - AXRole: AXStaticText "Written by Julie" - AXRole: AXInlineTextBox "Written by Julie" - AXRole: AXLineBreak " -" - AXRole: AXInlineTextBox " -" - AXRole: AXStaticText "Visit us at:www.chromium.org" - AXRole: AXInlineTextBox "Visit us at:www.chromium.org" - AXRole: AXLineBreak " -" - AXRole: AXInlineTextBox " -" + AXRole: AXHeading "Most important heading here" + AXRole: AXStaticText "Most important heading here" + AXRole: AXInlineTextBox "Most important heading here" AXRole: AXParagraph - AXRole: AXStaticText "January" - AXRole: AXInlineTextBox "January" - AXRole: AXDialog - AXRole: AXStaticText "This is an open dialog window" - AXRole: AXInlineTextBox "This is an open dialog window" - AXRole: AXTable "Caption" - AXRole: AXCaption - AXRole: AXStaticText "Caption" - AXRole: AXInlineTextBox "Caption" - AXRole: AXRow - AXRole: AXCell "Cell1" - AXRole: AXStaticText "Cell1" - AXRole: AXInlineTextBox "Cell1" - AXRole: AXCell "Cell2" - AXRole: AXStaticText "Cell2" - AXRole: AXInlineTextBox "Cell2" - AXRole: AXFigure "Fig1. - Blue Box" - AXRole: AXImage "blue" - AXRole: AXFigcaption - AXRole: AXStaticText "Fig1. - Blue Box" - AXRole: AXInlineTextBox "Fig1. - Blue Box" - AXRole: AXEmbeddedObject - AXRole: AXFooter + AXRole: AXStaticText "Section" + AXRole: AXInlineTextBox "Section" + AXRole: AXGenericContainer AXRole: AXParagraph - AXRole: AXStaticText "This is a footer." - AXRole: AXInlineTextBox "This is a footer." + AXRole: AXStaticText "Footer in section" + AXRole: AXInlineTextBox "Footer in section" + AXRole: AXGenericContainer + AXRole: AXStaticText "Written by Julie" + AXRole: AXInlineTextBox "Written by Julie" + AXRole: AXLineBreak " +" + AXRole: AXInlineTextBox " +" + AXRole: AXStaticText "Visit us at:www.chromium.org" + AXRole: AXInlineTextBox "Visit us at:www.chromium.org" + AXRole: AXLineBreak " +" + AXRole: AXInlineTextBox " +" + AXRole: AXParagraph + AXRole: AXStaticText "January" + AXRole: AXInlineTextBox "January" + AXRole: AXDialog + AXRole: AXStaticText "This is an open dialog window" + AXRole: AXInlineTextBox "This is an open dialog window" + AXRole: AXTable "Caption" + AXRole: AXCaption + AXRole: AXStaticText "Caption" + AXRole: AXInlineTextBox "Caption" + AXRole: AXRow + AXRole: AXCell "Cell1" + AXRole: AXStaticText "Cell1" + AXRole: AXInlineTextBox "Cell1" + AXRole: AXCell "Cell2" + AXRole: AXStaticText "Cell2" + AXRole: AXInlineTextBox "Cell2" + AXRole: AXFigure "Fig1. - Blue Box" + AXRole: AXImage "blue" + AXRole: AXFigcaption + AXRole: AXStaticText "Fig1. - Blue Box" + AXRole: AXInlineTextBox "Fig1. - Blue Box" + AXRole: AXEmbeddedObject + AXRole: AXFooter AXRole: AXParagraph - AXRole: AXStaticText "End of test" + AXRole: AXStaticText "This is a footer." + AXRole: AXInlineTextBox "This is a footer." + AXRole: AXParagraph + AXRole: AXStaticText "End of test" PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/first-letter-text-transform-causes-crash-expected.txt b/third_party/blink/web_tests/accessibility/first-letter-text-transform-causes-crash-expected.txt index 0574dc6..7ed39de 100644 --- a/third_party/blink/web_tests/accessibility/first-letter-text-transform-causes-crash-expected.txt +++ b/third_party/blink/web_tests/accessibility/first-letter-text-transform-causes-crash-expected.txt
@@ -7,12 +7,11 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". AXRole: AXWebArea - AXRole: AXGenericContainer - AXRole: AXDescriptionListTerm - AXRole: AXStaticText "Dt" - AXRole: AXInlineTextBox "Dt" - AXRole: AXParagraph - AXRole: AXStaticText "End of test" + AXRole: AXDescriptionListTerm + AXRole: AXStaticText "Dt" + AXRole: AXInlineTextBox "Dt" + AXRole: AXParagraph + AXRole: AXStaticText "End of test" PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/image-map1-expected.txt b/third_party/blink/web_tests/accessibility/image-map1-expected.txt index d7afe984..b41347d5 100644 --- a/third_party/blink/web_tests/accessibility/image-map1-expected.txt +++ b/third_party/blink/web_tests/accessibility/image-map1-expected.txt
@@ -2,12 +2,12 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS container.childAtIndex(0).role is 'AXRole: AXLink' -PASS container.childAtIndex(0).name is 'Link1' -PASS container.childAtIndex(1).role is 'AXRole: AXLink' -PASS container.childAtIndex(1).name is 'Link2' -PASS container.childAtIndex(2).role is 'AXRole: AXLink' -PASS container.childAtIndex(2).name is 'Link3' +PASS body.childAtIndex(0).role is 'AXRole: AXLink' +PASS body.childAtIndex(0).name is 'Link1' +PASS body.childAtIndex(1).role is 'AXRole: AXLink' +PASS body.childAtIndex(1).name is 'Link2' +PASS body.childAtIndex(2).role is 'AXRole: AXLink' +PASS body.childAtIndex(2).name is 'Link3' PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/blink/web_tests/accessibility/image-map1.html b/third_party/blink/web_tests/accessibility/image-map1.html index 3e4e4ab1..b19498b5a 100644 --- a/third_party/blink/web_tests/accessibility/image-map1.html +++ b/third_party/blink/web_tests/accessibility/image-map1.html
@@ -27,15 +27,15 @@ if (window.accessibilityController) { document.getElementById("body").focus(); - var container = accessibilityController.focusedElement.childAtIndex(0); - shouldBe("container.childAtIndex(0).role", "'AXRole: AXLink'"); - shouldBe("container.childAtIndex(0).name", "'Link1'"); + var body = accessibilityController.focusedElement; + shouldBe("body.childAtIndex(0).role", "'AXRole: AXLink'"); + shouldBe("body.childAtIndex(0).name", "'Link1'"); - shouldBe("container.childAtIndex(1).role", "'AXRole: AXLink'"); - shouldBe("container.childAtIndex(1).name", "'Link2'"); + shouldBe("body.childAtIndex(1).role", "'AXRole: AXLink'"); + shouldBe("body.childAtIndex(1).name", "'Link2'"); - shouldBe("container.childAtIndex(2).role", "'AXRole: AXLink'"); - shouldBe("container.childAtIndex(2).name", "'Link3'"); + shouldBe("body.childAtIndex(2).role", "'AXRole: AXLink'"); + shouldBe("body.childAtIndex(2).name", "'Link3'"); } </script>
diff --git a/third_party/blink/web_tests/accessibility/image-map2.html b/third_party/blink/web_tests/accessibility/image-map2.html index 1a29b48..dff9001 100644 --- a/third_party/blink/web_tests/accessibility/image-map2.html +++ b/third_party/blink/web_tests/accessibility/image-map2.html
@@ -24,7 +24,7 @@ body.focus(); result.innerText += "Image map - test 2 - 2 Links (alt tags)\n"; result.innerText += "----------------------\n"; - result.innerText += accessibilityController.focusedElement.childAtIndex(0).attributesOfChildren() + "\n\n"; + result.innerText += accessibilityController.focusedElement.attributesOfChildren() + "\n\n"; } </script> </body>
diff --git a/third_party/blink/web_tests/accessibility/is-ignored-change-sends-notification.html b/third_party/blink/web_tests/accessibility/is-ignored-change-sends-notification.html index abeb687e..d9c6c71 100644 --- a/third_party/blink/web_tests/accessibility/is-ignored-change-sends-notification.html +++ b/third_party/blink/web_tests/accessibility/is-ignored-change-sends-notification.html
@@ -76,7 +76,7 @@ document.getElementById('hiddenDiv').hidden = false; assert_true(accessibleElementById('invisibleDivContainer') != null); - assert_true(accessibleElementById('invisibleDiv').isIgnored); + assert_false(accessibleElementById('invisibleDiv') != null); accessibleElementById('invisibleDivContainer').addNotificationListener(t.step_func((notification) => { console.log('Got ' + notification + ' notification on invisibleDivContainer');
diff --git a/third_party/blink/web_tests/accessibility/legend-expected.txt b/third_party/blink/web_tests/accessibility/legend-expected.txt index bc026954..403ca87 100644 --- a/third_party/blink/web_tests/accessibility/legend-expected.txt +++ b/third_party/blink/web_tests/accessibility/legend-expected.txt
@@ -7,17 +7,16 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". AXRole: AXWebArea + AXRole: AXGroup "Choose a shipping method:" + AXRole: AXLegend << fieldset's titleUIElement + AXRole: AXStaticText "Choose a shipping method:" + AXRole: AXInlineTextBox "Choose a shipping method:" + AXRole: AXGroup + AXRole: AXRadioButton + AXRole: AXStaticText "Overnight" + AXRole: AXInlineTextBox "Overnight" AXRole: AXGenericContainer - AXRole: AXGroup "Choose a shipping method:" - AXRole: AXLegend << fieldset's titleUIElement - AXRole: AXStaticText "Choose a shipping method:" - AXRole: AXInlineTextBox "Choose a shipping method:" - AXRole: AXGroup - AXRole: AXRadioButton - AXRole: AXStaticText "Overnight" - AXRole: AXInlineTextBox "Overnight" - AXRole: AXGenericContainer - AXRole: AXStaticText "End of test" + AXRole: AXStaticText "End of test" PASS titleUIElement != null is true PASS titleUIElementText.name is 'Choose a shipping method:'
diff --git a/third_party/blink/web_tests/accessibility/listitem-presentation-inherited-expected.txt b/third_party/blink/web_tests/accessibility/listitem-presentation-inherited-expected.txt index e767491f..5b4af7f1 100644 --- a/third_party/blink/web_tests/accessibility/listitem-presentation-inherited-expected.txt +++ b/third_party/blink/web_tests/accessibility/listitem-presentation-inherited-expected.txt
@@ -12,32 +12,26 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". AXRole: AXWebArea - AXRole: AXGenericContainer - AXRole: AXPresentational - AXRole: AXListItem - AXRole: AXListMarker "• " - AXRole: AXStaticText "Item 1" - AXRole: AXInlineTextBox "Item 1" - AXRole: AXListItem - AXRole: AXListMarker "• " - AXRole: AXStaticText "Item 2" - AXRole: AXInlineTextBox "Item 2" - AXRole: AXListItem - AXRole: AXListMarker "• " - AXRole: AXStaticText "Item 3" - AXRole: AXInlineTextBox "Item 3" - AXRole: AXPresentational - AXRole: AXListItem - AXRole: AXStaticText "Plain Text 1" - AXRole: AXInlineTextBox "Plain Text 1" - AXRole: AXListItem - AXRole: AXStaticText "Plain Text 2" - AXRole: AXInlineTextBox "Plain Text 2" - AXRole: AXListItem - AXRole: AXStaticText "Plain Text 3" - AXRole: AXInlineTextBox "Plain Text 3" - AXRole: AXParagraph - AXRole: AXStaticText "End of test" + AXRole: AXListItem + AXRole: AXListMarker "• " + AXRole: AXStaticText "Item 1" + AXRole: AXInlineTextBox "Item 1" + AXRole: AXListItem + AXRole: AXListMarker "• " + AXRole: AXStaticText "Item 2" + AXRole: AXInlineTextBox "Item 2" + AXRole: AXListItem + AXRole: AXListMarker "• " + AXRole: AXStaticText "Item 3" + AXRole: AXInlineTextBox "Item 3" + AXRole: AXStaticText "Plain Text 1" + AXRole: AXInlineTextBox "Plain Text 1" + AXRole: AXStaticText "Plain Text 2" + AXRole: AXInlineTextBox "Plain Text 2" + AXRole: AXStaticText "Plain Text 3" + AXRole: AXInlineTextBox "Plain Text 3" + AXRole: AXParagraph + AXRole: AXStaticText "End of test" PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/name-calc-aria-hidden.html b/third_party/blink/web_tests/accessibility/name-calc-aria-hidden.html index ee893dc..02be35c 100644 --- a/third_party/blink/web_tests/accessibility/name-calc-aria-hidden.html +++ b/third_party/blink/web_tests/accessibility/name-calc-aria-hidden.html
@@ -50,7 +50,7 @@ <script> test(function(t) { var axHeading3 = accessibilityController.accessibleElementById("heading3"); - assert_true(axHeading3.isIgnored); + assert_equals(axHeading3, undefined); var axButton3 = accessibilityController.accessibleElementById("button3"); assert_equals(axButton3.name, "Text within hidden subtree"); }, "Aria-labelledby can get accessible text from within aria-hidden subtree");
diff --git a/third_party/blink/web_tests/accessibility/name-calc-aria-labelledby.html b/third_party/blink/web_tests/accessibility/name-calc-aria-labelledby.html index d3de7a9a..21715c4 100644 --- a/third_party/blink/web_tests/accessibility/name-calc-aria-labelledby.html +++ b/third_party/blink/web_tests/accessibility/name-calc-aria-labelledby.html
@@ -121,7 +121,7 @@ <script> test(function(t){ - assert_true(accessibilityController.accessibleElementById("label7").isIgnored); + assert_equals(accessibilityController.accessibleElementById("label7"), undefined); var axLabelledby7 = accessibilityController.accessibleElementById("labelledby7"); assert_equals(axLabelledby7.name, "Invisible label"); assert_equals(axLabelledby7.nameFrom, "relatedElement");
diff --git a/third_party/blink/web_tests/accessibility/nochildren-elements.html b/third_party/blink/web_tests/accessibility/nochildren-elements.html index b8c30e3..117af13 100644 --- a/third_party/blink/web_tests/accessibility/nochildren-elements.html +++ b/third_party/blink/web_tests/accessibility/nochildren-elements.html
@@ -20,14 +20,6 @@ <script> - function allChildrenAreIgnored(element) { - for(let i = 0; i < element.childCount; ++i) { - if (!element.childAtIndex(i).isIgnored) - return false; - } - return true; - } - if (window.accessibilityController) { var result = document.getElementById("result"); @@ -43,19 +35,19 @@ var element4Children = element4.attributesOfChildren(); var element5Children = element5.attributesOfChildren(); - result.innerText += allChildrenAreIgnored(element1) ? "PASS" : "FAIL#1 " + element1Children; + result.innerText += element1Children != "" ? "FAIL#1 " + element1Children : "PASS"; result.innerText += "\n"; - result.innerText += allChildrenAreIgnored(element2) ? "PASS" : "FAIL#2 " + element2Children; + result.innerText += element2Children != "" ? "FAIL#2 " + element2Children : "PASS"; result.innerText += "\n"; - result.innerText += allChildrenAreIgnored(element3) ? "PASS" : "FAIL#3 " + element3Children; + result.innerText += element3Children != "" ? "FAIL#3 " + element3Children : "PASS"; result.innerText += "\n"; - result.innerText += allChildrenAreIgnored(element4) ? "PASS" : "FAIL#4 " + element4Children; + result.innerText += element4Children == "" ? "FAIL#4 " : "PASS"; result.innerText += "\n"; - result.innerText += allChildrenAreIgnored(element5) ? "PASS" : "FAIL#5 " + element5Children; + result.innerText += element5Children == "" ? "FAIL#5 " : "PASS"; result.innerText += "\n"; } </script>
diff --git a/third_party/blink/web_tests/accessibility/onclick-handlers.html b/third_party/blink/web_tests/accessibility/onclick-handlers.html index 3d802c7b..7c12ae4 100644 --- a/third_party/blink/web_tests/accessibility/onclick-handlers.html +++ b/third_party/blink/web_tests/accessibility/onclick-handlers.html
@@ -17,7 +17,7 @@ var body = document.getElementById("body"); body.focus(); var focusedElement = accessibilityController.focusedElement; - var textElement = focusedElement.childAtIndex(0).childAtIndex(1).childAtIndex(0); + var textElement = focusedElement.childAtIndex(1).childAtIndex(0); if (textElement.isPressActionSupported()) { result.innerText += "Test passed\n";
diff --git a/third_party/blink/web_tests/accessibility/presentation-owned-elements-expected.txt b/third_party/blink/web_tests/accessibility/presentation-owned-elements-expected.txt index c2af6141..a09e421 100644 --- a/third_party/blink/web_tests/accessibility/presentation-owned-elements-expected.txt +++ b/third_party/blink/web_tests/accessibility/presentation-owned-elements-expected.txt
@@ -30,98 +30,83 @@ AXRole: AXWebArea AXRole: AXGenericContainer + AXRole: AXStaticText "These lists have a static text role because they have a presentation role." + AXRole: AXInlineTextBox "These lists have a static text role because they have a presentation role." + AXRole: AXStaticText "Presentation Item 1" + AXRole: AXInlineTextBox "Presentation Item 1" + AXRole: AXStaticText "Presentation Item 2" + AXRole: AXInlineTextBox "Presentation Item 2" + AXRole: AXGenericContainer + AXRole: AXStaticText "The first list item has a listitem role even if ul has a presentation role because it has an explicit role." + AXRole: AXInlineTextBox "The first list item has a listitem role even if ul has a presentation role because it has an explicit role." + AXRole: AXListItem + AXRole: AXListMarker "• " + AXRole: AXStaticText "Explicit Item 1" + AXRole: AXInlineTextBox "Explicit Item 1" + AXRole: AXStaticText "Implicit Item 2" + AXRole: AXInlineTextBox "Implicit Item 2" + AXRole: AXGenericContainer + AXRole: AXStaticText "These two tables have static text roles because they have presentation roles." + AXRole: AXInlineTextBox "These two tables have static text roles because they have presentation roles." + AXRole: AXGenericContainer + AXRole: AXStaticText "Presentation th" + AXRole: AXInlineTextBox "Presentation th" + AXRole: AXGenericContainer + AXRole: AXStaticText "Presentation th" + AXRole: AXInlineTextBox "Presentation th" + AXRole: AXGenericContainer + AXRole: AXStaticText "Presentation th" + AXRole: AXInlineTextBox "Presentation th" + AXRole: AXGenericContainer + AXRole: AXStaticText "The "Presentation th" has a static text role because it has a presentation role." + AXRole: AXInlineTextBox "The "Presentation th" has a static text role because it has a presentation role." + AXRole: AXTable + AXRole: AXStaticText "Presentation th" + AXRole: AXInlineTextBox "Presentation th" + AXRole: AXRow + AXRole: AXCell "Normal td" + AXRole: AXStaticText "Normal td" + AXRole: AXInlineTextBox "Normal td" + AXRole: AXGenericContainer + AXRole: AXStaticText "The row for "Explicit th" has a row role even if table has a presentation role because it has an explicit role." + AXRole: AXInlineTextBox "The row for "Explicit th" has a row role even if table has a presentation role because it has an explicit role." + AXRole: AXRow AXRole: AXGenericContainer - AXRole: AXStaticText "These lists have a static text role because they have a presentation role." - AXRole: AXInlineTextBox "These lists have a static text role because they have a presentation role." - AXRole: AXPresentational - AXRole: AXListItem - AXRole: AXStaticText "Presentation Item 1" - AXRole: AXInlineTextBox "Presentation Item 1" - AXRole: AXListItem - AXRole: AXStaticText "Presentation Item 2" - AXRole: AXInlineTextBox "Presentation Item 2" - AXRole: AXGenericContainer - AXRole: AXStaticText "The first list item has a listitem role even if ul has a presentation role because it has an explicit role." - AXRole: AXInlineTextBox "The first list item has a listitem role even if ul has a presentation role because it has an explicit role." - AXRole: AXPresentational - AXRole: AXListItem - AXRole: AXListMarker "• " - AXRole: AXStaticText "Explicit Item 1" - AXRole: AXInlineTextBox "Explicit Item 1" - AXRole: AXListItem - AXRole: AXStaticText "Implicit Item 2" - AXRole: AXInlineTextBox "Implicit Item 2" - AXRole: AXGenericContainer - AXRole: AXStaticText "These two tables have static text roles because they have presentation roles." - AXRole: AXInlineTextBox "These two tables have static text roles because they have presentation roles." - AXRole: AXPresentational - AXRole: AXGenericContainer - AXRole: AXStaticText "Presentation th" - AXRole: AXInlineTextBox "Presentation th" - AXRole: AXGenericContainer - AXRole: AXStaticText "Presentation th" - AXRole: AXInlineTextBox "Presentation th" - AXRole: AXPresentational - AXRole: AXGenericContainer - AXRole: AXStaticText "Presentation th" - AXRole: AXInlineTextBox "Presentation th" - AXRole: AXGenericContainer - AXRole: AXStaticText "The "Presentation th" has a static text role because it has a presentation role." - AXRole: AXInlineTextBox "The "Presentation th" has a static text role because it has a presentation role." - AXRole: AXTable - AXRole: AXGenericContainer - AXRole: AXStaticText "Presentation th" - AXRole: AXInlineTextBox "Presentation th" - AXRole: AXRow - AXRole: AXCell "Normal td" - AXRole: AXStaticText "Normal td" - AXRole: AXInlineTextBox "Normal td" - AXRole: AXGenericContainer - AXRole: AXStaticText "The row for "Explicit th" has a row role even if table has a presentation role because it has an explicit role." - AXRole: AXInlineTextBox "The row for "Explicit th" has a row role even if table has a presentation role because it has an explicit role." - AXRole: AXPresentational - AXRole: AXRow - AXRole: AXGenericContainer - AXRole: AXStaticText "Explicit th" - AXRole: AXInlineTextBox "Explicit th" - AXRole: AXGenericContainer - AXRole: AXStaticText "Implicit td" - AXRole: AXInlineTextBox "Implicit td" - AXRole: AXGenericContainer - AXRole: AXStaticText "The menu items except button have a static text role because it has a presentation role and is disabled." - AXRole: AXInlineTextBox "The menu items except button have a static text role because it has a presentation role and is disabled." - AXRole: AXLineBreak " + AXRole: AXStaticText "Explicit th" + AXRole: AXInlineTextBox "Explicit th" + AXRole: AXGenericContainer + AXRole: AXStaticText "Implicit td" + AXRole: AXInlineTextBox "Implicit td" + AXRole: AXGenericContainer + AXRole: AXStaticText "The menu items except button have a static text role because it has a presentation role and is disabled." + AXRole: AXInlineTextBox "The menu items except button have a static text role because it has a presentation role and is disabled." + AXRole: AXLineBreak " " - AXRole: AXInlineTextBox " + AXRole: AXInlineTextBox " " - AXRole: AXStaticText "Button has a button role because it has an explicit role." - AXRole: AXInlineTextBox "Button has a button role because it has an explicit role." - AXRole: AXPresentational - AXRole: AXMenuItemCheckBox - AXRole: AXStaticText " I have a bike " - AXRole: AXInlineTextBox " I have a bike " - AXRole: AXButton "Click me" - AXRole: AXMenuItemRadio - AXRole: AXStaticText " Male " - AXRole: AXInlineTextBox " Male " - AXRole: AXMenuItemRadio - AXRole: AXStaticText " Female" - AXRole: AXInlineTextBox " Female" - AXRole: AXGenericContainer - AXRole: AXStaticText "The option A has a static text role because it has a presentation role and is disabled." - AXRole: AXInlineTextBox "The option A has a static text role because it has a presentation role and is disabled." - AXRole: AXLineBreak " + AXRole: AXStaticText "Button has a button role because it has an explicit role." + AXRole: AXInlineTextBox "Button has a button role because it has an explicit role." + AXRole: AXStaticText " I have a bike " + AXRole: AXInlineTextBox " I have a bike " + AXRole: AXButton "Click me" + AXRole: AXStaticText " Male " + AXRole: AXInlineTextBox " Male " + AXRole: AXStaticText " Female" + AXRole: AXInlineTextBox " Female" + AXRole: AXGenericContainer + AXRole: AXStaticText "The option A has a static text role because it has a presentation role and is disabled." + AXRole: AXInlineTextBox "The option A has a static text role because it has a presentation role and is disabled." + AXRole: AXLineBreak " " - AXRole: AXInlineTextBox " + AXRole: AXInlineTextBox " " - AXRole: AXStaticText "The option B has option role because it has an explicit role." - AXRole: AXInlineTextBox "The option B has option role because it has an explicit role." - AXRole: AXGroup - AXRole: AXPresentational - AXRole: AXStaticText "A" - AXRole: AXListBoxOption "B" - AXRole: AXParagraph - AXRole: AXStaticText "End of test" + AXRole: AXStaticText "The option B has option role because it has an explicit role." + AXRole: AXInlineTextBox "The option B has option role because it has an explicit role." + AXRole: AXGroup + AXRole: AXStaticText "A" + AXRole: AXListBoxOption "B" + AXRole: AXParagraph + AXRole: AXStaticText "End of test" PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/role-attribute-expected.txt b/third_party/blink/web_tests/accessibility/role-attribute-expected.txt index 645af0a20..e8f6a23 100644 --- a/third_party/blink/web_tests/accessibility/role-attribute-expected.txt +++ b/third_party/blink/web_tests/accessibility/role-attribute-expected.txt
@@ -24,47 +24,46 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". AXRole: AXWebArea - AXRole: AXGenericContainer - AXRole: AXRadioGroup - AXRole: AXRadioButton "Explicit Item 1" - AXRole: AXRadioButton "Explicit Item 2" - AXRole: AXRadioButton "Explicit Item 3" - AXRole: AXList - AXRole: AXListItem - AXRole: AXListMarker "1. " - AXRole: AXStaticText "Implicit Item 1" - AXRole: AXInlineTextBox "Implicit Item 1" - AXRole: AXListItem - AXRole: AXListMarker "2. " - AXRole: AXStaticText "Implicit Item 2" - AXRole: AXInlineTextBox "Implicit Item 2" - AXRole: AXListItem - AXRole: AXListMarker "3. " - AXRole: AXStaticText "Implicit Item 3" - AXRole: AXInlineTextBox "Implicit Item 3" + AXRole: AXRadioGroup + AXRole: AXRadioButton "Explicit Item 1" + AXRole: AXRadioButton "Explicit Item 2" + AXRole: AXRadioButton "Explicit Item 3" + AXRole: AXList + AXRole: AXListItem + AXRole: AXListMarker "1. " + AXRole: AXStaticText "Implicit Item 1" + AXRole: AXInlineTextBox "Implicit Item 1" + AXRole: AXListItem + AXRole: AXListMarker "2. " + AXRole: AXStaticText "Implicit Item 2" + AXRole: AXInlineTextBox "Implicit Item 2" + AXRole: AXListItem + AXRole: AXListMarker "3. " + AXRole: AXStaticText "Implicit Item 3" + AXRole: AXInlineTextBox "Implicit Item 3" + AXRole: AXGroup AXRole: AXGroup - AXRole: AXGroup - AXRole: AXTextField "Explicit Option 1" - AXRole: AXTextField "Explicit Option 2" - AXRole: AXListBox - AXRole: AXListBoxOption "Implicit Option 1" - AXRole: AXListBoxOption "Implicit Option 2" - AXRole: AXGroup - AXRole: AXMenuListPopup - AXRole: AXTextField "Explicit dropdown 1" - AXRole: AXTextField "Explicit dropdown 2" - AXRole: AXPopUpButton - AXRole: AXMenuListPopup - AXRole: AXMenuListOption "Implicit dropdown 1" - AXRole: AXMenuListOption "Implicit dropdown 2" - AXRole: AXStatus - AXRole: AXProgressIndicator - AXRole: AXStatus - AXRole: AXSliderThumb - AXRole: AXSlider - AXRole: AXSliderThumb - AXRole: AXParagraph - AXRole: AXStaticText "End of test" + AXRole: AXTextField "Explicit Option 1" + AXRole: AXTextField "Explicit Option 2" + AXRole: AXListBox + AXRole: AXListBoxOption "Implicit Option 1" + AXRole: AXListBoxOption "Implicit Option 2" + AXRole: AXGroup + AXRole: AXMenuListPopup + AXRole: AXTextField "Explicit dropdown 1" + AXRole: AXTextField "Explicit dropdown 2" + AXRole: AXPopUpButton + AXRole: AXMenuListPopup + AXRole: AXMenuListOption "Implicit dropdown 1" + AXRole: AXMenuListOption "Implicit dropdown 2" + AXRole: AXStatus + AXRole: AXProgressIndicator + AXRole: AXStatus + AXRole: AXSliderThumb + AXRole: AXSlider + AXRole: AXSliderThumb + AXRole: AXParagraph + AXRole: AXStaticText "End of test" PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/role-change.html b/third_party/blink/web_tests/accessibility/role-change.html index 627438dc..ab29560 100644 --- a/third_party/blink/web_tests/accessibility/role-change.html +++ b/third_party/blink/web_tests/accessibility/role-change.html
@@ -33,7 +33,7 @@ test(function(t) { const axPresentation = axElementById('row1'); - assert_true(axPresentation.isIgnored); + assert_equals(axPresentation, undefined); // Change role attribute document.getElementById('row1').setAttribute('role', 'row');
diff --git a/third_party/blink/web_tests/accessibility/table-cell-for-column-and-row-crash.html b/third_party/blink/web_tests/accessibility/table-cell-for-column-and-row-crash.html index efbcb6fe..fe886be 100644 --- a/third_party/blink/web_tests/accessibility/table-cell-for-column-and-row-crash.html +++ b/third_party/blink/web_tests/accessibility/table-cell-for-column-and-row-crash.html
@@ -22,7 +22,7 @@ document.getElementById("body").focus(); var axBody = accessibilityController.focusedElement; - var axTable = axBody.childAtIndex(0).childAtIndex(0); + var axTable = axBody.childAtIndex(0); shouldBe("axTable.role", "'AXRole: AXTable'"); // Trying to reference the same cell for the table
diff --git a/third_party/blink/web_tests/accessibility/table-cell-spans.html b/third_party/blink/web_tests/accessibility/table-cell-spans.html index 8192620..5ab96075 100644 --- a/third_party/blink/web_tests/accessibility/table-cell-spans.html +++ b/third_party/blink/web_tests/accessibility/table-cell-spans.html
@@ -41,7 +41,7 @@ var body = document.getElementById("body"); body.focus(); - var table = accessibilityController.focusedElement.childAtIndex(0).childAtIndex(0); + var table = accessibilityController.focusedElement.childAtIndex(0); var cell = table.cellForColumnAndRow(0,0); result.innerText += "----------------------\n";
diff --git a/third_party/blink/web_tests/accessibility/table-cells.html b/third_party/blink/web_tests/accessibility/table-cells.html index b2aba83..a31b20b3 100644 --- a/third_party/blink/web_tests/accessibility/table-cells.html +++ b/third_party/blink/web_tests/accessibility/table-cells.html
@@ -56,7 +56,7 @@ var body = document.getElementById("body"); body.focus(); - var table = accessibilityController.focusedElement.childAtIndex(0).childAtIndex(0); + var table = accessibilityController.focusedElement.childAtIndex(0); result.innerText += "------------------------\n"; result.innerText += "[0,0]\n" + table.cellForColumnAndRow(0,0).allAttributes() + "\n";
diff --git a/third_party/blink/web_tests/accessibility/table-header-column-row-expected.txt b/third_party/blink/web_tests/accessibility/table-header-column-row-expected.txt index 0aa24184..093399882 100644 --- a/third_party/blink/web_tests/accessibility/table-header-column-row-expected.txt +++ b/third_party/blink/web_tests/accessibility/table-header-column-row-expected.txt
@@ -25,152 +25,151 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". AXRole: AXWebArea - AXRole: AXGenericContainer - AXRole: AXTable "scope test" - AXRole: AXCaption - AXRole: AXStaticText "scope test" - AXRole: AXInlineTextBox "scope test" - AXRole: AXRow - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXRow - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXRow - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXTable "row header and column header (1)" - AXRole: AXCaption - AXRole: AXStaticText "row header and column header (1)" - AXRole: AXInlineTextBox "row header and column header (1)" - AXRole: AXRow - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXRow - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXRow - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXTable "row header and column header (2)" - AXRole: AXCaption - AXRole: AXStaticText "row header and column header (2)" - AXRole: AXInlineTextBox "row header and column header (2)" - AXRole: AXRow - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXRow - AXRole: AXColumnHeader "column head" - AXRole: AXStaticText "column head" - AXRole: AXInlineTextBox "column head" - AXRole: AXColumnHeader "column head" - AXRole: AXStaticText "column head" - AXRole: AXInlineTextBox "column head" - AXRole: AXColumnHeader "column head" - AXRole: AXStaticText "column head" - AXRole: AXInlineTextBox "column head" - AXRole: AXRow - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXTable "row header and column header (3)" - AXRole: AXCaption - AXRole: AXStaticText "row header and column header (3)" - AXRole: AXInlineTextBox "row header and column header (3)" - AXRole: AXRow - AXRole: AXCell - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXRow - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXRow - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXCell "data" - AXRole: AXStaticText "data" - AXRole: AXInlineTextBox "data" - AXRole: AXTable "row header and column header (4)" - AXRole: AXCaption - AXRole: AXStaticText "row header and column header (4)" - AXRole: AXInlineTextBox "row header and column header (4)" - AXRole: AXRow - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXColumnHeader "col head" - AXRole: AXStaticText "col head" - AXRole: AXInlineTextBox "col head" - AXRole: AXRow - AXRole: AXRowHeader "row head" - AXRole: AXStaticText "row head" - AXRole: AXInlineTextBox "row head" - AXRole: AXParagraph - AXRole: AXStaticText "End of test" + AXRole: AXTable "scope test" + AXRole: AXCaption + AXRole: AXStaticText "scope test" + AXRole: AXInlineTextBox "scope test" + AXRole: AXRow + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXRow + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXRow + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXTable "row header and column header (1)" + AXRole: AXCaption + AXRole: AXStaticText "row header and column header (1)" + AXRole: AXInlineTextBox "row header and column header (1)" + AXRole: AXRow + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXRow + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXRow + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXTable "row header and column header (2)" + AXRole: AXCaption + AXRole: AXStaticText "row header and column header (2)" + AXRole: AXInlineTextBox "row header and column header (2)" + AXRole: AXRow + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXRow + AXRole: AXColumnHeader "column head" + AXRole: AXStaticText "column head" + AXRole: AXInlineTextBox "column head" + AXRole: AXColumnHeader "column head" + AXRole: AXStaticText "column head" + AXRole: AXInlineTextBox "column head" + AXRole: AXColumnHeader "column head" + AXRole: AXStaticText "column head" + AXRole: AXInlineTextBox "column head" + AXRole: AXRow + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXTable "row header and column header (3)" + AXRole: AXCaption + AXRole: AXStaticText "row header and column header (3)" + AXRole: AXInlineTextBox "row header and column header (3)" + AXRole: AXRow + AXRole: AXCell + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXRow + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXRow + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXCell "data" + AXRole: AXStaticText "data" + AXRole: AXInlineTextBox "data" + AXRole: AXTable "row header and column header (4)" + AXRole: AXCaption + AXRole: AXStaticText "row header and column header (4)" + AXRole: AXInlineTextBox "row header and column header (4)" + AXRole: AXRow + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXColumnHeader "col head" + AXRole: AXStaticText "col head" + AXRole: AXInlineTextBox "col head" + AXRole: AXRow + AXRole: AXRowHeader "row head" + AXRole: AXStaticText "row head" + AXRole: AXInlineTextBox "row head" + AXRole: AXParagraph + AXRole: AXStaticText "End of test" PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/table-one-cell.html b/third_party/blink/web_tests/accessibility/table-one-cell.html index 3b188635..d5eb9cbc 100644 --- a/third_party/blink/web_tests/accessibility/table-one-cell.html +++ b/third_party/blink/web_tests/accessibility/table-one-cell.html
@@ -24,7 +24,7 @@ var body = document.getElementById("body"); body.focus(); - var table = accessibilityController.focusedElement.childAtIndex(0).childAtIndex(0); + var table = accessibilityController.focusedElement.childAtIndex(0); result.innerText += table.allAttributes(); }
diff --git a/third_party/blink/web_tests/accessibility/table-with-aria-role.html b/third_party/blink/web_tests/accessibility/table-with-aria-role.html index 8a7056f1..ebbce6a 100644 --- a/third_party/blink/web_tests/accessibility/table-with-aria-role.html +++ b/third_party/blink/web_tests/accessibility/table-with-aria-role.html
@@ -21,7 +21,7 @@ if (window.accessibilityController) { var body = document.getElementById("body"); body.focus(); - result.innerText += accessibilityController.focusedElement.childAtIndex(0).attributesOfChildren(); + result.innerText += accessibilityController.focusedElement.attributesOfChildren(); } </script> </body>
diff --git a/third_party/blink/web_tests/accessibility/table-with-empty-thead-causes-crash-expected.txt b/third_party/blink/web_tests/accessibility/table-with-empty-thead-causes-crash-expected.txt index 273f5e46..84782eab0 100644 --- a/third_party/blink/web_tests/accessibility/table-with-empty-thead-causes-crash-expected.txt +++ b/third_party/blink/web_tests/accessibility/table-with-empty-thead-causes-crash-expected.txt
@@ -7,17 +7,16 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". AXRole: AXWebArea - AXRole: AXGenericContainer - AXRole: AXTable "table" - AXRole: AXRow - AXRole: AXCell "1" - AXRole: AXStaticText "1" - AXRole: AXInlineTextBox "1" - AXRole: AXCell "2" - AXRole: AXStaticText "2" - AXRole: AXInlineTextBox "2" - AXRole: AXParagraph - AXRole: AXStaticText "End of test" + AXRole: AXTable "table" + AXRole: AXRow + AXRole: AXCell "1" + AXRole: AXStaticText "1" + AXRole: AXInlineTextBox "1" + AXRole: AXCell "2" + AXRole: AXStaticText "2" + AXRole: AXInlineTextBox "2" + AXRole: AXParagraph + AXRole: AXStaticText "End of test" PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/accessibility/table-with-presentation-role.html b/third_party/blink/web_tests/accessibility/table-with-presentation-role.html index 39a147fc..16bc714 100644 --- a/third_party/blink/web_tests/accessibility/table-with-presentation-role.html +++ b/third_party/blink/web_tests/accessibility/table-with-presentation-role.html
@@ -15,7 +15,7 @@ <script> test(() => { - var axTableContainer = accessibilityController.accessibleElementById('container').childAtIndex(0); + var axTableContainer = accessibilityController.accessibleElementById('container'); assert_equals(axTableContainer.childrenCount, 4); var axTextContainer1 = axTableContainer.childAtIndex(0); assert_equals(axTextContainer1.role, "AXRole: AXGenericContainer");
diff --git a/third_party/blink/web_tests/accessibility/table-with-rules.html b/third_party/blink/web_tests/accessibility/table-with-rules.html index e4f371df..2d89383b 100644 --- a/third_party/blink/web_tests/accessibility/table-with-rules.html +++ b/third_party/blink/web_tests/accessibility/table-with-rules.html
@@ -24,7 +24,7 @@ // these should be the tables. in this order // the last table should not show up as a table. for (var k = 0; k < 5; k++) { - var table = accessibilityController.focusedElement.childAtIndex(0).childAtIndex(k); + var table = accessibilityController.focusedElement.childAtIndex(k); result.innerText += table.allAttributes() + "\n\n"; } }
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/Element-insertAdjacentText.tentative.html b/third_party/blink/web_tests/external/wpt/trusted-types/Element-insertAdjacentText.tentative.html new file mode 100644 index 0000000..f6221362 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/trusted-types/Element-insertAdjacentText.tentative.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="support/helper.sub.js"></script> +<body> +<div id="container"></div> +<script> + var container = document.querySelector('#container'); + + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); + let before = 'before'; + let after = 'after'; + let htmlBefore = p.createHTML(before); + let htmlAfter = p.createHTML(after); + + var d = document.createElement('div'); + container.appendChild(d); + + d.insertAdjacentHTML('beforebegin', html); + assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE); + assert_equals(d.previousSibling.data, RESULTS.HTML); + + d.insertAdjacentHTML('afterbegin', htmlBefore); + d.insertAdjacentHTML('beforeend', htmlAfter); + assert_equals(d.innerHTML, before + after); + + d.insertAdjacentHTML('afterend', html); + assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE); + assert_equals(d.nextSibling.data, RESULTS.HTML); + + while (container.firstChild) + container.firstChild.remove(); + }, "insertAdjacentHTML with html assigned via policy (successful HTML transformation)."); +</script> +
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-text-node-insertion-into-script-element.tentative.html b/third_party/blink/web_tests/external/wpt/trusted-types/block-text-node-insertion-into-script-element.tentative.html new file mode 100644 index 0000000..a6aa061 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-text-node-insertion-into-script-element.tentative.html
@@ -0,0 +1,67 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="support/helper.sub.js"></script> + <meta http-equiv="Content-Security-Policy" content="trusted-types *"> +</head> +<body> +<div id="container"></div> +<script> + var container = document.querySelector("#container"); + + // Regression tests for 'Bypass via insertAdjacentText', reported at + // https://github.com/WICG/trusted-types/issues/133 + + // Original report: + test(t => { + // Setup: Create a <script> element with a <p> child. + let s = document.createElement("script"); + let p = document.createElement("p"); + p.textContent = "hello('world');"; + s.appendChild(p); + container.appendChild(s); + + // Sanity check: The <p> content doesn't count as source text. + assert_equals(s.text, ""); + + // Try to insertAdjacentText into the <script>, starting from the <p> + try { + p.insertAdjacentText("beforebegin", "hello('before');"); + } catch (err) { } + assert_equals(s.text, ""); + try { + p.insertAdjacentText("afterend", "hello('after');"); + } catch (err) { } + assert_equals(s.text, ""); + }, "Regression test: Bypass via insertAdjacentText, initial comment"); + + // Variant: Create a <script> element and create & insert a text node. Then + // insert it into the document container to make it live. + test(t => { + // Setup: Create a <script> element, and insert text via a text node. + let s = document.createElement("script"); + let text = document.createTextNode("alert('hello');"); + assert_throws(new TypeError(), + _ => { s.appendChild(text); }, + "We should not be able to modify <script>."); + container.appendChild(s); + }, "Regression test: Bypass via appendChild into off-document script element"); + + // Variant: Create a <script> element and insert it into the document. Then + // create a text node and insert it into the live <script> element. + test(t => { + // Setup: Create a <script> element, insert it into the doc, and then create + // and insert text via a text node. + let s = document.createElement("script"); + container.appendChild(s); + let text = document.createTextNode("alert('hello');"); + assert_throws(new TypeError(), + _ => { s.appendChild(text); }, + "We should not be able to modify <script>."); + }, "Regression test: Bypass via appendChild into live script element"); +</script> +</body> +</html> +
diff --git a/third_party/blink/web_tests/fast/spatial-navigation/snav-cursor_pointer-clickable.html b/third_party/blink/web_tests/fast/spatial-navigation/snav-cursor_pointer-clickable.html new file mode 100644 index 0000000..91b7905f --- /dev/null +++ b/third_party/blink/web_tests/fast/spatial-navigation/snav-cursor_pointer-clickable.html
@@ -0,0 +1,29 @@ +<!doctype html> +<style> + #popup {width: 300px; height: 150px; background: LightBlue;} + .button {font-family: sans-serif; font-weight: bold; width: 80px; height: 40px; background: SeaGreen; color: white; cursor: pointer;} + .balancer {display: flex; justify-content: space-evenly; align-items: center;} +</style> + +<div class="balancer" id="popup"> + <div class="button balancer" id="ok"><div id="dontgohere1">OK</div></div> + <div class="button balancer" id="cancel"><div id="dontgohere2">Cancel</div></div> +</div> + +<div id="log"><div> + +<p>A typical popup dialog that listens for clicks on its two custom buttons.</p> + +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="resources/snav-testharness.js"></script> +<script> + var resultMap = [ + ["Down", "ok"], + ["Right", "cancel"], + ["Left", "ok"], + ]; + snav.assertFocusMoves(resultMap); +</script> + +<p><em>Manual test instruction: Ensure that all buttons can be focused.</em></p>
diff --git a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt index b8d61a92..aa23359 100644 --- a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt +++ b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt
@@ -2,11 +2,10 @@ WebArea GenericContainer - GenericContainer - text "Some text in a div, also a" + text "Some text in a div, also a" + InlineTextBox + link "link" + text "link" InlineTextBox - link "link" - text "link" - InlineTextBox - button "Hello Button" + button "Hello Button"
diff --git a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt index c2a3769..115af994 100644 --- a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt +++ b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt
@@ -22,6 +22,8 @@ } WebArea + img + *Ignored { "nodeId": "<string>", "ignored": true, @@ -46,6 +48,8 @@ } WebArea + button "Buttons are leaf nodes" + *Ignored { "nodeId": "<string>", "ignored": true, @@ -163,6 +167,18 @@ WebArea GenericContainer + img + button "Buttons are leaf nodes" + text "List item also presentational" + *GenericContainer + text "Div in list isn't presentational" + checkbox "Content within label refers to label container" + button "aria-hidden false button" + GenericContainer + combobox + GenericContainer "span with ARIA label" + text "div with display contents - should be ignored, but text should be included" + GenericContainer { "nodeId": "<string>", "ignored": false, @@ -341,6 +357,21 @@ WebArea GenericContainer + img + button "Buttons are leaf nodes" + text "List item also presentational" + GenericContainer + checkbox "Content within label refers to label container" + button "aria-hidden false button" + GenericContainer + *combobox + MenuListPopup + menuitem "Options should be" + menuitem "sent down even though" + menuitem "they are grandchildren" + GenericContainer "span with ARIA label" + text "div with display contents - should be ignored, but text should be included" + GenericContainer { "nodeId": "<string>", "ignored": false, @@ -401,6 +432,11 @@ } WebArea + combobox + MenuListPopup + *menuitem "Options should be" + menuitem "sent down even though" + menuitem "they are grandchildren" { "nodeId": "<string>", "ignored": false, @@ -497,6 +533,18 @@ WebArea GenericContainer + img + button "Buttons are leaf nodes" + text "List item also presentational" + GenericContainer + checkbox "Content within label refers to label container" + button "aria-hidden false button" + GenericContainer + combobox + *GenericContainer "span with ARIA label" + text "should not be ignored" + text "div with display contents - should be ignored, but text should be included" + GenericContainer { "nodeId": "<string>", "ignored": false, @@ -558,6 +606,18 @@ WebArea GenericContainer + img + button "Buttons are leaf nodes" + text "List item also presentational" + GenericContainer + checkbox "Content within label refers to label container" + button "aria-hidden false button" + GenericContainer + combobox + GenericContainer "span with ARIA label" + text "div with display contents - should be ignored, but text should be included" + *GenericContainer + text "summary element without details parent is ignored" { "nodeId": "<string>", "ignored": false,
diff --git a/third_party/blink/web_tests/media/alpha-video-playback-expected.png b/third_party/blink/web_tests/media/alpha-video-playback-expected.png deleted file mode 100644 index e2872f31..0000000 --- a/third_party/blink/web_tests/media/alpha-video-playback-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-expected.png index aee8ab37..f91e21f8 100644 --- a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-shadow-expected.png index 8778bfd..954208e 100644 --- a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-shadow-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-shadow-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-expected.png index 0232744..1a6a813 100644 --- a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/alpha-video-playback-expected.png b/third_party/blink/web_tests/platform/mac/media/alpha-video-playback-expected.png new file mode 100644 index 0000000..0e018ea --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/media/alpha-video-playback-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-canvas-alpha-expected.png b/third_party/blink/web_tests/platform/mac/media/video-canvas-alpha-expected.png index c21d7235..735ca83d 100644 --- a/third_party/blink/web_tests/platform/mac/media/video-canvas-alpha-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/video-canvas-alpha-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-expected.png index 4182ca64..8450f387 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png index 0730721..27f7b58d 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png Binary files differ
diff --git a/third_party/closure_compiler/externs/webview_tag.js b/third_party/closure_compiler/externs/webview_tag.js index 537ad913..2e890874 100644 --- a/third_party/closure_compiler/externs/webview_tag.js +++ b/third_party/closure_compiler/externs/webview_tag.js
@@ -198,6 +198,12 @@ /** @type {!WebRequestOptionallySynchronousEvent} */ WebRequestEventInterface.prototype.onBeforeSendHeaders; +/** @type {!WebRequestEvent} */ +WebRequestEventInterface.prototype.onCompleted; + +/** @type {!WebRequestOnErrorOccurredEvent} */ +WebRequestEventInterface.prototype.onErrorOccurred; + /** @type {!WebRequestOptionallySynchronousEvent} */ WebRequestEventInterface.prototype.onHeadersReceived;
diff --git a/third_party/grpc/BUILD.gn b/third_party/grpc/BUILD.gn index fd42aeb..e8e92388 100644 --- a/third_party/grpc/BUILD.gn +++ b/third_party/grpc/BUILD.gn
@@ -18,6 +18,7 @@ cflags = [ "-Wno-implicit-fallthrough", "-Wno-constant-conversion", + "-fno-sanitize=cfi-derived-cast,cfi-unrelated-cast", ] defines = [ "GRPC_ARES=0" ] }
diff --git a/third_party/wtl/Ms-PL.txt b/third_party/wtl/Ms-PL.txt index 9ccddb2..6d2577a 100644 --- a/third_party/wtl/Ms-PL.txt +++ b/third_party/wtl/Ms-PL.txt
@@ -1,65 +1,22 @@ -Microsoft Permissive License (Ms-PL) -Published: October 12, 2006 +Microsoft Public License (MS-PL) - -This license governs use of the accompanying software. If you use the software, -you accept this license. If you do not accept the license, do not use the -software. - +This license governs use of the accompanying software. If you use the software, you +accept this license. If you do not accept the license, do not use the software. 1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" -have the same meaning here as under U.S. copyright law. - -A "contribution" is the original software, or any additions or changes to the -software. - -A "contributor" is any person that distributes its contribution under this -license. - -"Licensed patents" are a contributor’s patent claims that read directly on its -contribution. - +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the +same meaning here as under U.S. copyright law. +A "contribution" is the original software, or any additions or changes to the software. +A "contributor" is any person that distributes its contribution under this license. +"Licensed patents" are a contributor's patent claims that read directly on its contribution. 2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the -license conditions and limitations in section 3, each contributor grants you a -non-exclusive, worldwide, royalty-free copyright license to reproduce its -contribution, prepare derivative works of its contribution, and distribute its -contribution or any derivative works that you create. - -(B) Patent Grant- Subject to the terms of this license, including the license -conditions and limitations in section 3, each contributor grants you a -non-exclusive, worldwide, royalty-free license under its licensed patents to -make, have made, use, sell, offer for sale, import, and/or otherwise dispose of -its contribution in the software or derivative works of the contribution in the -software. - +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. 3. Conditions and Limitations - -(A) No Trademark License- This license does not grant you rights to use any -contributors’ name, logo, or trademarks. - -(B) If you bring a patent claim against any contributor over patents that you -claim are infringed by the software, your patent license from such contributor -to the software ends automatically. - -(C) If you distribute any portion of the software, you must retain all -copyright, patent, trademark, and attribution notices that are present in the -software. - -(D) If you distribute any portion of the software in source code form, you may -do so only under this license by including a complete copy of this license with -your distribution. If you distribute any portion of the software in compiled or -object code form, you may only do so under a license that complies with this -license. - -(E) The software is licensed "as-is." You bear the risk of using it. The -contributors give no express warranties, guarantees or conditions. You may have -additional consumer rights under your local laws which this license cannot -change. To the extent permitted under your local laws, the contributors exclude -the implied warranties of merchantability, fitness for a particular purpose and -non-infringement. +(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. +(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. +(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. +(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.
diff --git a/third_party/wtl/README.chromium b/third_party/wtl/README.chromium index 9663bf1..4c069c8b 100644 --- a/third_party/wtl/README.chromium +++ b/third_party/wtl/README.chromium
@@ -1,11 +1,10 @@ Name: Windows Template Library (WTL) URL: https://sourceforge.net/projects/wtl/files/WTL%2010/ -Version: 10.0.8356 +Version: 10.0.9163 +Commit: commit 57a7c4e2629cb85c6f27faa91650e047c4220e15 License: Microsoft Permissive License License File: Ms-PL.txt Security Critical: yes Local changes (all part of wtl10.patch): -- Remove extra ; after namespace closing brace. -- Add override modifier on virtual function redefinition. - Fix calls to ATLVERIFY to avoid the error: expression result unused.
diff --git a/third_party/wtl/include/atlapp.h b/third_party/wtl/include/atlapp.h index 36c7544..6c4d9b0f 100644 --- a/third_party/wtl/include/atlapp.h +++ b/third_party/wtl/include/atlapp.h
@@ -55,6 +55,10 @@ #error WTL10 doesn't support _ATL_MIN_CRT #endif +#ifdef _ATL_NO_MSIMG + #error WTL10 doesn't support _ATL_NO_MSIMG +#endif + #include <limits.h> #ifdef _MT #include <process.h> // for _beginthreadex @@ -63,6 +67,9 @@ #include <commctrl.h> #pragma comment(lib, "comctl32.lib") +#include <commdlg.h> +#include <shellapi.h> + // Check for VS2005 without newer WinSDK #if (_MSC_VER == 1400) && !defined(RB_GETEXTENDEDSTYLE) #error WTL10 requires WinSDK 6.0 ot higher @@ -144,6 +151,13 @@ #define _WTL_STACK_ALLOC_THRESHOLD 512 #endif +// Used to declare overriden virtual functions +#if (__cplusplus >= 201103L) || (defined(_MSC_VER) && _MSC_VER >= 1900) + #define _WTL_OVERRIDE override +#else + #define _WTL_OVERRIDE +#endif + namespace WTL { @@ -363,7 +377,7 @@ #endif return uSize; } -} +} // namespace RunTimeHelper /////////////////////////////////////////////////////////////////////////////// @@ -390,7 +404,7 @@ { return ATL::_AtlWinModule.ExtractCreateWndData(); } -} +} // namespace ModuleHelper /////////////////////////////////////////////////////////////////////////////// @@ -493,7 +507,7 @@ va_end(args); return nRes; } -} // namespace SecureHelper +} // namespace SecureHelper /////////////////////////////////////////////////////////////////////////////// @@ -526,7 +540,7 @@ { return _tcsrchr(str, ch); } -} // namespace MinCrtHelper +} // namespace MinCrtHelper /////////////////////////////////////////////////////////////////////////////// @@ -559,7 +573,7 @@ { return ::UnregisterClass(GetName(), ModuleHelper::GetModuleInstance()); } -} // namespace GenericWndClass +} // namespace GenericWndClass /////////////////////////////////////////////////////////////////////////////// @@ -592,6 +606,12 @@ ATL::CSimpleArray<CIdleHandler*> m_aIdleHandler; MSG m_msg; + CMessageLoop() + { } + + virtual ~CMessageLoop() + { } + // Message filter operations BOOL AddMessageFilter(CMessageFilter* pMessageFilter) { @@ -1034,7 +1054,7 @@ break; } } - // This handle should be valid now. If it isn't, + // This handle should be valid now. If it isn't, // check if _Module.Term was called first (it shouldn't) if(::CloseHandle(m_hEventShutdown)) m_hEventShutdown = NULL; @@ -1072,7 +1092,7 @@ typedef ATL::CRegKey CRegKeyEx; -} // namespace WTL +} // namespace WTL /////////////////////////////////////////////////////////////////////////////// @@ -1186,7 +1206,7 @@ return hRet; } -} // namespace ATL +} // namespace ATL #endif // (_ATL_VER >= 0x0B00)
diff --git a/third_party/wtl/include/atlcrack.h b/third_party/wtl/include/atlcrack.h index 49fcdfb..de3f4367 100644 --- a/third_party/wtl/include/atlcrack.h +++ b/third_party/wtl/include/atlcrack.h
@@ -35,7 +35,7 @@ { \ m_bMsgHandled = bHandled; \ } \ - BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID = 0) override \ + BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID = 0) _WTL_OVERRIDE \ { \ BOOL bOldMsgHandled = m_bMsgHandled; \ BOOL bRet = _ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, dwMsgMapID); \
diff --git a/third_party/wtl/include/atlctrls.h b/third_party/wtl/include/atlctrls.h index 0c560289..a73bc19 100644 --- a/third_party/wtl/include/atlctrls.h +++ b/third_party/wtl/include/atlctrls.h
@@ -1497,6 +1497,123 @@ ATLASSERT(::IsWindow(this->m_hWnd)); ::SendMessage(this->m_hWnd, WM_PASTE, 0, 0L); } + + // New messages added in Windows 10.0.17763 +#if defined(NTDDI_VERSION) && defined(NTDDI_WIN10_RS5) && (NTDDI_VERSION >= NTDDI_WIN10_RS5) + DWORD SetExtendedStyle(DWORD dwStyle, DWORD dwMask) + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return ::SendMessage(this->m_hWnd, EM_SETEXTENDEDSTYLE, dwMask, dwStyle); + } + + DWORD GetExtendedStyle() const + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return ::SendMessage(this->m_hWnd, EM_GETEXTENDEDSTYLE, 0, 0L); + } + + BOOL SetEndOfLine(EC_ENDOFLINE eolType) + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return (BOOL)::SendMessage(this->m_hWnd, EM_SETENDOFLINE, eolType, 0L); + } + + EC_ENDOFLINE GetEndOfLine() const + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return (EC_ENDOFLINE)::SendMessage(this->m_hWnd, EM_GETENDOFLINE, 0, 0L); + } + + BOOL EnableSearchWeb(BOOL bEnable) + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return (BOOL)::SendMessage(this->m_hWnd, EM_ENABLESEARCHWEB, (WPARAM)bEnable, 0L); + } + + void SearchWeb() + { + ATLASSERT(::IsWindow(this->m_hWnd)); + ::SendMessage(this->m_hWnd, EM_SEARCHWEB, 0, 0L); + } + + BOOL SetCaretIndex(DWORD dwCaretIndex) + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return (BOOL)::SendMessage(this->m_hWnd, EM_SETCARETINDEX, dwCaretIndex, 0L); + } + + DWORD GetCaretIndex() const + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return ::SendMessage(this->m_hWnd, EM_GETCARETINDEX, 0, 0L); + } + + BOOL GetZoom(int& nNum, int& nDen) const + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return (BOOL)::SendMessage(this->m_hWnd, EM_GETZOOM, (WPARAM)&nNum, (LPARAM)&nDen); + } + + BOOL SetZoom(int nNum, int nDen) + { + ATLASSERT(::IsWindow(this->m_hWnd)); + ATLASSERT((nNum >= 0) && (nNum <= 64)); + ATLASSERT((nDen >= 0) && (nDen <= 64)); + return (BOOL)::SendMessage(this->m_hWnd, EM_SETZOOM, nNum, nDen); + } + + DWORD GetFileLineFromChar(DWORD dwCharIndex) const + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return ::SendMessage(this->m_hWnd, EM_FILELINEFROMCHAR, dwCharIndex, 0L); + } + + DWORD GetFileLineIndex(DWORD dwLineNum) const + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return ::SendMessage(this->m_hWnd, EM_FILELINEINDEX, dwLineNum, 0L); + } + + DWORD GetFileLineLength(DWORD dwCharIndex) const + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return ::SendMessage(this->m_hWnd, EM_FILELINELENGTH, dwCharIndex, 0L); + } + + DWORD GetFileLine(DWORD dwLineNum, LPTSTR lpstrLine, WORD wLen) const + { + ATLASSERT(::IsWindow(this->m_hWnd)); + WORD* pw = (WORD*)lpstrLine; + *pw = wLen; + return ::SendMessage(this->m_hWnd, EM_GETFILELINE, dwLineNum, (LPARAM)lpstrLine); + } + +#ifdef __ATLSTR_H__ + ATL::CString GetFileLine(DWORD dwLineNum) const + { + ATL::CString strLine; + DWORD dwCharIndex = GetFileLineIndex(dwLineNum); + if(dwCharIndex != (DWORD)-1) + { + DWORD dwLen = GetFileLineLength(dwCharIndex); + if(dwLen > 0) + { + LPTSTR lpstrLine = strLine.GetBufferSetLength(dwLen); + ATLVERIFY(GetFileLine(dwLineNum, lpstrLine, (WORD)dwLen) == dwLen); + strLine.ReleaseBuffer(); + } + } + + return strLine; + } +#endif // __ATLSTR_H__ + + DWORD GetFileLineCount() const + { + ATLASSERT(::IsWindow(this->m_hWnd)); + return ::SendMessage(this->m_hWnd, EM_GETFILELINECOUNT, 0, 0L); + } +#endif // defined(NTDDI_VERSION) && defined(NTDDI_WIN10_RS5) && (NTDDI_VERSION >= NTDDI_WIN10_RS5) }; typedef CEditT<ATL::CWindow> CEdit; @@ -3789,10 +3906,22 @@ BOOL bRet = SetItemState(nIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); if(bRet) + { + SetSelectionMark(nIndex); bRet = EnsureVisible(nIndex, FALSE); + } return bRet; } + + // multi-selection only + BOOL SelectAllItems(bool bSelect = true) + { + ATLASSERT(::IsWindow(this->m_hWnd)); + ATLASSERT((this->GetStyle() & LVS_SINGLESEL) == 0); + + return SetItemState(-1, bSelect ? LVIS_SELECTED : 0, LVIS_SELECTED); + } }; typedef CListViewCtrlT<ATL::CWindow> CListViewCtrl; @@ -9591,6 +9720,6 @@ } }; -}; // namespace WTL +} // namespace WTL #endif // __ATLCTRLS_H__
diff --git a/third_party/wtl/include/atlctrlw.h b/third_party/wtl/include/atlctrlw.h index 9ab9053..998b050 100644 --- a/third_party/wtl/include/atlctrlw.h +++ b/third_party/wtl/include/atlctrlw.h
@@ -4002,6 +4002,6 @@ DECLARE_WND_SUPERCLASS(_T("WTL_MDICommandBar"), GetWndClassName()) }; -}; // namespace WTL +} // namespace WTL #endif // __ATLCTRLW_H__
diff --git a/third_party/wtl/include/atlctrlx.h b/third_party/wtl/include/atlctrlx.h index 6d62177b..910ea64 100644 --- a/third_party/wtl/include/atlctrlx.h +++ b/third_party/wtl/include/atlctrlx.h
@@ -1998,6 +1998,22 @@ return TRUE; } +#ifdef __ATLSTR_H__ + BOOL GetPaneText(int nPaneID, ATL::CString& strText, int* pcchLength = NULL, int* pnType = NULL) const + { + ATLASSERT(::IsWindow(this->m_hWnd)); + int nIndex = GetPaneIndexFromID(nPaneID); + if(nIndex == -1) + return FALSE; + + int nLength = this->GetText(nIndex, strText, pnType); + if(pcchLength != NULL) + *pcchLength = nLength; + + return TRUE; + } +#endif // __ATLSTR_H__ + BOOL SetPaneText(int nPaneID, LPCTSTR lpstrText, int nType = 0) { ATLASSERT(::IsWindow(this->m_hWnd)); @@ -2187,8 +2203,6 @@ #define PANECNT_DIVIDER 0x00000010 #define PANECNT_GRADIENT 0x00000020 -// Note: PANECNT_GRADIENT doesn't work with _ATL_NO_MSIMG - template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits> class ATL_NO_VTABLE CPaneContainerImpl : public ATL::CWindowImpl< T, TBase, TWinTraits >, public CCustomDraw< T > { @@ -2275,12 +2289,11 @@ bUpdate = true; } -#ifndef _ATL_NO_MSIMG if((dwPrevStyle & PANECNT_GRADIENT) != (m_dwExtendedStyle & PANECNT_GRADIENT)) // change background { bUpdate = true; } -#endif + if(bUpdate) pT->UpdateLayout(); } @@ -2758,11 +2771,9 @@ else rect.bottom = m_cxyHeader; -#ifndef _ATL_NO_MSIMG if((m_dwExtendedStyle & PANECNT_GRADIENT) != 0) dc.GradientFillRect(rect, ::GetSysColor(COLOR_WINDOW), ::GetSysColor(COLOR_3DFACE), IsVertical()); else -#endif dc.FillRect(&rect, COLOR_3DFACE); } @@ -4878,6 +4889,6 @@ DECLARE_WND_CLASS_EX(_T("WTL_TabView"), 0, COLOR_APPWORKSPACE) }; -}; // namespace WTL +} // namespace WTL #endif // __ATLCTRLX_H__
diff --git a/third_party/wtl/include/atlddx.h b/third_party/wtl/include/atlddx.h index b627fa283..7723b99 100644 --- a/third_party/wtl/include/atlddx.h +++ b/third_party/wtl/include/atlddx.h
@@ -662,6 +662,6 @@ } }; -}; // namespace WTL +} // namespace WTL #endif // __ATLDDX_H__
diff --git a/third_party/wtl/include/atldlgs.h b/third_party/wtl/include/atldlgs.h index 95e31f6..1d81a48d6 100644 --- a/third_party/wtl/include/atldlgs.h +++ b/third_party/wtl/include/atldlgs.h
@@ -19,7 +19,6 @@ #error atldlgs.h requires atlwin.h to be included first #endif -#include <commdlg.h> #include <shlobj.h> #if (_WIN32_WINNT >= 0x0600) @@ -1202,6 +1201,9 @@ this->_Init(lpszFileName, dwOptions, lpszDefExt, arrFilterSpec, uFilterSpecCount); } + virtual ~CShellFileOpenDialogImpl() + { } + IFileOpenDialog* GetPtr() { return m_spFileDlg; @@ -1222,6 +1224,9 @@ UINT uFilterSpecCount = 0U) : CShellFileOpenDialogImpl<CShellFileOpenDialog>(lpszFileName, dwOptions, lpszDefExt, arrFilterSpec, uFilterSpecCount) { } + virtual ~CShellFileOpenDialog() + { } + // Implementation (remove _Advise/_Unadvise code using template magic) void _Advise(DWORD& /*dwCookie*/) { } @@ -1252,6 +1257,9 @@ this->_Init(lpszFileName, dwOptions, lpszDefExt, arrFilterSpec, uFilterSpecCount); } + virtual ~CShellFileSaveDialogImpl() + { } + IFileSaveDialog* GetPtr() { return m_spFileDlg; @@ -1272,6 +1280,9 @@ UINT uFilterSpecCount = 0U) : CShellFileSaveDialogImpl<CShellFileSaveDialog>(lpszFileName, dwOptions, lpszDefExt, arrFilterSpec, uFilterSpecCount) { } + virtual ~CShellFileSaveDialog() + { } + // Implementation (remove _Advise/_Unadvise code using template magic) void _Advise(DWORD& /*dwCookie*/) { } @@ -2357,7 +2368,7 @@ /////////////////////////////////////////////////////////////////////////////// // CPrintDialogExImpl - new print dialog for Windows 2000 -}; // namespace WTL +} // namespace WTL #include <atlcom.h> @@ -6215,6 +6226,6 @@ #endif // (_WIN32_WINNT >= 0x0600) || defined(_WTL_TASKDIALOG) -}; // namespace WTL +} // namespace WTL #endif // __ATLDLGS_H__
diff --git a/third_party/wtl/include/atldwm.h b/third_party/wtl/include/atldwm.h index 80b44a2..f78d30f 100644 --- a/third_party/wtl/include/atldwm.h +++ b/third_party/wtl/include/atldwm.h
@@ -493,6 +493,6 @@ #endif // __ATLTHEME_H__ -}; // namespace WTL +} // namespace WTL #endif // __ATLDWM_H__
diff --git a/third_party/wtl/include/atlfind.h b/third_party/wtl/include/atlfind.h index b9aad8d..39c0c46 100644 --- a/third_party/wtl/include/atlfind.h +++ b/third_party/wtl/include/atlfind.h
@@ -892,6 +892,6 @@ } }; -}; // namespace WTL +} // namespace WTL #endif // __ATLFIND_H__
diff --git a/third_party/wtl/include/atlframe.h b/third_party/wtl/include/atlframe.h index aef9bf0..4fa60a6 100644 --- a/third_party/wtl/include/atlframe.h +++ b/third_party/wtl/include/atlframe.h
@@ -182,14 +182,51 @@ return wc; \ } +// These are for templated classes +#define DECLARE_FRAME_WND_CLASS2(WndClassName, EnclosingClass, uCommonResourceID) \ +static WTL::CFrameWndClassInfo& GetWndClassInfo() \ +{ \ + static WTL::CFrameWndClassInfo wc = \ + { \ + { sizeof(WNDCLASSEX), 0, EnclosingClass::StartWindowProc, \ + 0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1), NULL, WndClassName, NULL }, \ + NULL, NULL, IDC_ARROW, TRUE, 0, _T(""), uCommonResourceID \ + }; \ + return wc; \ +} + +#define DECLARE_FRAME_WND_CLASS_EX2(WndClassName, EnclosingClass, uCommonResourceID, style, bkgnd) \ +static WTL::CFrameWndClassInfo& GetWndClassInfo() \ +{ \ + static WTL::CFrameWndClassInfo wc = \ + { \ + { sizeof(WNDCLASSEX), style, EnclosingClass::StartWindowProc, \ + 0, 0, NULL, NULL, NULL, (HBRUSH)(bkgnd + 1), NULL, WndClassName, NULL }, \ + NULL, NULL, IDC_ARROW, TRUE, 0, _T(""), uCommonResourceID \ + }; \ + return wc; \ +} + +#define DECLARE_FRAME_WND_SUPERCLASS2(WndClassName, EnclosingClass, OrigWndClassName, uCommonResourceID) \ +static WTL::CFrameWndClassInfo& GetWndClassInfo() \ +{ \ + static WTL::CFrameWndClassInfo wc = \ + { \ + { sizeof(WNDCLASSEX), 0, EnclosingClass::StartWindowProc, \ + 0, 0, NULL, NULL, NULL, NULL, NULL, WndClassName, NULL }, \ + OrigWndClassName, NULL, NULL, TRUE, 0, _T(""), uCommonResourceID \ + }; \ + return wc; \ +} + /////////////////////////////////////////////////////////////////////////////// // CFrameWindowImpl // Client window command chaining macro (only for frame windows) #define CHAIN_CLIENT_COMMANDS() \ - if((uMsg == WM_COMMAND) && (m_hWndClient != NULL)) \ - ::SendMessage(m_hWndClient, uMsg, wParam, lParam); + if((uMsg == WM_COMMAND) && (this->m_hWndClient != NULL)) \ + ::SendMessage(this->m_hWndClient, uMsg, wParam, lParam); // standard toolbar styles #define ATL_SIMPLE_TOOLBAR_STYLE \ @@ -230,17 +267,8 @@ class ATL_NO_VTABLE CFrameWindowImplBase : public ATL::CWindowImplBaseT< TBase, TWinTraits > { public: - // This is instead of DECLARE_FRAME_WND_CLASS(NULL, 0) - static CFrameWndClassInfo& GetWndClassInfo() - { - static CFrameWndClassInfo wc = - { - { sizeof(WNDCLASSEX), 0, ATL::CWindowImplBaseT<TBase, TWinTraits >::StartWindowProc, - 0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1), NULL, NULL, NULL }, - NULL, NULL, IDC_ARROW, TRUE, 0, _T(""), 0 - }; - return wc; - } + typedef CFrameWindowImplBase<TBase, TWinTraits > _thisClass; + DECLARE_FRAME_WND_CLASS2(NULL, _thisClass, 0) struct _ChevronMenuInfo { @@ -1131,7 +1159,7 @@ #define CHAIN_MDI_CHILD_COMMANDS() \ if(uMsg == WM_COMMAND) \ { \ - HWND hWndChild = MDIGetActive(); \ + HWND hWndChild = this->MDIGetActive(); \ if(hWndChild != NULL) \ ::SendMessage(hWndChild, uMsg, wParam, lParam); \ } @@ -3544,6 +3572,6 @@ #undef CBRPOPUPMENU #endif // !defined(__ATLCTRLW_H__) -}; // namespace WTL +} // namespace WTL #endif // __ATLFRAME_H__
diff --git a/third_party/wtl/include/atlgdi.h b/third_party/wtl/include/atlgdi.h index 45438ef..e00686e0 100644 --- a/third_party/wtl/include/atlgdi.h +++ b/third_party/wtl/include/atlgdi.h
@@ -28,9 +28,7 @@ #endif // _INC_WINDOWSX // required libraries -#if !defined(_ATL_NO_MSIMG) - #pragma comment(lib, "msimg32.lib") -#endif +#pragma comment(lib, "msimg32.lib") #if !defined(_ATL_NO_OPENGL) #pragma comment(lib, "opengl32.lib") #endif @@ -2164,7 +2162,6 @@ return ::SetPixelV(m_hDC, point.x, point.y, crColor); } -#if !defined(_ATL_NO_MSIMG) BOOL TransparentBlt(int x, int y, int nWidth, int nHeight, HDC hSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, UINT crTransparent) { ATLASSERT(m_hDC != NULL); @@ -2207,7 +2204,6 @@ ATLASSERT(m_hDC != NULL); return ::AlphaBlend(m_hDC, x, y, nWidth, nHeight, hSrcDC, xSrc, ySrc, nSrcWidth, nSrcHeight, bf); } -#endif // !defined(_ATL_NO_MSIMG) // Extra bitmap functions // Helper function for painting a disabled toolbar or menu bitmap @@ -2330,12 +2326,13 @@ return ::TextOut(m_hDC, x, y, lpszString, nCount); } - BOOL ExtTextOut(int x, int y, UINT nOptions, LPCRECT lpRect, LPCTSTR lpszString, UINT nCount = -1, LPINT lpDxWidths = NULL) + BOOL ExtTextOut(int x, int y, UINT nOptions, LPCRECT lpRect, LPCTSTR lpszString, int nCount = -1, LPINT lpDxWidths = NULL) { ATLASSERT(m_hDC != NULL); if(nCount == -1) nCount = lstrlen(lpszString); - return ::ExtTextOut(m_hDC, x, y, nOptions, lpRect, lpszString, nCount, lpDxWidths); + ATLASSERT((nCount >= 0) && (nCount <= 8192)); + return ::ExtTextOut(m_hDC, x, y, nOptions, lpRect, lpszString, (UINT)nCount, lpDxWidths); } SIZE TabbedTextOut(int x, int y, LPCTSTR lpszString, int nCount = -1, int nTabPositions = 0, LPINT lpnTabStopPositions = NULL, int nTabOrigin = 0) @@ -3440,6 +3437,6 @@ } }; -} // namespace WTL +} // namespace WTL #endif // __ATLGDI_H__
diff --git a/third_party/wtl/include/atlmisc.h b/third_party/wtl/include/atlmisc.h index 961f01b..427b56ce 100644 --- a/third_party/wtl/include/atlmisc.h +++ b/third_party/wtl/include/atlmisc.h
@@ -982,6 +982,6 @@ return bRet; } -}; // namespace WTL +} // namespace WTL #endif // __ATLMISC_H__
diff --git a/third_party/wtl/include/atlprint.h b/third_party/wtl/include/atlprint.h index 90cad21..308f0ee 100644 --- a/third_party/wtl/include/atlprint.h +++ b/third_party/wtl/include/atlprint.h
@@ -19,6 +19,8 @@ #error atlprint.h requires atlwin.h to be included first #endif +#include <winspool.h> + /////////////////////////////////////////////////////////////////////////////// // Classes in this file: @@ -1096,6 +1098,6 @@ #endif // __ATLSCRL_H__ -}; // namespace WTL +} // namespace WTL #endif // __ATLPRINT_H__
diff --git a/third_party/wtl/include/atlribbon.h b/third_party/wtl/include/atlribbon.h index 2ee2a3e6..a860e03 100644 --- a/third_party/wtl/include/atlribbon.h +++ b/third_party/wtl/include/atlribbon.h
@@ -715,6 +715,9 @@ CtrlImpl() : m_pWndRibbon(T::pWndRibbon) { } + virtual ~CtrlImpl() + { } + WndRibbon& GetWndRibbon() { return *m_pWndRibbon; @@ -1717,8 +1720,8 @@ ColorCtrlImpl() : m_colorType(UI_SWATCHCOLORTYPE_NOCOLOR), m_color(0x800080) /*MAGENTA*/ { } - COLORREF m_color; UINT32 m_colorType; // value in UI_SWATCHCOLORTYPE + COLORREF m_color; Text m_sLabels[6]; // k_MoreColorsLabel to k_ThemeColorsCategoryLabel ATL::CSimpleArray<COLORREF> m_aColors[2]; ATL::CSimpleArray<LPCWSTR> m_aTooltips[2]; @@ -2131,7 +2134,7 @@ ATLASSERT(SUCCEEDED(hr)); } - ~CRibbonImpl() + virtual ~CRibbonImpl() { ::GlobalFree(m_hgRibbonSettings); m_pIUIFramework.Release(); @@ -2144,8 +2147,8 @@ } ATL::CComPtr<IUIFramework> m_pIUIFramework; - HGLOBAL m_hgRibbonSettings; bool m_bRibbonUI; + HGLOBAL m_hgRibbonSettings; bool IsRibbonUI() { @@ -3060,7 +3063,7 @@ } _ribbonCtrl; #pragma warning(pop) -}; // namespace RibbonUI +} // namespace RibbonUI ///////////////////////////////////////////////////////////////////////////////
diff --git a/third_party/wtl/include/atlscrl.h b/third_party/wtl/include/atlscrl.h index 4cfd528..e7ef430b 100644 --- a/third_party/wtl/include/atlscrl.h +++ b/third_party/wtl/include/atlscrl.h
@@ -2122,6 +2122,6 @@ DECLARE_WND_CLASS_EX(_T("WTL_ScrollContainer"), 0, -1) }; -}; // namespace WTL +} // namespace WTL #endif // __ATLSCRL_H__
diff --git a/third_party/wtl/include/atlsplit.h b/third_party/wtl/include/atlsplit.h index 3b48138..72858204 100644 --- a/third_party/wtl/include/atlsplit.h +++ b/third_party/wtl/include/atlsplit.h
@@ -47,11 +47,12 @@ #define SPLIT_RIGHTALIGNED 0x00000004 #define SPLIT_BOTTOMALIGNED SPLIT_RIGHTALIGNED #define SPLIT_GRADIENTBAR 0x00000008 +#define SPLIT_FLATBAR 0x00000020 #define SPLIT_FIXEDBARSIZE 0x00000010 // Note: SPLIT_PROPORTIONAL and SPLIT_RIGHTALIGNED/SPLIT_BOTTOMALIGNED are // mutually exclusive. If both are set, splitter defaults to SPLIT_PROPORTIONAL. -// SPLIT_GRADIENTBAR doesn't work with _ATL_NO_MSIMG +// Also, SPLIT_FLATBAR overrides SPLIT_GRADIENTBAR if both are set. template <class T> @@ -476,8 +477,23 @@ { dc.FillRect(&rect, COLOR_3DFACE); -#ifndef _ATL_NO_MSIMG - if((m_dwExtendedStyle & SPLIT_GRADIENTBAR) != 0) + if((m_dwExtendedStyle & SPLIT_FLATBAR) != 0) + { + RECT rect1 = rect; + if(m_bVertical) + rect1.right = rect1.left + 1; + else + rect1.bottom = rect1.top + 1; + dc.FillRect(&rect1, COLOR_WINDOW); + + rect1 = rect; + if(m_bVertical) + rect1.left = rect1.right - 1; + else + rect1.top = rect1.bottom - 1; + dc.FillRect(&rect1, COLOR_3DSHADOW); + } + else if((m_dwExtendedStyle & SPLIT_GRADIENTBAR) != 0) { RECT rect2 = rect; if(m_bVertical) @@ -487,7 +503,7 @@ dc.GradientFillRect(rect2, ::GetSysColor(COLOR_3DFACE), ::GetSysColor(COLOR_3DSHADOW), m_bVertical); } -#endif + // draw 3D edge if needed T* pT = static_cast<T*>(this); if((pT->GetExStyle() & WS_EX_CLIENTEDGE) != 0) @@ -1099,17 +1115,7 @@ class CSplitterWindowT : public CSplitterWindowImpl<CSplitterWindowT<t_bVertical> > { public: - // This is instead of DECLARE_WND_CLASS_EX(_T("WTL_SplitterWindow"), CS_DBLCLKS, COLOR_WINDOW) - static ATL::CWndClassInfo& GetWndClassInfo() - { - static ATL::CWndClassInfo wc = - { - { sizeof(WNDCLASSEX), CS_DBLCLKS, ATL::CWindowImplBase::StartWindowProc, - 0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1), NULL, _T("WTL_SplitterWindow"), NULL }, - NULL, NULL, IDC_ARROW, TRUE, 0, _T("") - }; - return wc; - } + DECLARE_WND_CLASS_EX2(_T("WTL_SplitterWindow"), CSplitterWindowT<t_bVertical>, CS_DBLCLKS, COLOR_WINDOW) CSplitterWindowT() : CSplitterWindowImpl<CSplitterWindowT<t_bVertical> >(t_bVertical) { } @@ -1118,6 +1124,6 @@ typedef CSplitterWindowT<true> CSplitterWindow; typedef CSplitterWindowT<false> CHorSplitterWindow; -}; // namespace WTL +} // namespace WTL #endif // __ATLSPLIT_H__
diff --git a/third_party/wtl/include/atltheme.h b/third_party/wtl/include/atltheme.h index 52795f0..9855f00 100644 --- a/third_party/wtl/include/atltheme.h +++ b/third_party/wtl/include/atltheme.h
@@ -1185,6 +1185,6 @@ #endif // (_WIN32_WINNT >= 0x0600) -}; // namespace WTL +} // namespace WTL #endif // __ATLTHEME_H__
diff --git a/third_party/wtl/include/atluser.h b/third_party/wtl/include/atluser.h index c88b20f..9f8e0f4 100644 --- a/third_party/wtl/include/atluser.h +++ b/third_party/wtl/include/atluser.h
@@ -1226,6 +1226,6 @@ return (bstrText != NULL) ? true : false; } -} // namespace WTL +} // namespace WTL #endif // __ATLUSER_H__
diff --git a/third_party/wtl/include/atlwinx.h b/third_party/wtl/include/atlwinx.h index 45c119c..c14f86e7 100644 --- a/third_party/wtl/include/atlwinx.h +++ b/third_party/wtl/include/atlwinx.h
@@ -204,7 +204,7 @@ return lResult; } -} // namespace WTL +} // namespace WTL // Try to prevent problems with WM_CTLCOLOR* messages when // the message wasn't really handled @@ -594,6 +594,6 @@ #endif // __ATLSTR_H__ }; -} // namespace WTL +} // namespace WTL #endif // __ATLWINX_H__
diff --git a/third_party/wtl/readme.htm b/third_party/wtl/readme.htm index 5326fdc..cd8988831 100644 --- a/third_party/wtl/readme.htm +++ b/third_party/wtl/readme.htm
@@ -32,14 +32,14 @@ <td> <span class="wtl10"><b>Windows Template Library - WTL 10</b></span> - version 10.0.8356 (2018-12-22) + version 10.0.9163 (2019-06-12) </td> </tr> <tr> <td><hr></td> </tr> <tr> - <td>Copyright © 2018 Microsoft Corporation, WTL Team. All rights reserved.</td> + <td>Copyright © 2019 Microsoft Corporation, WTL Team. All rights reserved.</td> </tr> <tr> <td><br></td> @@ -104,7 +104,7 @@ contribute to the library. </p> <p> - WTL classes can be used with all versions of VC++ from 2005 to the newest, 2017. + WTL classes can be used with all versions of VC++ from 2005 to the newest, 2019. AppWizard for Visual Studio is included. </p> <p> @@ -141,6 +141,7 @@ <li>Visual C++ 2013 (ATL 12.0)</li> <li>Visual C++ 2015 (ATL 14.0)</li> <li>Visual C++ 2017 (ATL 14.0)</li> + <li>Visual C++ 2019 (ATL 14.0)</li> </ul> <p style=margin:0px><br></p> @@ -1458,7 +1459,7 @@ </ul> <p style=margin:0px><br></p> -<p style=margin:0px>ATL/WTL AppWizard supports VC++ 2005, 2008, 2010, 2012, 2013, 2015, and 2017.</p> +<p style=margin:0px>ATL/WTL AppWizard supports VC++ 2005, 2008, 2010, 2012, 2013, 2015, 2017, and 2019.</p> <p style=margin:0px><br></p> <p style=margin:0px><br></p>
diff --git a/third_party/wtl/wtl10.patch b/third_party/wtl/wtl10.patch index d0b2a72..05b8b8a 100644 --- a/third_party/wtl/wtl10.patch +++ b/third_party/wtl/wtl10.patch
@@ -1,26 +1,17 @@ +From 23ef510bb7a3f38ecf2d05edd04ccc5bcf210c0d Mon Sep 17 00:00:00 2001 +From: Sorin Jianu <sorin@chromium.org> +Date: Thu, 13 Jun 2019 15:45:01 -0700 +Subject: [PATCH] fix atlverify + +--- + third_party/wtl/include/atlapp.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + diff --git a/third_party/wtl/include/atlapp.h b/third_party/wtl/include/atlapp.h -index bdb7e8bb3482..36c7544fc834 100644 +index c61be7e18faf..6c4d9b0f6e2a 100644 --- a/third_party/wtl/include/atlapp.h +++ b/third_party/wtl/include/atlapp.h -@@ -132,7 +132,7 @@ - - // Forward declaration for ATL11 fix - #if (_ATL_VER >= 0x0B00) -- namespace ATL { HRESULT AtlGetCommCtrlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor); }; -+ namespace ATL { HRESULT AtlGetCommCtrlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor); } - #endif - - #ifndef WM_MOUSEHWHEEL -@@ -148,7 +148,7 @@ - namespace WTL - { - --DECLARE_TRACE_CATEGORY(atlTraceUI); -+DECLARE_TRACE_CATEGORY(atlTraceUI) - #ifdef _DEBUG - __declspec(selectany) ATL::CTraceCategory atlTraceUI(_T("atlTraceUI")); - #endif // _DEBUG -@@ -173,7 +173,7 @@ inline HFONT AtlGetDefaultGuiFont() +@@ -187,7 +187,7 @@ inline HFONT AtlGetDefaultGuiFont() inline HFONT AtlCreateControlFont() { LOGFONT lf = {}; @@ -29,7 +20,7 @@ HFONT hFont = ::CreateFontIndirect(&lf); ATLASSERT(hFont != NULL); return hFont; -@@ -185,9 +185,9 @@ inline HFONT AtlCreateBoldFont(HFONT hFont = NULL) +@@ -199,9 +199,9 @@ inline HFONT AtlCreateBoldFont(HFONT hFont = NULL) { LOGFONT lf = {}; if(hFont == NULL) @@ -41,133 +32,6 @@ lf.lfWeight = FW_BOLD; HFONT hFontBold = ::CreateFontIndirect(&lf); ATLASSERT(hFontBold != NULL); -@@ -363,7 +363,7 @@ namespace RunTimeHelper - #endif - return uSize; - } --}; -+} - - - /////////////////////////////////////////////////////////////////////////////// -@@ -390,7 +390,7 @@ namespace ModuleHelper - { - return ATL::_AtlWinModule.ExtractCreateWndData(); - } --}; -+} - - - /////////////////////////////////////////////////////////////////////////////// -@@ -493,7 +493,7 @@ namespace SecureHelper - va_end(args); - return nRes; - } --}; // namespace SecureHelper -+} // namespace SecureHelper - - - /////////////////////////////////////////////////////////////////////////////// -@@ -526,7 +526,7 @@ namespace MinCrtHelper - { - return _tcsrchr(str, ch); - } --}; // namespace MinCrtHelper -+} // namespace MinCrtHelper - - - /////////////////////////////////////////////////////////////////////////////// -@@ -559,7 +559,7 @@ namespace GenericWndClass - { - return ::UnregisterClass(GetName(), ModuleHelper::GetModuleInstance()); - } --}; // namespace GenericWndClass -+} // namespace GenericWndClass - - - /////////////////////////////////////////////////////////////////////////////// -@@ -1034,7 +1034,7 @@ public: - break; - } - } -- // This handle should be valid now. If it isn't, -+ // This handle should be valid now. If it isn't, - // check if _Module.Term was called first (it shouldn't) - if(::CloseHandle(m_hEventShutdown)) - m_hEventShutdown = NULL; -@@ -1072,7 +1072,7 @@ public: - - typedef ATL::CRegKey CRegKeyEx; - --}; // namespace WTL -+} // namespace WTL - - - /////////////////////////////////////////////////////////////////////////////// -@@ -1186,7 +1186,7 @@ inline HRESULT AtlGetShellVersion(LPDWORD pdwMajor, LPDWORD pdwMinor) - return hRet; - } - --}; // namespace ATL -+} // namespace ATL - - #endif // (_ATL_VER >= 0x0B00) - -diff --git a/third_party/wtl/include/atlcrack.h b/third_party/wtl/include/atlcrack.h -index 09093a47f7b9..49fcdfb7fd07 100644 ---- a/third_party/wtl/include/atlcrack.h -+++ b/third_party/wtl/include/atlcrack.h -@@ -35,7 +35,7 @@ public: \ - { \ - m_bMsgHandled = bHandled; \ - } \ -- BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID = 0) \ -+ BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID = 0) override \ - { \ - BOOL bOldMsgHandled = m_bMsgHandled; \ - BOOL bRet = _ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, dwMsgMapID); \ -diff --git a/third_party/wtl/include/atlgdi.h b/third_party/wtl/include/atlgdi.h -index 9f7664c5f805..45438ef1be7b 100644 ---- a/third_party/wtl/include/atlgdi.h -+++ b/third_party/wtl/include/atlgdi.h -@@ -3440,6 +3440,6 @@ public: - } - }; - --}; // namespace WTL -+} // namespace WTL - - #endif // __ATLGDI_H__ -diff --git a/third_party/wtl/include/atluser.h b/third_party/wtl/include/atluser.h -index 5e352340db2e..c88b20f8721f 100644 ---- a/third_party/wtl/include/atluser.h -+++ b/third_party/wtl/include/atluser.h -@@ -1226,6 +1226,6 @@ inline bool AtlLoadString(UINT uID, BSTR& bstrText) - return (bstrText != NULL) ? true : false; - } - --}; // namespace WTL -+} // namespace WTL - - #endif // __ATLUSER_H__ -diff --git a/third_party/wtl/include/atlwinx.h b/third_party/wtl/include/atlwinx.h -index b0d0936eda23..45c119c2579b 100644 ---- a/third_party/wtl/include/atlwinx.h -+++ b/third_party/wtl/include/atlwinx.h -@@ -204,7 +204,7 @@ inline LRESULT WtlReflectNotificationsFiltered(HWND hWndParent, UINT uMsg, WPARA - return lResult; - } - --}; // namespace WTL -+} // namespace WTL - - // Try to prevent problems with WM_CTLCOLOR* messages when - // the message wasn't really handled -@@ -594,6 +594,6 @@ public: - #endif // __ATLSTR_H__ - }; - --}; // namespace WTL -+} // namespace WTL - - #endif // __ATLWINX_H__ +-- +2.21.0.windows.1 +
diff --git a/tools/binary_size/generate_milestone_reports.py b/tools/binary_size/generate_milestone_reports.py index 343701e..a5565ba2 100755 --- a/tools/binary_size/generate_milestone_reports.py +++ b/tools/binary_size/generate_milestone_reports.py
@@ -60,7 +60,8 @@ '72.0.3626.105', '73.0.3683.75', '74.0.3729.112', - '75.0.3770.12', # Beta + '75.0.3770.67', + '76.0.3809.13', # Official build ]
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index 819c39d..4cf9d7c4 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py
@@ -14,6 +14,7 @@ # TODO: Running stand-alone won't work on Windows due to the dia dll copying. +from __future__ import division from __future__ import print_function import argparse import os @@ -25,10 +26,10 @@ import time try: - import urllib2 as urllib + from urllib2 import HTTPError, URLError, urlopen except ImportError: # For Py3 compatibility - import urllib.request as urllib - import urllib.error as urllib + from urllib.error import HTTPError, URLError + from urllib.request import urlopen import zipfile @@ -99,8 +100,8 @@ try: sys.stdout.write('Downloading %s ' % url) sys.stdout.flush() - response = urllib.urlopen(url) - total_size = int(response.info().getheader('Content-Length').strip()) + response = urlopen(url) + total_size = int(response.info().get('Content-Length').strip()) bytes_done = 0 dots_printed = 0 while True: @@ -109,19 +110,19 @@ break output_file.write(chunk) bytes_done += len(chunk) - num_dots = TOTAL_DOTS * bytes_done / total_size + num_dots = TOTAL_DOTS * bytes_done // total_size sys.stdout.write('.' * (num_dots - dots_printed)) sys.stdout.flush() dots_printed = num_dots if bytes_done != total_size: - raise urllib.URLError("only got %d of %d bytes" % - (bytes_done, total_size)) + raise URLError("only got %d of %d bytes" % + (bytes_done, total_size)) print(' Done.') return - except urllib.URLError as e: + except URLError as e: sys.stdout.write('\n') print(e) - if num_retries == 0 or isinstance(e, urllib.HTTPError) and e.code == 404: + if num_retries == 0 or isinstance(e, HTTPError) and e.code == 404: raise e num_retries -= 1 print('Retrying in %d s ...' % retry_wait_s) @@ -171,7 +172,7 @@ if runtimes_only: path_prefix = 'lib/clang/' + RELEASE_VERSION + '/lib/' DownloadAndUnpack(cds_full_url, output_dir, path_prefix) - except urllib.URLError: + except URLError: print('Failed to download prebuilt clang %s' % cds_file) print('Use --force-local-build if you want to build locally.') print('Exiting.')
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 0eff67f1..36c0fb74 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -424,6 +424,7 @@ # for the jumbo part. 'linux-jumbo-rel': 'gpu_tests_release_bot_jumbo_no_symbols_use_dummy_lastchange', 'linux-ozone-rel': 'ozone_linux_release_bot', + 'linux-trusty-rel': 'gpu_tests_release_bot', }, 'chromium.lkgr': { @@ -729,6 +730,7 @@ 'linux-libfuzzer-asan-rel': 'libfuzzer_asan_release_trybot', 'linux-ozone-rel': 'ozone_linux_release_trybot', 'linux-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange', + 'linux-trusty-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange', 'linux-webkit-msan-rel': 'msan_release_bot', 'linux_arm': 'release_trybot_arm', 'linux_chromium_archive_rel_ng': 'release_bot',
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 3d926519..0e0318a1 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -34929,6 +34929,7 @@ <int value="278756320" label="disable-app-list-app-info"/> <int value="280644887" label="mash"/> <int value="282636212" label="VideoPlayerNativeControls:disabled"/> + <int value="283182071" label="SecurityInterstitialsDarkMode:enabled"/> <int value="283232244" label="OmniboxUIExperimentNarrowDropdown:enabled"/> <int value="287932297" label="AutofillSettingsCardTypeSplit:enabled"/> <int value="288012253" label="CrostiniFiles:enabled"/> @@ -36102,6 +36103,7 @@ <int value="2004604350" label="AutofillGetPaymentsIdentityFromSync:enabled"/> <int value="2004651603" label="NativeFileSystemAPI:disabled"/> <int value="2004829262" label="enable-webgl-draft-extensions"/> + <int value="2005245012" label="SecurityInterstitialsDarkMode:disabled"/> <int value="2005614493" label="tab-management-experiment-type-dill"/> <int value="2006413281" label="ContextualSuggestionsAlternateCardLayout:enabled"/> @@ -54906,6 +54908,18 @@ <int value="12" label="Play install"/> </enum> +<enum name="SuggestionIconOrFaviconType"> + <summary>Type of icon shown beside omnibox suggestion.</summary> + <int value="0" label="Invalid (unknown type)"/> + <int value="1" label="Bookmark"/> + <int value="2" label="History"/> + <int value="3" label="Globe"/> + <int value="4" label="Magnifying Glass"/> + <int value="5" label="Voice"/> + <int value="6" label="Calculator"/> + <int value="7" label="Favicon"/> +</enum> + <enum name="SuggestionsResponseState"> <int value="0" label="Empty response received from the server."/> <int value="1" label="Invalid response received from the server."/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 4e030a1..8e85ebc 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -84670,6 +84670,25 @@ </summary> </histogram> +<histogram name="Omnibox.IconOrFaviconShown" enum="SuggestionIconOrFaviconType" + expires_after="M83"> + <owner>chrome-android-omnibox-team@google.com</owner> + <owner>ender@google.com</owner> + <owner>jdonnelly@google.com</owner> + <owner>mpearson@google.com</owner> + <summary> + Records suggestions decorated with specific icon or favicon at the time the + user exited the omnibox. Exiting the omnibox includes navigating (to entered + text or any suggestion), pressing the system back key, clearing omnibox, + blanking screen / locking the phone (whether intentionally or due to + inactivity), or closing the Chrome app. This metric is logged every time the + omnibox is exited, including when no answer is present in the list of + suggestions. + + This histogram is related to Omnibox.SuggestionUsed.IconOrFaviconType. + </summary> +</histogram> + <histogram name="Omnibox.InputType" enum="OmniboxInputType"> <owner>mpearson@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> @@ -85071,6 +85090,21 @@ </summary> </histogram> +<histogram name="Omnibox.SuggestionUsed.IconOrFaviconType" + enum="SuggestionIconOrFaviconType" expires_after="M83"> + <owner>chrome-android-omnibox-team@google.com</owner> + <owner>ender@google.com</owner> + <owner>jdonnelly@google.com</owner> + <owner>mpearson@google.com</owner> + <summary> + Counts how often omnibox suggestions are used, and in the case a regular + search / url (not an Answer, Entity or any other specialized) suggestion was + selected - records how the suggestion was decorated. + + This histogram is related to Omnibox.IconOrFaviconShown. + </summary> +</histogram> + <histogram name="Omnibox.SuggestionUsed.NearbyURLCount" units="URLs" expires_after="2017-02-23"> <obsolete>
diff --git a/ui/accessibility/ax_assistant_structure.cc b/ui/accessibility/ax_assistant_structure.cc index 82a302c..c749a46 100644 --- a/ui/accessibility/ax_assistant_structure.cc +++ b/ui/accessibility/ax_assistant_structure.cc
@@ -24,8 +24,7 @@ namespace { bool HasFocusableChild(const AXNode* node) { - for (size_t i = 0; i < node->GetUnignoredChildCount(); ++i) { - AXNode* child = node->GetUnignoredChildAtIndex(i); + for (auto* child : node->children()) { if (child->data().HasState(ax::mojom::State::kFocusable) || HasFocusableChild(child)) { return true; @@ -35,8 +34,7 @@ } bool HasOnlyTextChildren(const AXNode* node) { - for (size_t i = 0; i < node->GetUnignoredChildCount(); ++i) { - AXNode* child = node->GetUnignoredChildAtIndex(i); + for (auto* child : node->children()) { if (!child->IsText()) return false; } @@ -54,7 +52,7 @@ } bool IsRichTextEditable(const AXNode* node) { - const AXNode* parent = node->GetUnignoredParent(); + const AXNode* parent = node->parent(); return node->data().HasState(ax::mojom::State::kRichlyEditable) && (!parent || !parent->data().HasState(ax::mojom::State::kRichlyEditable)); @@ -104,8 +102,7 @@ return node->data().GetString16Attribute(ax::mojom::StringAttribute::kName); } base::string16 text; - for (size_t i = 0; i < node->GetUnignoredChildCount(); ++i) { - AXNode* child = node->GetUnignoredChildAtIndex(i); + for (auto* child : node->children()) { text += GetInnerText(child); } return text; @@ -132,8 +129,7 @@ } bool HasOnlyTextAndImageChildren(const AXNode* node) { - for (size_t i = 0; i < node->GetUnignoredChildCount(); ++i) { - AXNode* child = node->GetUnignoredChildAtIndex(i); + for (auto* child : node->children()) { if (child->data().role != ax::mojom::Role::kStaticText && child->data().role != ax::mojom::Role::kImage) { return false; @@ -145,8 +141,7 @@ bool IsFocusable(const AXNode* node) { if (node->data().role == ax::mojom::Role::kIframe || node->data().role == ax::mojom::Role::kIframePresentational || - (node->data().role == ax::mojom::Role::kRootWebArea && - node->GetUnignoredParent())) { + (node->data().role == ax::mojom::Role::kRootWebArea && node->parent())) { return node->data().HasStringAttribute(ax::mojom::StringAttribute::kName); } return node->data().HasState(ax::mojom::State::kFocusable); @@ -213,8 +208,7 @@ if (text.empty() && (HasOnlyTextChildren(node) || (IsFocusable(node) && HasOnlyTextAndImageChildren(node)))) { - for (size_t i = 0; i < node->GetUnignoredChildCount(); ++i) { - AXNode* child = node->GetUnignoredChildAtIndex(i); + for (auto* child : node->children()) { text += GetText(child, show_password); } } @@ -292,7 +286,7 @@ AssistantNode* result) { result->text = GetText(node, config->show_password); result->class_name = - AXRoleToAndroidClassName(node->data().role, node->GetUnignoredParent()); + AXRoleToAndroidClassName(node->data().role, node->parent() != nullptr); result->role = AXRoleToString(node->data().role); result->text_size = -1.0; @@ -326,7 +320,7 @@ const gfx::Rect& absolute_rect = gfx::ToEnclosingRect(tree->GetTreeBounds(node)); gfx::Rect parent_relative_rect = absolute_rect; - bool is_root = !node->GetUnignoredParent(); + bool is_root = node->parent() == nullptr; if (!is_root) { parent_relative_rect.Offset(-rect.OffsetFromOrigin()); } @@ -355,8 +349,7 @@ base::make_optional<gfx::Range>(start_selection, end_selection); } - for (size_t i = 0; i < node->GetUnignoredChildCount(); ++i) { - AXNode* child = node->GetUnignoredChildAtIndex(i); + for (auto* child : node->children()) { auto* n = AddChild(assistant_tree); result->children_indices.push_back(assistant_tree->nodes.size() - 1); WalkAXTreeDepthFirst(child, absolute_rect, update, tree, config,
diff --git a/ui/accessibility/ax_enum_util.cc b/ui/accessibility/ax_enum_util.cc index 87408f76..d1a9587 100644 --- a/ui/accessibility/ax_enum_util.cc +++ b/ui/accessibility/ax_enum_util.cc
@@ -1725,8 +1725,6 @@ return "selected"; case ax::mojom::BoolAttribute::kSupportsTextLocation: return "supportsTextLocation"; - case ax::mojom::BoolAttribute::kIsLineBreakingObject: - return "isLineBreakingObject"; } return ""; @@ -1763,8 +1761,6 @@ return ax::mojom::BoolAttribute::kSelected; if (0 == strcmp(bool_attribute, "supportsTextLocation")) return ax::mojom::BoolAttribute::kSupportsTextLocation; - if (0 == strcmp(bool_attribute, "isLineBreakingObject")) - return ax::mojom::BoolAttribute::kIsLineBreakingObject; return ax::mojom::BoolAttribute::kNone; }
diff --git a/ui/accessibility/ax_enums.mojom b/ui/accessibility/ax_enums.mojom index ea78039..bec9f85 100644 --- a/ui/accessibility/ax_enums.mojom +++ b/ui/accessibility/ax_enums.mojom
@@ -683,10 +683,6 @@ // Indicates whether this node can be grabbed for drag-and-drop operation. // Note: aria-grabbed is deprecated in WAI-ARIA 1.1. kGrabbed, - - // Indicates whether this node causes a hard line-break - // (e.g. block level elements, or <br>) - kIsLineBreakingObject, }; enum IntListAttribute {
diff --git a/ui/accessibility/ax_event_generator.cc b/ui/accessibility/ax_event_generator.cc index e6a311b..d71e00d 100644 --- a/ui/accessibility/ax_event_generator.cc +++ b/ui/accessibility/ax_event_generator.cc
@@ -108,7 +108,7 @@ return; } - tree_events_[node].emplace(event, ax::mojom::EventFrom::kNone); + tree_events_[node].insert(EventParams(event, ax::mojom::EventFrom::kNone)); } void AXEventGenerator::OnNodeDataWillChange(AXTree* tree, @@ -123,16 +123,8 @@ if (new_node_data.child_ids != old_node_data.child_ids && new_node_data.role != ax::mojom::Role::kStaticText) { AXNode* node = tree_->GetFromId(new_node_data.id); - - // If this node is ignored, fire the CHILDREN_CHANGED on - // the unignored parent if available. - if (new_node_data.HasState(ax::mojom::State::kIgnored)) - node = node->GetUnignoredParent(); - if (!node) - return; - - tree_events_[node].emplace(Event::CHILDREN_CHANGED, - ax::mojom::EventFrom::kNone); + tree_events_[node].insert( + EventParams(Event::CHILDREN_CHANGED, ax::mojom::EventFrom::kNone)); } } @@ -170,7 +162,6 @@ ui::AXNode* unignored_parent = node->GetUnignoredParent(); if (unignored_parent) AddEvent(unignored_parent, Event::CHILDREN_CHANGED); - AddEvent(node, Event::IGNORED_CHANGED); break; } case ax::mojom::State::kMultiline:
diff --git a/ui/accessibility/ax_event_generator.h b/ui/accessibility/ax_event_generator.h index 2ff2228d4..100dbf2 100644 --- a/ui/accessibility/ax_event_generator.h +++ b/ui/accessibility/ax_event_generator.h
@@ -45,7 +45,6 @@ GRABBED_CHANGED, HASPOPUP_CHANGED, HIERARCHICAL_LEVEL_CHANGED, - IGNORED_CHANGED, IMAGE_ANNOTATION_CHANGED, INVALID_STATUS_CHANGED, KEY_SHORTCUTS_CHANGED,
diff --git a/ui/accessibility/ax_event_generator_unittest.cc b/ui/accessibility/ax_event_generator_unittest.cc index dbfa59961..7b47f1bc 100644 --- a/ui/accessibility/ax_event_generator_unittest.cc +++ b/ui/accessibility/ax_event_generator_unittest.cc
@@ -86,9 +86,6 @@ case AXEventGenerator::Event::HIERARCHICAL_LEVEL_CHANGED: event_name = "HIERARCHICAL_LEVEL_CHANGED"; break; - case ui::AXEventGenerator::Event::IGNORED_CHANGED: - event_name = "IGNORED_CHANGED"; - break; case AXEventGenerator::Event::IMAGE_ANNOTATION_CHANGED: event_name = "IMAGE_ANNOTATION_CHANGED"; break; @@ -938,7 +935,6 @@ ASSERT_TRUE(tree.Unserialize(update)); EXPECT_EQ( "CHILDREN_CHANGED on 2, " - "IGNORED_CHANGED on 4, " "STATE_CHANGED on 4", DumpEvents(&event_generator)); } @@ -972,7 +968,6 @@ ASSERT_TRUE(tree.Unserialize(update)); EXPECT_EQ( "CHILDREN_CHANGED on 2, " - "IGNORED_CHANGED on 4, " "STATE_CHANGED on 4", DumpEvents(&event_generator)); }
diff --git a/ui/accessibility/ax_node_data.cc b/ui/accessibility/ax_node_data.cc index 7d7772d..e82402d 100644 --- a/ui/accessibility/ax_node_data.cc +++ b/ui/accessibility/ax_node_data.cc
@@ -1414,9 +1414,6 @@ case ax::mojom::BoolAttribute::kGrabbed: result += " grabbed=" + value; break; - case ax::mojom::BoolAttribute::kIsLineBreakingObject: - result += " is_line_breaking_object=" + value; - break; case ax::mojom::BoolAttribute::kNone: break; }
diff --git a/ui/accessibility/ax_serializable_tree.cc b/ui/accessibility/ax_serializable_tree.cc index f2473aa..a964c17f 100644 --- a/ui/accessibility/ax_serializable_tree.cc +++ b/ui/accessibility/ax_serializable_tree.cc
@@ -44,10 +44,6 @@ return node->parent(); } - bool IsIgnored(const AXNode* node) const override { - return node->data().HasState(ax::mojom::State::kIgnored); - } - bool IsValid(const AXNode* node) const override { return node != nullptr; } bool IsEqual(const AXNode* node1, const AXNode* node2) const override {
diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc index 3efd5f05..a92a132 100644 --- a/ui/accessibility/ax_tree.cc +++ b/ui/accessibility/ax_tree.cc
@@ -993,10 +993,6 @@ const AXNode* local_parent, std::vector<const AXNode*>& items, const AXNode& original_node) const { - // ignored nodes are not a part of ordered sets. - if (original_node.data().HasState(ax::mojom::State::kIgnored)) - return; - // Stop searching current path if roles of local_parent and ordered set match. // Don't compare the container to itself. if (!(ordered_set == local_parent)) {
diff --git a/ui/accessibility/ax_tree_serializer.h b/ui/accessibility/ax_tree_serializer.h index 6aed3474..12774a0 100644 --- a/ui/accessibility/ax_tree_serializer.h +++ b/ui/accessibility/ax_tree_serializer.h
@@ -208,7 +208,6 @@ int32_t id; ClientTreeNode* parent; std::vector<ClientTreeNode*> children; - bool ignored; bool invalid; }; @@ -501,7 +500,6 @@ // We're about to serialize it, so mark it as valid. client_node->invalid = false; - client_node->ignored = tree_->IsIgnored(node); // Iterate over the ids of the children of |node|. // Create a set of the child ids so we can quickly look @@ -509,7 +507,6 @@ // If we've hit the maximum number of serialized nodes, pretend // this node has no children but keep going so that we get // consistent results. - std::unordered_set<int32_t> new_ignored_ids; std::unordered_set<int32_t> new_child_ids; std::vector<AXSourceNode> children; if (max_node_count_ == 0 || out_update->nodes.size() < max_node_count_) { @@ -526,8 +523,6 @@ AXSourceNode& child = children[i]; int new_child_id = tree_->GetId(child); new_child_ids.insert(new_child_id); - if (tree_->IsIgnored(child)) - new_ignored_ids.insert(new_child_id); // There shouldn't be any reparenting because we've already handled it // above. If this happens, reset and return an error. @@ -596,12 +591,9 @@ if (client_child_id_map.find(child_id) != client_child_id_map.end()) { ClientTreeNode* reused_child = client_child_id_map[child_id]; client_node->children.push_back(reused_child); - const bool ignored_state_changed = - reused_child->ignored != - (new_ignored_ids.find(reused_child->id) != new_ignored_ids.end()); // Re-serialize it if the child is marked as invalid, otherwise // we don't have to because the client already has it. - if (reused_child->invalid || ignored_state_changed) { + if (reused_child->invalid) { if (!SerializeChangedNodes(child, out_update)) return false; } @@ -609,7 +601,6 @@ ClientTreeNode* new_child = new ClientTreeNode(); new_child->id = child_id; new_child->parent = client_node; - new_child->ignored = tree_->IsIgnored(child); new_child->invalid = false; client_node->children.push_back(new_child); client_id_map_[child_id] = new_child;
diff --git a/ui/accessibility/ax_tree_serializer_unittest.cc b/ui/accessibility/ax_tree_serializer_unittest.cc index d305964..1cdce57 100644 --- a/ui/accessibility/ax_tree_serializer_unittest.cc +++ b/ui/accessibility/ax_tree_serializer_unittest.cc
@@ -262,9 +262,6 @@ AXNode* GetParent(const AXNode* node) const override { return node->parent(); } - bool IsIgnored(const AXNode* node) const override { - return node->data().HasState(ax::mojom::State::kIgnored); - } bool IsValid(const AXNode* node) const override { return node != nullptr && node->id() != invalid_id_; }
diff --git a/ui/accessibility/ax_tree_source.h b/ui/accessibility/ax_tree_source.h index 7d93b34..100b120 100644 --- a/ui/accessibility/ax_tree_source.h +++ b/ui/accessibility/ax_tree_source.h
@@ -48,9 +48,6 @@ // node object representing the null pointer. virtual bool IsValid(AXNodeSource node) const = 0; - // Returns true if |node| is an ignored node - virtual bool IsIgnored(AXNodeSource node) const = 0; - // Returns true if two nodes are equal. virtual bool IsEqual(AXNodeSource node1, AXNodeSource node2) const = 0;
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc index 58b301a..faff790 100644 --- a/ui/accessibility/platform/ax_platform_node_auralinux.cc +++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
@@ -3095,8 +3095,7 @@ void AXPlatformNodeAuraLinux::OnSubtreeCreated() { DCHECK(atk_object_); // We might not have a parent, in that case we don't need to send the event. - // We also don't want to notify if this is an ignored node - if (!GetParent() || GetData().HasState(ax::mojom::State::kIgnored)) + if (!GetParent()) return; g_signal_emit_by_name(GetParent(), "children-changed::add", GetIndexInParent(), atk_object_); @@ -3105,8 +3104,7 @@ void AXPlatformNodeAuraLinux::OnSubtreeWillBeDeleted() { DCHECK(atk_object_); // There is a chance there won't be a parent as we're in the deletion process. - // We also don't want to notify if this is an ignored node - if (!GetParent() || GetData().HasState(ax::mojom::State::kIgnored)) + if (!GetParent()) return; g_signal_emit_by_name(GetParent(), "children-changed::remove",
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn index 103a2750..0b40479c 100644 --- a/ui/gfx/BUILD.gn +++ b/ui/gfx/BUILD.gn
@@ -23,6 +23,22 @@ ] } +# Used for color generation at build time without importing all the gfx. +jumbo_component("color_utils") { + sources = [ + "color_palette.h", + "color_utils.cc", + "color_utils.h", + ] + defines = [ "GFX_IMPLEMENTATION" ] + public_deps = [ + ":gfx_export", + "//base", + "//skia", + "//ui/gfx/geometry", + ] +} + jumbo_component("geometry_skia") { sources = [ "geometry_skia_export.h", @@ -53,11 +69,8 @@ "break_list.h", "color_analysis.cc", "color_analysis.h", - "color_palette.h", "color_transform.cc", "color_transform.h", - "color_utils.cc", - "color_utils.h", "decorated_text.cc", "decorated_text.h", "decorated_text_mac.h", @@ -242,6 +255,7 @@ public_deps = [ ":color_space", + ":color_utils", ":geometry_skia", ":gfx_switches", ":memory_buffer_sources",
diff --git a/ui/gl/egl_bindings_autogen_mock.cc b/ui/gl/egl_bindings_autogen_mock.cc index 81dd3b7..5163a023 100644 --- a/ui/gl/egl_bindings_autogen_mock.cc +++ b/ui/gl/egl_bindings_autogen_mock.cc
@@ -314,12 +314,11 @@ } EGLDisplay GL_BINDING_CALL -MockEGLInterface::Mock_eglGetPlatformDisplayEXT(EGLenum platform, - void* native_display, - const EGLint* attrib_list) { - MakeEglMockFunctionUnique("eglGetPlatformDisplayEXT"); - return interface_->GetPlatformDisplayEXT(platform, native_display, - attrib_list); +MockEGLInterface::Mock_eglGetPlatformDisplay(EGLenum platform, + void* native_display, + const EGLAttrib* attrib_list) { + MakeEglMockFunctionUnique("eglGetPlatformDisplay"); + return interface_->GetPlatformDisplay(platform, native_display, attrib_list); } __eglMustCastToProperFunctionPointerType GL_BINDING_CALL @@ -689,9 +688,8 @@ if (strcmp(name, "eglGetNextFrameIdANDROID") == 0) return reinterpret_cast<GLFunctionPointerType>( Mock_eglGetNextFrameIdANDROID); - if (strcmp(name, "eglGetPlatformDisplayEXT") == 0) - return reinterpret_cast<GLFunctionPointerType>( - Mock_eglGetPlatformDisplayEXT); + if (strcmp(name, "eglGetPlatformDisplay") == 0) + return reinterpret_cast<GLFunctionPointerType>(Mock_eglGetPlatformDisplay); if (strcmp(name, "eglGetProcAddress") == 0) return reinterpret_cast<GLFunctionPointerType>(Mock_eglGetProcAddress); if (strcmp(name, "eglGetSyncAttribKHR") == 0)
diff --git a/ui/gl/egl_bindings_autogen_mock.h b/ui/gl/egl_bindings_autogen_mock.h index aee9dea..89e50c9 100644 --- a/ui/gl/egl_bindings_autogen_mock.h +++ b/ui/gl/egl_bindings_autogen_mock.h
@@ -138,9 +138,9 @@ EGLSurface surface, EGLuint64KHR* frameId); static EGLDisplay GL_BINDING_CALL -Mock_eglGetPlatformDisplayEXT(EGLenum platform, - void* native_display, - const EGLint* attrib_list); +Mock_eglGetPlatformDisplay(EGLenum platform, + void* native_display, + const EGLAttrib* attrib_list); static __eglMustCastToProperFunctionPointerType GL_BINDING_CALL Mock_eglGetProcAddress(const char* procname); static EGLBoolean GL_BINDING_CALL Mock_eglGetSyncAttribKHR(EGLDisplay dpy,
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py index ebda067..86e408a 100755 --- a/ui/gl/generate_bindings.py +++ b/ui/gl/generate_bindings.py
@@ -2370,11 +2370,9 @@ ] }], 'arguments': 'EGLDisplay dpy, EGLSurface surface, EGLuint64KHR* frameId', }, { 'return_type': 'EGLDisplay', - 'known_as': 'eglGetPlatformDisplayEXT', - 'versions': [{ 'name': 'eglGetPlatformDisplayEXT', - 'client_extensions': ['EGL_EXT_platform_base'], }], + 'names': ['eglGetPlatformDisplay'], 'arguments': 'EGLenum platform, void* native_display, ' - 'const EGLint* attrib_list', }, + 'const EGLAttrib* attrib_list', }, { 'return_type': '__eglMustCastToProperFunctionPointerType', 'names': ['eglGetProcAddress'], 'arguments': 'const char* procname',
diff --git a/ui/gl/gl_bindings_api_autogen_egl.h b/ui/gl/gl_bindings_api_autogen_egl.h index ea1e59a..b1e3ff7 100644 --- a/ui/gl/gl_bindings_api_autogen_egl.h +++ b/ui/gl/gl_bindings_api_autogen_egl.h
@@ -116,9 +116,9 @@ EGLBoolean eglGetNextFrameIdANDROIDFn(EGLDisplay dpy, EGLSurface surface, EGLuint64KHR* frameId) override; -EGLDisplay eglGetPlatformDisplayEXTFn(EGLenum platform, - void* native_display, - const EGLint* attrib_list) override; +EGLDisplay eglGetPlatformDisplayFn(EGLenum platform, + void* native_display, + const EGLAttrib* attrib_list) override; __eglMustCastToProperFunctionPointerType eglGetProcAddressFn( const char* procname) override; EGLBoolean eglGetSyncAttribKHRFn(EGLDisplay dpy,
diff --git a/ui/gl/gl_bindings_autogen_egl.cc b/ui/gl/gl_bindings_autogen_egl.cc index 311d716..e789600 100644 --- a/ui/gl/gl_bindings_autogen_egl.cc +++ b/ui/gl/gl_bindings_autogen_egl.cc
@@ -74,6 +74,8 @@ reinterpret_cast<eglGetDisplayProc>(GetGLProcAddress("eglGetDisplay")); fn.eglGetErrorFn = reinterpret_cast<eglGetErrorProc>(GetGLProcAddress("eglGetError")); + fn.eglGetPlatformDisplayFn = reinterpret_cast<eglGetPlatformDisplayProc>( + GetGLProcAddress("eglGetPlatformDisplay")); fn.eglGetProcAddressFn = reinterpret_cast<eglGetProcAddressProc>( GetGLProcAddress("eglGetProcAddress")); fn.eglGetSyncAttribKHRFn = reinterpret_cast<eglGetSyncAttribKHRProc>( @@ -117,8 +119,6 @@ ext.b_EGL_ANGLE_feature_control = gfx::HasExtension(extensions, "EGL_ANGLE_feature_control"); - ext.b_EGL_EXT_platform_base = - gfx::HasExtension(extensions, "EGL_EXT_platform_base"); ext.b_EGL_KHR_debug = gfx::HasExtension(extensions, "EGL_KHR_debug"); if (ext.b_EGL_KHR_debug) { @@ -127,12 +127,6 @@ GetGLProcAddress("eglDebugMessageControlKHR")); } - if (ext.b_EGL_EXT_platform_base) { - fn.eglGetPlatformDisplayEXTFn = - reinterpret_cast<eglGetPlatformDisplayEXTProc>( - GetGLProcAddress("eglGetPlatformDisplayEXT")); - } - if (ext.b_EGL_KHR_debug) { fn.eglLabelObjectKHRFn = reinterpret_cast<eglLabelObjectKHRProc>( GetGLProcAddress("eglLabelObjectKHR")); @@ -597,11 +591,11 @@ return driver_->fn.eglGetNextFrameIdANDROIDFn(dpy, surface, frameId); } -EGLDisplay EGLApiBase::eglGetPlatformDisplayEXTFn(EGLenum platform, - void* native_display, - const EGLint* attrib_list) { - return driver_->fn.eglGetPlatformDisplayEXTFn(platform, native_display, - attrib_list); +EGLDisplay EGLApiBase::eglGetPlatformDisplayFn(EGLenum platform, + void* native_display, + const EGLAttrib* attrib_list) { + return driver_->fn.eglGetPlatformDisplayFn(platform, native_display, + attrib_list); } __eglMustCastToProperFunctionPointerType EGLApiBase::eglGetProcAddressFn( @@ -1095,12 +1089,12 @@ return egl_api_->eglGetNextFrameIdANDROIDFn(dpy, surface, frameId); } -EGLDisplay TraceEGLApi::eglGetPlatformDisplayEXTFn(EGLenum platform, - void* native_display, - const EGLint* attrib_list) { - TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglGetPlatformDisplayEXT") - return egl_api_->eglGetPlatformDisplayEXTFn(platform, native_display, - attrib_list); +EGLDisplay TraceEGLApi::eglGetPlatformDisplayFn(EGLenum platform, + void* native_display, + const EGLAttrib* attrib_list) { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglGetPlatformDisplay") + return egl_api_->eglGetPlatformDisplayFn(platform, native_display, + attrib_list); } __eglMustCastToProperFunctionPointerType TraceEGLApi::eglGetProcAddressFn( @@ -1780,15 +1774,15 @@ return result; } -EGLDisplay DebugEGLApi::eglGetPlatformDisplayEXTFn(EGLenum platform, - void* native_display, - const EGLint* attrib_list) { - GL_SERVICE_LOG("eglGetPlatformDisplayEXT" +EGLDisplay DebugEGLApi::eglGetPlatformDisplayFn(EGLenum platform, + void* native_display, + const EGLAttrib* attrib_list) { + GL_SERVICE_LOG("eglGetPlatformDisplay" << "(" << platform << ", " << static_cast<const void*>(native_display) << ", " << static_cast<const void*>(attrib_list) << ")"); - EGLDisplay result = egl_api_->eglGetPlatformDisplayEXTFn( - platform, native_display, attrib_list); + EGLDisplay result = + egl_api_->eglGetPlatformDisplayFn(platform, native_display, attrib_list); GL_SERVICE_LOG("GL_RESULT: " << result); return result; }
diff --git a/ui/gl/gl_bindings_autogen_egl.h b/ui/gl/gl_bindings_autogen_egl.h index 972a8b5c..f140abd 100644 --- a/ui/gl/gl_bindings_autogen_egl.h +++ b/ui/gl/gl_bindings_autogen_egl.h
@@ -147,10 +147,10 @@ EGLDisplay dpy, EGLSurface surface, EGLuint64KHR* frameId); -typedef EGLDisplay(GL_BINDING_CALL* eglGetPlatformDisplayEXTProc)( +typedef EGLDisplay(GL_BINDING_CALL* eglGetPlatformDisplayProc)( EGLenum platform, void* native_display, - const EGLint* attrib_list); + const EGLAttrib* attrib_list); typedef __eglMustCastToProperFunctionPointerType( GL_BINDING_CALL* eglGetProcAddressProc)(const char* procname); typedef EGLBoolean(GL_BINDING_CALL* eglGetSyncAttribKHRProc)(EGLDisplay dpy, @@ -272,7 +272,6 @@ struct ExtensionsEGL { bool b_EGL_ANGLE_feature_control; - bool b_EGL_EXT_platform_base; bool b_EGL_KHR_debug; bool b_EGL_ANDROID_blob_cache; bool b_EGL_ANDROID_get_frame_timestamps; @@ -339,7 +338,7 @@ eglGetFrameTimestampSupportedANDROIDFn; eglGetNativeClientBufferANDROIDProc eglGetNativeClientBufferANDROIDFn; eglGetNextFrameIdANDROIDProc eglGetNextFrameIdANDROIDFn; - eglGetPlatformDisplayEXTProc eglGetPlatformDisplayEXTFn; + eglGetPlatformDisplayProc eglGetPlatformDisplayFn; eglGetProcAddressProc eglGetProcAddressFn; eglGetSyncAttribKHRProc eglGetSyncAttribKHRFn; eglGetSyncValuesCHROMIUMProc eglGetSyncValuesCHROMIUMFn; @@ -500,9 +499,9 @@ virtual EGLBoolean eglGetNextFrameIdANDROIDFn(EGLDisplay dpy, EGLSurface surface, EGLuint64KHR* frameId) = 0; - virtual EGLDisplay eglGetPlatformDisplayEXTFn(EGLenum platform, - void* native_display, - const EGLint* attrib_list) = 0; + virtual EGLDisplay eglGetPlatformDisplayFn(EGLenum platform, + void* native_display, + const EGLAttrib* attrib_list) = 0; virtual __eglMustCastToProperFunctionPointerType eglGetProcAddressFn( const char* procname) = 0; virtual EGLBoolean eglGetSyncAttribKHRFn(EGLDisplay dpy, @@ -663,8 +662,8 @@ ::gl::g_current_egl_context->eglGetNativeClientBufferANDROIDFn #define eglGetNextFrameIdANDROID \ ::gl::g_current_egl_context->eglGetNextFrameIdANDROIDFn -#define eglGetPlatformDisplayEXT \ - ::gl::g_current_egl_context->eglGetPlatformDisplayEXTFn +#define eglGetPlatformDisplay \ + ::gl::g_current_egl_context->eglGetPlatformDisplayFn #define eglGetProcAddress ::gl::g_current_egl_context->eglGetProcAddressFn #define eglGetSyncAttribKHR ::gl::g_current_egl_context->eglGetSyncAttribKHRFn #define eglGetSyncValuesCHROMIUM \
diff --git a/ui/gl/gl_mock_autogen_egl.h b/ui/gl/gl_mock_autogen_egl.h index 4bf7a2c..cdc73b5b2 100644 --- a/ui/gl/gl_mock_autogen_egl.h +++ b/ui/gl/gl_mock_autogen_egl.h
@@ -127,10 +127,10 @@ EGLBoolean(EGLDisplay dpy, EGLSurface surface, EGLuint64KHR* frameId)); -MOCK_METHOD3(GetPlatformDisplayEXT, +MOCK_METHOD3(GetPlatformDisplay, EGLDisplay(EGLenum platform, void* native_display, - const EGLint* attrib_list)); + const EGLAttrib* attrib_list)); MOCK_METHOD1(GetProcAddress, __eglMustCastToProperFunctionPointerType(const char* procname)); MOCK_METHOD4(GetSyncAttribKHR,
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc index 249cd6b7..8d6fcd49 100644 --- a/ui/gl/gl_surface_egl.cc +++ b/ui/gl/gl_surface_egl.cc
@@ -18,6 +18,7 @@ #include "base/metrics/histogram_macros.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/system/sys_info.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" @@ -133,6 +134,19 @@ #define EGL_DISPLAY_ROBUST_RESOURCE_INITIALIZATION_ANGLE 0x3453 #endif /* EGL_ANGLE_display_robust_resource_initialization */ +// From ANGLE's egl/eglext.h. +#ifndef EGL_ANGLE_feature_control +#define EGL_ANGLE_feature_control 1 +#define EGL_FEATURE_NAME_ANGLE 0x3460 +#define EGL_FEATURE_CATEGORY_ANGLE 0x3461 +#define EGL_FEATURE_DESCRIPTION_ANGLE 0x3462 +#define EGL_FEATURE_BUG_ANGLE 0x3463 +#define EGL_FEATURE_STATUS_ANGLE 0x3464 +#define EGL_FEATURE_COUNT_ANGLE 0x3465 +#define EGL_FEATURE_OVERRIDES_ENABLED_ANGLE 0x3466 +#define EGL_FEATURE_OVERRIDES_DISABLED_ANGLE 0x3467 +#endif /* EGL_ANGLE_feature_control */ + using ui::GetLastEGLErrorString; namespace gl { @@ -221,14 +235,35 @@ DISALLOW_COPY_AND_ASSIGN(EGLSyncControlVSyncProvider); }; -EGLDisplay GetPlatformANGLEDisplay(EGLNativeDisplayType native_display, - EGLenum platform_type, - bool warpDevice, - bool nullDevice) { - std::vector<EGLint> display_attribs; +std::vector<const char*> GetAttribArrayFromStringVector( + const std::vector<std::string>& strings) { + std::vector<const char*> attribs; + for (const std::string& item : strings) { + attribs.push_back(item.c_str()); + } + attribs.push_back(0); + return attribs; +} + +std::vector<std::string> GetStringVectorFromCommandLine( + const base::CommandLine* command_line, + const char switch_name[]) { + std::string command_string = command_line->GetSwitchValueASCII(switch_name); + return base::SplitString(command_string, ", ;", base::TRIM_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); +} + +EGLDisplay GetPlatformANGLEDisplay( + EGLNativeDisplayType native_display, + EGLenum platform_type, + bool warpDevice, + bool nullDevice, + const std::vector<std::string>& enabled_features, + const std::vector<std::string>& disabled_features) { + std::vector<EGLAttrib> display_attribs; display_attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); - display_attribs.push_back(platform_type); + display_attribs.push_back(static_cast<EGLAttrib>(platform_type)); if (warpDevice) { DCHECK(!nullDevice); @@ -248,53 +283,85 @@ ui::XVisualManager::GetInstance()->ChooseVisualForWindow( true, &visual, nullptr, nullptr, nullptr); display_attribs.push_back(EGL_X11_VISUAL_ID_ANGLE); - display_attribs.push_back(static_cast<EGLint>(XVisualIDFromVisual(visual))); + display_attribs.push_back( + static_cast<EGLAttrib>(XVisualIDFromVisual(visual))); } #endif - display_attribs.push_back(EGL_NONE); + std::vector<const char*> enabled_features_attribs = + GetAttribArrayFromStringVector(enabled_features); + std::vector<const char*> disabled_features_attribs = + GetAttribArrayFromStringVector(disabled_features); + if (g_egl_angle_feature_control_supported) { + if (!enabled_features_attribs.empty()) { + display_attribs.push_back(EGL_FEATURE_OVERRIDES_ENABLED_ANGLE); + display_attribs.push_back( + reinterpret_cast<EGLAttrib>(enabled_features_attribs.data())); + } + if (!disabled_features_attribs.empty()) { + display_attribs.push_back(EGL_FEATURE_OVERRIDES_DISABLED_ANGLE); + display_attribs.push_back( + reinterpret_cast<EGLAttrib>(disabled_features_attribs.data())); + } + } - return eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, - reinterpret_cast<void*>(native_display), - &display_attribs[0]); + display_attribs.push_back(EGL_NONE); + // This is an EGL 1.5 function that we know ANGLE supports. It's used to pass + // EGLAttribs (pointers) instead of EGLints into the display + return eglGetPlatformDisplay(EGL_PLATFORM_ANGLE_ANGLE, + reinterpret_cast<void*>(native_display), + &display_attribs[0]); } -EGLDisplay GetDisplayFromType(DisplayType display_type, - EGLNativeDisplayType native_display) { +EGLDisplay GetDisplayFromType( + DisplayType display_type, + EGLNativeDisplayType native_display, + const std::vector<std::string>& enabled_angle_features, + const std::vector<std::string>& disabled_angle_features) { switch (display_type) { case DEFAULT: case SWIFT_SHADER: return eglGetDisplay(native_display); case ANGLE_D3D9: return GetPlatformANGLEDisplay( - native_display, EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, false, false); + native_display, EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, false, false, + enabled_angle_features, disabled_angle_features); case ANGLE_D3D11: return GetPlatformANGLEDisplay( - native_display, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, false, false); + native_display, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, false, false, + enabled_angle_features, disabled_angle_features); case ANGLE_D3D11_NULL: return GetPlatformANGLEDisplay( - native_display, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, false, true); + native_display, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, false, true, + enabled_angle_features, disabled_angle_features); case ANGLE_OPENGL: return GetPlatformANGLEDisplay( - native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE, false, false); + native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE, false, false, + enabled_angle_features, disabled_angle_features); case ANGLE_OPENGL_NULL: return GetPlatformANGLEDisplay( - native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE, false, true); + native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE, false, true, + enabled_angle_features, disabled_angle_features); case ANGLE_OPENGLES: return GetPlatformANGLEDisplay( - native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE, false, false); + native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE, false, false, + enabled_angle_features, disabled_angle_features); case ANGLE_OPENGLES_NULL: return GetPlatformANGLEDisplay( - native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE, false, true); + native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE, false, true, + enabled_angle_features, disabled_angle_features); case ANGLE_NULL: return GetPlatformANGLEDisplay( - native_display, EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE, false, false); + native_display, EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE, false, false, + enabled_angle_features, disabled_angle_features); case ANGLE_VULKAN: return GetPlatformANGLEDisplay( - native_display, EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE, false, false); + native_display, EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE, false, false, + enabled_angle_features, disabled_angle_features); case ANGLE_VULKAN_NULL: return GetPlatformANGLEDisplay( - native_display, EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE, false, true); + native_display, EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE, false, true, + enabled_angle_features, disabled_angle_features); default: NOTREACHED(); return EGL_NO_DISPLAY; @@ -951,13 +1018,23 @@ } std::vector<DisplayType> init_displays; + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); GetEGLInitDisplays(supports_angle_d3d, supports_angle_opengl, - supports_angle_null, supports_angle_vulkan, - base::CommandLine::ForCurrentProcess(), &init_displays); + supports_angle_null, supports_angle_vulkan, command_line, + &init_displays); + + std::vector<std::string> enabled_angle_features = + GetStringVectorFromCommandLine(command_line, + switches::kEnableANGLEFeatures); + std::vector<std::string> disabled_angle_features = + GetStringVectorFromCommandLine(command_line, + switches::kDisableANGLEFeatures); for (size_t disp_index = 0; disp_index < init_displays.size(); ++disp_index) { DisplayType display_type = init_displays[disp_index]; - EGLDisplay display = GetDisplayFromType(display_type, g_native_display); + EGLDisplay display = + GetDisplayFromType(display_type, g_native_display, + enabled_angle_features, disabled_angle_features); if (display == EGL_NO_DISPLAY) { LOG(ERROR) << "EGL display query failed with error " << GetLastEGLErrorString();
diff --git a/ui/gl/gl_switches.cc b/ui/gl/gl_switches.cc index ddce7874..d87c5fd 100644 --- a/ui/gl/gl_switches.cc +++ b/ui/gl/gl_switches.cc
@@ -66,6 +66,12 @@ // gles: GLES renderer, ES2 and ES3. const char kUseANGLE[] = "use-angle"; +// ANGLE features are defined per-backend in third_party/angle/include/platform +// Enables specified comma separated ANGLE features if found. +const char kEnableANGLEFeatures[] = "enable-angle-features"; +// Disables specified comma separated ANGLE features if found. +const char kDisableANGLEFeatures[] = "disable-angle-features"; + // Select which implementation of GL the GPU process should use. Options are: // desktop: whatever desktop OpenGL the user has installed (Linux and Mac // default).
diff --git a/ui/gl/gl_switches.h b/ui/gl/gl_switches.h index add27a51..5f234aa 100644 --- a/ui/gl/gl_switches.h +++ b/ui/gl/gl_switches.h
@@ -49,6 +49,8 @@ GL_EXPORT extern const char kGpuNoContextLost[]; GL_EXPORT extern const char kUseANGLE[]; +GL_EXPORT extern const char kEnableANGLEFeatures[]; +GL_EXPORT extern const char kDisableANGLEFeatures[]; GL_EXPORT extern const char kUseGL[]; GL_EXPORT extern const char kTestGLLib[]; GL_EXPORT extern const char kUseGpuInTests[];
diff --git a/ui/login/display_manager.js b/ui/login/display_manager.js index 7ab39566..c4b6028c 100644 --- a/ui/login/display_manager.js +++ b/ui/login/display_manager.js
@@ -774,6 +774,10 @@ // Set screen dimensions to maximum dimensions within this group. for (let j = 0; j < screenGroup.length; ++j) { let screen2 = $(screenGroup[j]); + // Other screens in this screen group might be missing if we're not + // in OOBE. + if (!screen2) + continue; width = Math.max(width, screen2.getPreferredSize().width); height = Math.max(height, screen2.getPreferredSize().height); }
diff --git a/ui/ozone/BUILD.gn b/ui/ozone/BUILD.gn index 66463bc9..625e4e0 100644 --- a/ui/ozone/BUILD.gn +++ b/ui/ozone/BUILD.gn
@@ -70,7 +70,6 @@ jumbo_component("ozone_base") { sources = [ - "ozone_base_export.h", "public/cursor_factory_ozone.cc", "public/cursor_factory_ozone.h", "public/gl_ozone.h", @@ -98,7 +97,7 @@ "public/swap_completion_callback.h", ] - defines = [ "OZONE_BASE_IMPLEMENTATION" ] + defines = [ "IS_OZONE_BASE_IMPL" ] public_deps = [ "//base", @@ -142,7 +141,6 @@ sources = [ "common/stub_client_native_pixmap_factory.cc", "common/stub_client_native_pixmap_factory.h", - "ozone_export.h", "platform_constructor_list.h", "platform_object.h", "platform_object_internal.h", @@ -162,7 +160,7 @@ "public/ozone_platform.h", ] - defines = [ "OZONE_IMPLEMENTATION" ] + defines = [ "IS_OZONE_IMPL" ] public_deps = [ ":ozone_base",
diff --git a/ui/ozone/generate_constructor_list.py b/ui/ozone/generate_constructor_list.py index 87aa8a5..8d800636 100755 --- a/ui/ozone/generate_constructor_list.py +++ b/ui/ozone/generate_constructor_list.py
@@ -12,7 +12,7 @@ Example Output: ./ui/ozone/generate_constructor_list.py \ --platform test \ --platform dri \ - --export OZONE_EXPORT \ + --export OZONE \ --namespace ui \ --typename OzonePlatform \ --include '"ui/ozone/ozone_platform.h"' @@ -40,7 +40,7 @@ &ui::CreateOzonePlatformDri, }; - template class OZONE_EXPORT PlatformObject<ui::OzonePlatform>; + template class COMPONENT_EXPORT(OZONE) PlatformObject<ui::OzonePlatform>; } // namespace ui """ @@ -129,7 +129,8 @@ # Exported template instantiation. for typename in typenames: - out.write('template class %(export)s PlatformObject<%(typename)s>;\n' + out.write('template class COMPONENT_EXPORT(%(export)s)' \ + ' PlatformObject<%(typename)s>;\n' % {'export': export, 'typename': typename}) out.write('\n') @@ -140,7 +141,7 @@ def main(argv): parser = optparse.OptionParser() parser.add_option('--namespace', default='ozone') - parser.add_option('--export', default='OZONE_EXPORT') + parser.add_option('--export', default='OZONE') parser.add_option('--platform_list') parser.add_option('--output_cc') parser.add_option('--include', action='append', default=[])
diff --git a/ui/ozone/ozone_base_export.h b/ui/ozone/ozone_base_export.h deleted file mode 100644 index d3df39bc..0000000 --- a/ui/ozone/ozone_base_export.h +++ /dev/null
@@ -1,29 +0,0 @@ -// Copyright 2013 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_OZONE_OZONE_BASE_EXPORT_H_ -#define UI_OZONE_OZONE_BASE_EXPORT_H_ - -#if defined(COMPONENT_BUILD) -#if defined(WIN32) - -#if defined(OZONE_BASE_IMPLEMENTATION) -#define OZONE_BASE_EXPORT __declspec(dllexport) -#else -#define OZONE_BASE_EXPORT __declspec(dllimport) -#endif // defined(OZONE_BASE_IMPLEMENTATION) - -#else // defined(WIN32) -#if defined(OZONE_BASE_IMPLEMENTATION) -#define OZONE_BASE_EXPORT __attribute__((visibility("default"))) -#else -#define OZONE_BASE_EXPORT -#endif -#endif - -#else // defined(COMPONENT_BUILD) -#define OZONE_BASE_EXPORT -#endif - -#endif // UI_OZONE_OZONE_BASE_EXPORT_H_
diff --git a/ui/ozone/ozone_export.h b/ui/ozone/ozone_export.h deleted file mode 100644 index cc587a56..0000000 --- a/ui/ozone/ozone_export.h +++ /dev/null
@@ -1,29 +0,0 @@ -// Copyright 2013 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_OZONE_OZONE_EXPORT_H_ -#define UI_OZONE_OZONE_EXPORT_H_ - -#if defined(COMPONENT_BUILD) -#if defined(WIN32) - -#if defined(OZONE_IMPLEMENTATION) -#define OZONE_EXPORT __declspec(dllexport) -#else -#define OZONE_EXPORT __declspec(dllimport) -#endif // defined(OZONE_IMPLEMENTATION) - -#else // defined(WIN32) -#if defined(OZONE_IMPLEMENTATION) -#define OZONE_EXPORT __attribute__((visibility("default"))) -#else -#define OZONE_EXPORT -#endif -#endif - -#else // defined(COMPONENT_BUILD) -#define OZONE_EXPORT -#endif - -#endif // UI_OZONE_OZONE_EXPORT_H_
diff --git a/ui/ozone/platform/scenic/scenic_window.h b/ui/ozone/platform/scenic/scenic_window.h index 4e1d7a86..b4f07cfd 100644 --- a/ui/ozone/platform/scenic/scenic_window.h +++ b/ui/ozone/platform/scenic/scenic_window.h
@@ -12,6 +12,7 @@ #include <string> #include <vector> +#include "base/component_export.h" #include "base/macros.h" #include "ui/events/fuchsia/input_event_dispatcher.h" #include "ui/events/fuchsia/input_event_dispatcher_delegate.h" @@ -19,7 +20,6 @@ #include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size_f.h" #include "ui/gfx/native_widget_types.h" -#include "ui/ozone/ozone_export.h" #include "ui/platform_window/platform_window.h" namespace ui { @@ -27,8 +27,9 @@ class ScenicWindowManager; class PlatformWindowDelegate; -class OZONE_EXPORT ScenicWindow : public PlatformWindow, - public InputEventDispatcherDelegate { +class COMPONENT_EXPORT(OZONE) ScenicWindow + : public PlatformWindow, + public InputEventDispatcherDelegate { public: // Both |window_manager| and |delegate| must outlive the ScenicWindow. // |view_token| is passed to Scenic to attach the view to the view tree.
diff --git a/ui/ozone/platform/scenic/scenic_window_manager.h b/ui/ozone/platform/scenic/scenic_window_manager.h index d7ee9a7e..d8ce935 100644 --- a/ui/ozone/platform/scenic/scenic_window_manager.h +++ b/ui/ozone/platform/scenic/scenic_window_manager.h
@@ -9,11 +9,11 @@ #include <stdint.h> #include <memory> +#include "base/component_export.h" #include "base/containers/id_map.h" #include "base/macros.h" #include "base/threading/thread_checker.h" #include "ui/gfx/native_widget_types.h" -#include "ui/ozone/ozone_export.h" #include "ui/ozone/platform/scenic/scenic_screen.h" #include "ui/ozone/public/surface_factory_ozone.h" @@ -28,7 +28,7 @@ // // TODO(sergeyu): Consider updating AcceleratedWidget to store ScenicWindow* // which would remove the need for the IDMap. -class OZONE_EXPORT ScenicWindowManager { +class COMPONENT_EXPORT(OZONE) ScenicWindowManager { public: ScenicWindowManager(); ~ScenicWindowManager();
diff --git a/ui/ozone/platform/x11/BUILD.gn b/ui/ozone/platform/x11/BUILD.gn index b181984..07ee634 100644 --- a/ui/ozone/platform/x11/BUILD.gn +++ b/ui/ozone/platform/x11/BUILD.gn
@@ -26,8 +26,6 @@ "x11_cursor_factory_ozone.h", "x11_cursor_ozone.cc", "x11_cursor_ozone.h", - "x11_display_fetcher_ozone.cc", - "x11_display_fetcher_ozone.h", "x11_screen_ozone.cc", "x11_screen_ozone.h", "x11_surface_factory.cc",
diff --git a/ui/ozone/platform/x11/x11_display_fetcher_ozone.cc b/ui/ozone/platform/x11/x11_display_fetcher_ozone.cc deleted file mode 100644 index 6e6e277..0000000 --- a/ui/ozone/platform/x11/x11_display_fetcher_ozone.cc +++ /dev/null
@@ -1,91 +0,0 @@ -// Copyright 2018 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/ozone/platform/x11/x11_display_fetcher_ozone.h" - -#include <dlfcn.h> - -#include "base/logging.h" -#include "base/memory/protected_memory_cfi.h" -#include "ui/base/x/x11_display_util.h" -#include "ui/base/x/x11_util.h" -#include "ui/display/display.h" -#include "ui/display/util/display_util.h" -#include "ui/display/util/x11/edid_parser_x11.h" -#include "ui/events/platform/platform_event_source.h" -#include "ui/gfx/x/x11.h" -#include "ui/gfx/x/x11_atom_cache.h" -#include "ui/gfx/x/x11_types.h" - -namespace ui { - -namespace { - -constexpr int kMinVersionXrandr = 103; // Need at least xrandr version 1.3. - -float GetDeviceScaleFactor() { - float device_scale_factor = 1.0f; - // TODO(jkim) : https://crbug.com/891175 - // Get device scale factor using scale factor and resolution like - // 'GtkUi::GetRawDeviceScaleFactor'. - if (display::Display::HasForceDeviceScaleFactor()) - device_scale_factor = display::Display::GetForcedDeviceScaleFactor(); - return device_scale_factor; -} - -} // namespace - -//////////////////////////////////////////////////////////////////////////////// -// X11DisplayFetcherOzone, public: - -X11DisplayFetcherOzone::X11DisplayFetcherOzone( - X11DisplayFetcherOzone::Delegate* delegate) - : xdisplay_(gfx::GetXDisplay()), - x_root_window_(DefaultRootWindow(xdisplay_)), - xrandr_version_(GetXrandrVersion(xdisplay_)), - delegate_(delegate) { - DCHECK(delegate_); - - float scale = GetDeviceScaleFactor(); - std::vector<display::Display> displays; - // Need at least xrandr version 1.3. - if (xrandr_version_ >= kMinVersionXrandr) { - int error_base_ignored = 0; - XRRQueryExtension(xdisplay_, &xrandr_event_base_, &error_base_ignored); - - if (PlatformEventSource::GetInstance()) - PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this); - XRRSelectInput(xdisplay_, x_root_window_, - RRScreenChangeNotifyMask | RROutputChangeNotifyMask | - RRCrtcChangeNotifyMask); - - displays = BuildDisplaysFromXRandRInfo(xrandr_version_, scale, - &primary_display_index_); - } else { - displays = GetFallbackDisplayList(scale); - } - for (auto& display : displays) - delegate_->AddDisplay(display, display.id() == primary_display_index_); -} - -X11DisplayFetcherOzone::~X11DisplayFetcherOzone() { - if (xrandr_version_ >= kMinVersionXrandr && - PlatformEventSource::GetInstance()) { - PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this); - } -} - -bool X11DisplayFetcherOzone::CanDispatchEvent(const ui::PlatformEvent& event) { - // TODO(jkim): https://crbug.com/891175 - NOTIMPLEMENTED_LOG_ONCE(); - return false; -} - -uint32_t X11DisplayFetcherOzone::DispatchEvent(const ui::PlatformEvent& event) { - // TODO(jkim): https://crbug.com/891175 - NOTIMPLEMENTED_LOG_ONCE(); - return ui::POST_DISPATCH_NONE; -} - -} // namespace ui
diff --git a/ui/ozone/platform/x11/x11_display_fetcher_ozone.h b/ui/ozone/platform/x11/x11_display_fetcher_ozone.h deleted file mode 100644 index f839183..0000000 --- a/ui/ozone/platform/x11/x11_display_fetcher_ozone.h +++ /dev/null
@@ -1,59 +0,0 @@ -// Copyright 2018 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_OZONE_PLATFORM_X11_X11_DISPLAY_FETCHER_OZONE_H_ -#define UI_OZONE_PLATFORM_X11_X11_DISPLAY_FETCHER_OZONE_H_ - -#include <stdint.h> - -#include "ui/display/types/native_display_delegate.h" -#include "ui/events/platform/platform_event_dispatcher.h" -#include "ui/gfx/x/x11_types.h" - -namespace display { -class Display; -} // namespace display - -namespace ui { - -// X11DisplayFetcherOzone talks to xrandr to get the information of the outputs -// for a screen and updates Display to X11DisplayFetcherOzone::Delegate. The -// minimum required version of xrandr is 1.3. -class X11DisplayFetcherOzone : public ui::PlatformEventDispatcher { - public: - class Delegate { - public: - virtual void AddDisplay(const display::Display& display, - bool is_primary) = 0; - virtual void RemoveDisplay(const display::Display& display) = 0; - }; - - explicit X11DisplayFetcherOzone(X11DisplayFetcherOzone::Delegate* delegate); - ~X11DisplayFetcherOzone() override; - - // ui::PlatformEventDispatcher: - bool CanDispatchEvent(const ui::PlatformEvent& event) override; - uint32_t DispatchEvent(const ui::PlatformEvent& event) override; - - private: - int64_t primary_display_index_ = 0; - - XDisplay* const xdisplay_; - XID x_root_window_; - - // XRandR version. MAJOR * 100 + MINOR. Zero if no xrandr is present. - const int xrandr_version_; - - // The base of the event numbers used to represent XRandr events used in - // decoding events regarding output add/remove. - int xrandr_event_base_ = 0; - - Delegate* const delegate_; - - DISALLOW_COPY_AND_ASSIGN(X11DisplayFetcherOzone); -}; - -} // namespace ui - -#endif // UI_OZONE_PLATFORM_X11_X11_DISPLAY_FETCHER_OZONE_H_
diff --git a/ui/ozone/platform/x11/x11_screen_ozone.cc b/ui/ozone/platform/x11/x11_screen_ozone.cc index 39426b2..4523ab21 100644 --- a/ui/ozone/platform/x11/x11_screen_ozone.cc +++ b/ui/ozone/platform/x11/x11_screen_ozone.cc
@@ -4,23 +4,51 @@ #include "ui/ozone/platform/x11/x11_screen_ozone.h" -#include "ui/display/display.h" -#include "ui/display/display_finder.h" -#include "ui/display/display_observer.h" +#include "ui/base/x/x11_display_util.h" +#include "ui/base/x/x11_util.h" +#include "ui/display/util/display_util.h" +#include "ui/display/util/x11/edid_parser_x11.h" +#include "ui/events/platform/platform_event_source.h" +#include "ui/events/platform/x11/x11_event_source.h" #include "ui/gfx/font_render_params.h" #include "ui/gfx/geometry/dip_util.h" -#include "ui/gfx/geometry/point.h" -#include "ui/gfx/geometry/size.h" +#include "ui/gfx/x/x11.h" namespace ui { -X11ScreenOzone::X11ScreenOzone() { - // Creates |display_fetcher_| instead of adding it to a member initializer - // list as it requires |this|. - display_fetcher_ = std::make_unique<X11DisplayFetcherOzone>(this); +namespace { + +constexpr int kMinVersionXrandr = 103; // Need at least xrandr version 1.3. + +float GetDeviceScaleFactor() { + float device_scale_factor = 1.0f; + // TODO(crbug.com/891175): Implement PlatformScreen for X11 + // Get device scale factor using scale factor and resolution like + // 'GtkUi::GetRawDeviceScaleFactor'. + if (display::Display::HasForceDeviceScaleFactor()) + device_scale_factor = display::Display::GetForcedDeviceScaleFactor(); + return device_scale_factor; } -X11ScreenOzone::~X11ScreenOzone() = default; +gfx::Point PixelToDIPPoint(const gfx::Point& pixel_point) { + return gfx::ConvertPointToDIP(GetDeviceScaleFactor(), pixel_point); +} + +} // namespace + +X11ScreenOzone::X11ScreenOzone() + : xdisplay_(gfx::GetXDisplay()), + x_root_window_(DefaultRootWindow(xdisplay_)), + xrandr_version_(GetXrandrVersion(xdisplay_)) { + FetchDisplayList(); +} + +X11ScreenOzone::~X11ScreenOzone() { + if (xrandr_version_ >= kMinVersionXrandr && + PlatformEventSource::GetInstance()) { + PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this); + } +} const std::vector<display::Display>& X11ScreenOzone::GetAllDisplays() const { return display_list_.displays(); @@ -35,34 +63,39 @@ display::Display X11ScreenOzone::GetDisplayForAcceleratedWidget( gfx::AcceleratedWidget widget) const { - // TODO(jkim): https://crbug.com/891175 + // TODO(crbug.com/891175): Implement PlatformScreen for X11 NOTIMPLEMENTED_LOG_ONCE(); return GetPrimaryDisplay(); } gfx::Point X11ScreenOzone::GetCursorScreenPoint() const { - // TODO(jkim): https://crbug.com/891175 - NOTIMPLEMENTED_LOG_ONCE(); - return gfx::Point(); + if (ui::X11EventSource::HasInstance()) { + base::Optional<gfx::Point> point = + ui::X11EventSource::GetInstance() + ->GetRootCursorLocationFromCurrentEvent(); + if (point) + return PixelToDIPPoint(point.value()); + } + return PixelToDIPPoint(GetCursorLocation()); } gfx::AcceleratedWidget X11ScreenOzone::GetAcceleratedWidgetAtScreenPoint( const gfx::Point& point) const { - // TODO(jkim): https://crbug.com/891175 + // TODO(crbug.com/891175): Implement PlatformScreen for X11 NOTIMPLEMENTED_LOG_ONCE(); return gfx::kNullAcceleratedWidget; } display::Display X11ScreenOzone::GetDisplayNearestPoint( const gfx::Point& point) const { - // TODO(jkim): https://crbug.com/891175 + // TODO(crbug.com/891175): Implement PlatformScreen for X11 NOTIMPLEMENTED_LOG_ONCE(); return GetPrimaryDisplay(); } display::Display X11ScreenOzone::GetDisplayMatching( const gfx::Rect& match_rect) const { - // TODO(jkim): https://crbug.com/891175 + // TODO(crbug.com/891175): Implement PlatformScreen for X11 NOTIMPLEMENTED_LOG_ONCE(); return GetPrimaryDisplay(); } @@ -75,6 +108,18 @@ display_list_.RemoveObserver(observer); } +bool X11ScreenOzone::CanDispatchEvent(const ui::PlatformEvent& event) { + // TODO(crbug.com/891175): Implement PlatformScreen for X11 + NOTIMPLEMENTED_LOG_ONCE(); + return false; +} + +uint32_t X11ScreenOzone::DispatchEvent(const ui::PlatformEvent& event) { + // TODO(crbug.com/891175): Implement PlatformScreen for X11 + NOTIMPLEMENTED_LOG_ONCE(); + return ui::POST_DISPATCH_NONE; +} + void X11ScreenOzone::AddDisplay(const display::Display& display, bool is_primary) { display_list_.AddDisplay( @@ -91,4 +136,40 @@ display_list_.RemoveDisplay(display.id()); } +// Talks to xrandr to get the information of the outputs for a screen and +// updates display::Display list. The minimum required version of xrandr is +// 1.3. +void X11ScreenOzone::FetchDisplayList() { + float scale = GetDeviceScaleFactor(); + std::vector<display::Display> displays; + // Need at least xrandr version 1.3. + if (xrandr_version_ >= kMinVersionXrandr) { + int error_base_ignored = 0; + XRRQueryExtension(xdisplay_, &xrandr_event_base_, &error_base_ignored); + + if (PlatformEventSource::GetInstance()) + PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this); + XRRSelectInput(xdisplay_, x_root_window_, + RRScreenChangeNotifyMask | RROutputChangeNotifyMask | + RRCrtcChangeNotifyMask); + + displays = BuildDisplaysFromXRandRInfo(xrandr_version_, scale, + &primary_display_index_); + } else { + displays = GetFallbackDisplayList(scale); + } + for (auto& display : displays) + AddDisplay(display, display.id() == primary_display_index_); +} + +gfx::Point X11ScreenOzone::GetCursorLocation() const { + ::Window root, child; + int root_x, root_y, win_x, win_y; + unsigned int mask; + XQueryPointer(xdisplay_, x_root_window_, &root, &child, &root_x, &root_y, + &win_x, &win_y, &mask); + + return gfx::Point(root_x, root_y); +} + } // namespace ui
diff --git a/ui/ozone/platform/x11/x11_screen_ozone.h b/ui/ozone/platform/x11/x11_screen_ozone.h index 5acf82a2..2abe458b 100644 --- a/ui/ozone/platform/x11/x11_screen_ozone.h +++ b/ui/ozone/platform/x11/x11_screen_ozone.h
@@ -11,20 +11,20 @@ #include "base/macros.h" #include "base/observer_list.h" #include "ui/display/display_list.h" -#include "ui/ozone/platform/x11/x11_display_fetcher_ozone.h" -#include "ui/ozone/public/ozone_platform.h" +#include "ui/events/platform/platform_event_dispatcher.h" +#include "ui/gfx/geometry/point.h" +#include "ui/gfx/x/x11_types.h" #include "ui/ozone/public/platform_screen.h" namespace ui { // A PlatformScreen implementation for X11. -class X11ScreenOzone : public PlatformScreen, - public X11DisplayFetcherOzone::Delegate { +class X11ScreenOzone : public PlatformScreen, public PlatformEventDispatcher { public: X11ScreenOzone(); ~X11ScreenOzone() override; - // PlatformScreen implementation. + // PlatformScreen: const std::vector<display::Display>& GetAllDisplays() const override; display::Display GetPrimaryDisplay() const override; display::Display GetDisplayForAcceleratedWidget( @@ -39,16 +39,30 @@ void AddObserver(display::DisplayObserver* observer) override; void RemoveObserver(display::DisplayObserver* observer) override; - // X11DisplayFetcherOzone::Delegate overrides: - void AddDisplay(const display::Display& display, bool is_primary) override; - void RemoveDisplay(const display::Display& display) override; + // PlatformEventDispatcher: + bool CanDispatchEvent(const ui::PlatformEvent& event) override; + uint32_t DispatchEvent(const ui::PlatformEvent& event) override; private: + void AddDisplay(const display::Display& display, bool is_primary); + void RemoveDisplay(const display::Display& display); + void FetchDisplayList(); + gfx::Point GetCursorLocation() const; + display::DisplayList display_list_; base::ObserverList<display::DisplayObserver> observers_; - std::unique_ptr<X11DisplayFetcherOzone> display_fetcher_; + XDisplay* const xdisplay_; + XID x_root_window_; + int64_t primary_display_index_ = 0; + + // XRandR version. MAJOR * 100 + MINOR. Zero if no xrandr is present. + const int xrandr_version_; + + // The base of the event numbers used to represent XRandr events used in + // decoding events regarding output add/remove. + int xrandr_event_base_ = 0; DISALLOW_COPY_AND_ASSIGN(X11ScreenOzone); };
diff --git a/ui/ozone/platform/x11/x11_screen_ozone_unittest.cc b/ui/ozone/platform/x11/x11_screen_ozone_unittest.cc index 250da19..9e40bdb 100644 --- a/ui/ozone/platform/x11/x11_screen_ozone_unittest.cc +++ b/ui/ozone/platform/x11/x11_screen_ozone_unittest.cc
@@ -13,14 +13,12 @@ // This test ensures that PlatformScreen fetches display. TEST(X11ScreenOzoneTest, FetchDisplay) { - constexpr uint32_t kNumberOfDisplays = 1; - - std::unique_ptr<X11ScreenOzone> platform_screen = - std::make_unique<X11ScreenOzone>(); + constexpr uint32_t kMinNumberOfDisplays = 1; + X11ScreenOzone platform_screen; // Ensure there is only one display, which is the primary one. - auto& all_displays = platform_screen->GetAllDisplays(); - EXPECT_EQ(all_displays.size(), kNumberOfDisplays); + auto& all_displays = platform_screen.GetAllDisplays(); + EXPECT_GE(all_displays.size(), kMinNumberOfDisplays); } } // namespace ui
diff --git a/ui/ozone/platform_object_internal.h b/ui/ozone/platform_object_internal.h index c548931c..3c14af1 100644 --- a/ui/ozone/platform_object_internal.h +++ b/ui/ozone/platform_object_internal.h
@@ -7,8 +7,8 @@ #include <memory> +#include "base/component_export.h" #include "base/memory/ptr_util.h" -#include "ui/ozone/ozone_export.h" #include "ui/ozone/platform_constructor_list.h" #include "ui/ozone/platform_object.h" #include "ui/ozone/platform_selection.h"
diff --git a/ui/ozone/platform_selection.h b/ui/ozone/platform_selection.h index 5a1229f..18c6599 100644 --- a/ui/ozone/platform_selection.h +++ b/ui/ozone/platform_selection.h
@@ -5,16 +5,16 @@ #ifndef UI_OZONE_PLATFORM_SELECTION_H_ #define UI_OZONE_PLATFORM_SELECTION_H_ -#include "ui/ozone/ozone_export.h" +#include "base/component_export.h" #include "ui/ozone/platform_list.h" namespace ui { // Get active platform id (by parsing --ozone-platform flag). -OZONE_EXPORT int GetOzonePlatformId(); +COMPONENT_EXPORT(OZONE) int GetOzonePlatformId(); // Get active platform name. -OZONE_EXPORT const char* GetOzonePlatformName(); +COMPONENT_EXPORT(OZONE) const char* GetOzonePlatformName(); } // namespace ui
diff --git a/ui/ozone/public/client_native_pixmap_factory_ozone.h b/ui/ozone/public/client_native_pixmap_factory_ozone.h index a152589..89114190b 100644 --- a/ui/ozone/public/client_native_pixmap_factory_ozone.h +++ b/ui/ozone/public/client_native_pixmap_factory_ozone.h
@@ -7,12 +7,13 @@ #include <memory> +#include "base/component_export.h" #include "ui/gfx/client_native_pixmap_factory.h" -#include "ui/ozone/ozone_export.h" namespace ui { -OZONE_EXPORT std::unique_ptr<gfx::ClientNativePixmapFactory> +COMPONENT_EXPORT(OZONE) +std::unique_ptr<gfx::ClientNativePixmapFactory> CreateClientNativePixmapFactoryOzone(); } // namespace ui
diff --git a/ui/ozone/public/cursor_factory_ozone.h b/ui/ozone/public/cursor_factory_ozone.h index 800595c25..7dc9986 100644 --- a/ui/ozone/public/cursor_factory_ozone.h +++ b/ui/ozone/public/cursor_factory_ozone.h
@@ -7,8 +7,8 @@ #include <vector> +#include "base/component_export.h" #include "ui/gfx/native_widget_types.h" -#include "ui/ozone/ozone_base_export.h" namespace gfx { class Point; @@ -18,7 +18,7 @@ typedef void* PlatformCursor; -class OZONE_BASE_EXPORT CursorFactoryOzone { +class COMPONENT_EXPORT(OZONE_BASE) CursorFactoryOzone { public: CursorFactoryOzone(); virtual ~CursorFactoryOzone();
diff --git a/ui/ozone/public/gl_ozone.h b/ui/ozone/public/gl_ozone.h index ba76bca..64df9c5 100644 --- a/ui/ozone/public/gl_ozone.h +++ b/ui/ozone/public/gl_ozone.h
@@ -7,13 +7,13 @@ #include <string> +#include "base/component_export.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "ui/gfx/geometry/size.h" #include "ui/gfx/native_widget_types.h" #include "ui/gl/gl_implementation.h" #include "ui/gl/gpu_preference.h" -#include "ui/ozone/ozone_base_export.h" namespace gl { class GLContext; @@ -29,7 +29,7 @@ // Interface that has all of the required methods for an Ozone platform to // implement a GL implementation. Functions in gl_factory.h and gl_initializer.h // will delegate to functions in this interface. -class OZONE_BASE_EXPORT GLOzone { +class COMPONENT_EXPORT(OZONE_BASE) GLOzone { public: virtual ~GLOzone() {}
diff --git a/ui/ozone/public/gpu_platform_support_host.h b/ui/ozone/public/gpu_platform_support_host.h index 9694d730..d067e6d 100644 --- a/ui/ozone/public/gpu_platform_support_host.h +++ b/ui/ozone/public/gpu_platform_support_host.h
@@ -7,12 +7,12 @@ #include <string> +#include "base/component_export.h" #include "base/memory/ref_counted.h" #include "base/single_thread_task_runner.h" #include "ipc/ipc_listener.h" #include "ipc/ipc_sender.h" #include "mojo/public/cpp/bindings/binding.h" -#include "ui/ozone/ozone_base_export.h" namespace ui { @@ -25,7 +25,7 @@ // Under X11, we don't need any GPU messages for display configuration. // That's why there's no real functionality here: it's purely mechanism // to support additional messages needed by specific platforms. -class OZONE_BASE_EXPORT GpuPlatformSupportHost { +class COMPONENT_EXPORT(OZONE_BASE) GpuPlatformSupportHost { public: using GpuHostBindInterfaceCallback = base::RepeatingCallback<void(const std::string&, @@ -62,7 +62,8 @@ }; // create a stub implementation. -OZONE_BASE_EXPORT GpuPlatformSupportHost* CreateStubGpuPlatformSupportHost(); +COMPONENT_EXPORT(OZONE_BASE) +GpuPlatformSupportHost* CreateStubGpuPlatformSupportHost(); } // namespace ui
diff --git a/ui/ozone/public/input_controller.h b/ui/ozone/public/input_controller.h index 711ee67..bb896b38 100644 --- a/ui/ozone/public/input_controller.h +++ b/ui/ozone/public/input_controller.h
@@ -11,9 +11,9 @@ #include <vector> #include "base/callback_forward.h" +#include "base/component_export.h" #include "base/files/file_path.h" #include "base/macros.h" -#include "ui/ozone/ozone_base_export.h" #include "ui/ozone/public/interfaces/gesture_properties_service.mojom.h" namespace base { @@ -29,7 +29,7 @@ // The object provides methods for the preference page to configure input // devices w.r.t. the user setting. On ChromeOS, this replaces the inputcontrol // script that is originally located at /opt/google/chrome/. -class OZONE_BASE_EXPORT InputController { +class COMPONENT_EXPORT(OZONE_BASE) InputController { public: using GetTouchDeviceStatusReply = base::OnceCallback<void(const std::string&)>; @@ -97,7 +97,8 @@ }; // Create an input controller that does nothing. -OZONE_BASE_EXPORT std::unique_ptr<InputController> CreateStubInputController(); +COMPONENT_EXPORT(OZONE_BASE) +std::unique_ptr<InputController> CreateStubInputController(); } // namespace ui
diff --git a/ui/ozone/public/overlay_candidates_ozone.h b/ui/ozone/public/overlay_candidates_ozone.h index 8ccc8610..2f8df59e 100644 --- a/ui/ozone/public/overlay_candidates_ozone.h +++ b/ui/ozone/public/overlay_candidates_ozone.h
@@ -7,7 +7,7 @@ #include <vector> -#include "ui/ozone/ozone_base_export.h" +#include "base/component_export.h" #include "ui/ozone/public/overlay_surface_candidate.h" namespace ui { @@ -15,7 +15,7 @@ // This class can be used to answer questions about possible overlay // configurations for a particular output device. We get an instance of this // class from SurfaceFactoryOzone given an AcceleratedWidget. -class OZONE_BASE_EXPORT OverlayCandidatesOzone { +class COMPONENT_EXPORT(OZONE_BASE) OverlayCandidatesOzone { public: using OverlaySurfaceCandidateList = std::vector<OverlaySurfaceCandidate>;
diff --git a/ui/ozone/public/overlay_plane.h b/ui/ozone/public/overlay_plane.h index 9689177..763cd72 100644 --- a/ui/ozone/public/overlay_plane.h +++ b/ui/ozone/public/overlay_plane.h
@@ -7,6 +7,7 @@ #include <memory> +#include "base/component_export.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "ui/gfx/geometry/rect.h" @@ -14,7 +15,6 @@ #include "ui/gfx/gpu_fence.h" #include "ui/gfx/native_pixmap.h" #include "ui/gfx/overlay_transform.h" -#include "ui/ozone/ozone_base_export.h" namespace ui { @@ -23,7 +23,7 @@ // Modern display hardware is capable of transforming and composing multiple // images into a final fullscreen image. An OverlayPlane represents one such // image as well as any transformations that must be applied. -struct OZONE_BASE_EXPORT OverlayPlane { +struct COMPONENT_EXPORT(OZONE_BASE) OverlayPlane { OverlayPlane(); OverlayPlane(scoped_refptr<gfx::NativePixmap> pixmap, std::unique_ptr<gfx::GpuFence> gpu_fence,
diff --git a/ui/ozone/public/overlay_surface.h b/ui/ozone/public/overlay_surface.h index 1e643be..d46c1589 100644 --- a/ui/ozone/public/overlay_surface.h +++ b/ui/ozone/public/overlay_surface.h
@@ -6,6 +6,7 @@ #define UI_OZONE_PUBLIC_OVERLAY_SURFACE_H_ #include "base/callback.h" +#include "base/component_export.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "ui/gfx/geometry/rect.h" @@ -15,7 +16,6 @@ #include "ui/gfx/overlay_transform.h" #include "ui/gfx/presentation_feedback.h" #include "ui/gfx/swap_result.h" -#include "ui/ozone/ozone_base_export.h" namespace ui { @@ -23,7 +23,7 @@ // An overlay surface is similar to a surface, but natively uses overlays and // does not internally allocate any buffers. -class OZONE_BASE_EXPORT OverlaySurface { +class COMPONENT_EXPORT(OZONE_BASE) OverlaySurface { public: OverlaySurface(); virtual ~OverlaySurface();
diff --git a/ui/ozone/public/overlay_surface_candidate.h b/ui/ozone/public/overlay_surface_candidate.h index e988388..9b0824a 100644 --- a/ui/ozone/public/overlay_surface_candidate.h +++ b/ui/ozone/public/overlay_surface_candidate.h
@@ -7,12 +7,12 @@ #include <vector> +#include "base/component_export.h" #include "ui/gfx/buffer_types.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/geometry/size.h" #include "ui/gfx/overlay_transform.h" -#include "ui/ozone/ozone_base_export.h" namespace ui { @@ -23,7 +23,7 @@ OVERLAY_STATUS_LAST = OVERLAY_STATUS_NOT }; -class OZONE_BASE_EXPORT OverlaySurfaceCandidate { +class COMPONENT_EXPORT(OZONE_BASE) OverlaySurfaceCandidate { public: OverlaySurfaceCandidate(); OverlaySurfaceCandidate(const OverlaySurfaceCandidate& other);
diff --git a/ui/ozone/public/ozone_gpu_test_helper.h b/ui/ozone/public/ozone_gpu_test_helper.h index 363a942..aba343f 100644 --- a/ui/ozone/public/ozone_gpu_test_helper.h +++ b/ui/ozone/public/ozone_gpu_test_helper.h
@@ -7,9 +7,9 @@ #include <memory> +#include "base/component_export.h" #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "ui/ozone/ozone_export.h" namespace base { class SingleThreadTaskRunner; @@ -24,7 +24,7 @@ // Helper class for applications that do not have a dedicated GPU channel. // // This sets up message forwarding between the "gpu" and "ui" threads. -class OZONE_EXPORT OzoneGpuTestHelper { +class COMPONENT_EXPORT(OZONE) OzoneGpuTestHelper { public: OzoneGpuTestHelper(); virtual ~OzoneGpuTestHelper();
diff --git a/ui/ozone/public/ozone_platform.h b/ui/ozone/public/ozone_platform.h index 819ef1ec5..67d1357 100644 --- a/ui/ozone/public/ozone_platform.h +++ b/ui/ozone/public/ozone_platform.h
@@ -9,11 +9,11 @@ #include <vector> #include "base/callback.h" +#include "base/component_export.h" #include "base/macros.h" #include "base/message_loop/message_loop.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "ui/gfx/buffer_types.h" -#include "ui/ozone/ozone_export.h" namespace display { class NativeDisplayDelegate; @@ -56,7 +56,7 @@ // interface depending on the context. You can, for example, create // different objects depending on the underlying hardware, command // line flags, or whatever is appropriate for the platform. -class OZONE_EXPORT OzonePlatform { +class COMPONENT_EXPORT(OZONE) OzonePlatform { public: OzonePlatform(); virtual ~OzonePlatform();
diff --git a/ui/ozone/public/ozone_switches.h b/ui/ozone/public/ozone_switches.h index 24d30c1..32f929d 100644 --- a/ui/ozone/public/ozone_switches.h +++ b/ui/ozone/public/ozone_switches.h
@@ -6,17 +6,17 @@ #define UI_OZONE_PUBLIC_OZONE_SWITCHES_H_ #include "base/compiler_specific.h" -#include "ui/ozone/ozone_base_export.h" +#include "base/component_export.h" namespace switches { -OZONE_BASE_EXPORT extern const char kOzonePlatform[]; +COMPONENT_EXPORT(OZONE_BASE) extern const char kOzonePlatform[]; -OZONE_BASE_EXPORT extern const char kOzoneDumpFile[]; +COMPONENT_EXPORT(OZONE_BASE) extern const char kOzoneDumpFile[]; -OZONE_BASE_EXPORT extern const char kEnableWaylandIme[]; +COMPONENT_EXPORT(OZONE_BASE) extern const char kEnableWaylandIme[]; -OZONE_BASE_EXPORT extern const char kDisableExplicitDmaFences[]; +COMPONENT_EXPORT(OZONE_BASE) extern const char kDisableExplicitDmaFences[]; } // namespace switches
diff --git a/ui/ozone/public/platform_clipboard.h b/ui/ozone/public/platform_clipboard.h index 99c9502..377ba00 100644 --- a/ui/ozone/public/platform_clipboard.h +++ b/ui/ozone/public/platform_clipboard.h
@@ -9,9 +9,9 @@ #include <unordered_map> #include <vector> +#include "base/component_export.h" #include "base/macros.h" #include "base/optional.h" -#include "ui/ozone/ozone_base_export.h" namespace ui { @@ -19,7 +19,7 @@ // data with other applications on the host system. The most familiar use for // it is handling copy and paste operations. // -class OZONE_BASE_EXPORT PlatformClipboard { +class COMPONENT_EXPORT(OZONE_BASE) PlatformClipboard { public: virtual ~PlatformClipboard() {}
diff --git a/ui/ozone/public/platform_window_surface.h b/ui/ozone/public/platform_window_surface.h index 73eeda02..f804dd1f 100644 --- a/ui/ozone/public/platform_window_surface.h +++ b/ui/ozone/public/platform_window_surface.h
@@ -5,7 +5,7 @@ #ifndef UI_OZONE_PUBLIC_PLATFORM_WINDOW_SURFACE_H_ #define UI_OZONE_PUBLIC_PLATFORM_WINDOW_SURFACE_H_ -#include "ui/ozone/ozone_base_export.h" +#include "base/component_export.h" namespace ui { @@ -24,7 +24,7 @@ // TODO(spang): If we go this way, we should be consistent. You should have to // have a PlatformWindowSurface before building a GLSurface or software surface // as well. -class OZONE_BASE_EXPORT PlatformWindowSurface { +class COMPONENT_EXPORT(OZONE_BASE) PlatformWindowSurface { public: virtual ~PlatformWindowSurface() {}
diff --git a/ui/ozone/public/surface_factory_ozone.h b/ui/ozone/public/surface_factory_ozone.h index 7512ad7..229ff0f4 100644 --- a/ui/ozone/public/surface_factory_ozone.h +++ b/ui/ozone/public/surface_factory_ozone.h
@@ -10,6 +10,7 @@ #include <vector> #include "base/callback.h" +#include "base/component_export.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/native_library.h" @@ -20,7 +21,6 @@ #include "ui/gfx/native_widget_types.h" #include "ui/gfx/overlay_transform.h" #include "ui/gl/gl_implementation.h" -#include "ui/ozone/ozone_base_export.h" #include "ui/ozone/public/gl_ozone.h" #if BUILDFLAG(ENABLE_VULKAN) @@ -65,7 +65,7 @@ // // The remaining functions are not covered since they are needed in both drawing // modes (See comments below for descriptions). -class OZONE_BASE_EXPORT SurfaceFactoryOzone { +class COMPONENT_EXPORT(OZONE_BASE) SurfaceFactoryOzone { public: // Returns a list of allowed GL implementations. The default implementation // will be the first item.
diff --git a/ui/ozone/public/surface_ozone_canvas.h b/ui/ozone/public/surface_ozone_canvas.h index 05577a9..ad6d8af 100644 --- a/ui/ozone/public/surface_ozone_canvas.h +++ b/ui/ozone/public/surface_ozone_canvas.h
@@ -7,8 +7,8 @@ #include <memory> +#include "base/component_export.h" #include "third_party/skia/include/core/SkRefCnt.h" -#include "ui/ozone/ozone_base_export.h" class SkSurface; @@ -24,7 +24,7 @@ // for use when no EGL/GLES2 acceleration is possible. // This class owns any bits that the ozone implementation needs freed when // the software output is destroyed. -class OZONE_BASE_EXPORT SurfaceOzoneCanvas { +class COMPONENT_EXPORT(OZONE_BASE) SurfaceOzoneCanvas { public: virtual ~SurfaceOzoneCanvas() {}
diff --git a/ui/views/accessibility/ax_tree_source_views.cc b/ui/views/accessibility/ax_tree_source_views.cc index a7512e2..1cb8e7cf 100644 --- a/ui/views/accessibility/ax_tree_source_views.cc +++ b/ui/views/accessibility/ax_tree_source_views.cc
@@ -99,10 +99,6 @@ return parent; } -bool AXTreeSourceViews::IsIgnored(AXAuraObjWrapper* node) const { - return node && node->IsIgnored(); -} - bool AXTreeSourceViews::IsValid(AXAuraObjWrapper* node) const { return node && !node->IsIgnored(); }
diff --git a/ui/views/accessibility/ax_tree_source_views.h b/ui/views/accessibility/ax_tree_source_views.h index d7256c6d..12d1f3b5 100644 --- a/ui/views/accessibility/ax_tree_source_views.h +++ b/ui/views/accessibility/ax_tree_source_views.h
@@ -46,7 +46,6 @@ void GetChildren(AXAuraObjWrapper* node, std::vector<AXAuraObjWrapper*>* out_children) const override; AXAuraObjWrapper* GetParent(AXAuraObjWrapper* node) const override; - bool IsIgnored(AXAuraObjWrapper* node) const override; bool IsValid(AXAuraObjWrapper* node) const override; bool IsEqual(AXAuraObjWrapper* node1, AXAuraObjWrapper* node2) const override; AXAuraObjWrapper* GetNull() const override;
diff --git a/ui/views/color_chooser/color_chooser_view.cc b/ui/views/color_chooser/color_chooser_view.cc index 1a4bb49..f59734e 100644 --- a/ui/views/color_chooser/color_chooser_view.cc +++ b/ui/views/color_chooser/color_chooser_view.cc
@@ -381,8 +381,8 @@ AddChildView(std::move(container)); auto container2 = std::make_unique<View>(); - GridLayout* layout = container2->SetLayoutManager( - std::make_unique<views::GridLayout>(container2.get())); + GridLayout* layout = + container2->SetLayoutManager(std::make_unique<views::GridLayout>()); ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn( GridLayout::LEADING, GridLayout::FILL, 0, GridLayout::USE_PREF, 0, 0);
diff --git a/ui/views/controls/message_box_view.cc b/ui/views/controls/message_box_view.cc index 20217e8..94173b3c 100644 --- a/ui/views/controls/message_box_view.cc +++ b/ui/views/controls/message_box_view.cc
@@ -232,8 +232,7 @@ void MessageBoxView::ResetLayoutManager() { // Initialize the Grid Layout Manager used for this dialog box. - GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + GridLayout* layout = SetLayoutManager(std::make_unique<views::GridLayout>()); // Add the column set for the message displayed at the top of the dialog box. constexpr int kMessageViewColumnSetId = 0;
diff --git a/ui/views/examples/button_sticker_sheet.cc b/ui/views/examples/button_sticker_sheet.cc index b264debb..38681f7a 100644 --- a/ui/views/examples/button_sticker_sheet.cc +++ b/ui/views/examples/button_sticker_sheet.cc
@@ -35,7 +35,7 @@ const int kColumnWidth = 96; GridLayout* layout = - host->SetLayoutManager(std::make_unique<views::GridLayout>(host)); + host->SetLayoutManager(std::make_unique<views::GridLayout>()); ColumnSet* columns = layout->AddColumnSet(kStretchyGridColumnSetId); for (int i = 0; i < ncols; ++i) { if (i != 0)
diff --git a/ui/views/examples/dialog_example.cc b/ui/views/examples/dialog_example.cc index 6c1797f9..21e9ab7 100644 --- a/ui/views/examples/dialog_example.cc +++ b/ui/views/examples/dialog_example.cc
@@ -133,8 +133,8 @@ views::LayoutProvider* provider = views::LayoutProvider::Get(); const int horizontal_spacing = provider->GetDistanceMetric(views::DISTANCE_RELATED_BUTTON_HORIZONTAL); - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); ColumnSet* column_set = layout->AddColumnSet(kFieldsColumnId); column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, kFixed, GridLayout::USE_PREF, 0, 0);
diff --git a/ui/views/examples/examples_window.cc b/ui/views/examples/examples_window.cc index 1ae43c9..2de2b72 100644 --- a/ui/views/examples/examples_window.cc +++ b/ui/views/examples/examples_window.cc
@@ -154,7 +154,7 @@ SetBackground(CreateThemedSolidBackground( this, ui::NativeTheme::kColorId_DialogBackground)); GridLayout* layout = - SetLayoutManager(std::make_unique<views::GridLayout>(this)); + SetLayoutManager(std::make_unique<views::GridLayout>()); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddPaddingColumn(0, 5); column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
diff --git a/ui/views/examples/label_example.cc b/ui/views/examples/label_example.cc index 289ed46e..530ba13c 100644 --- a/ui/views/examples/label_example.cc +++ b/ui/views/examples/label_example.cc
@@ -160,7 +160,7 @@ control_container->SetBorder(CreateSolidBorder(2, SK_ColorGRAY)); control_container->SetBackground(CreateSolidBackground(SK_ColorLTGRAY)); GridLayout* layout = control_container->SetLayoutManager( - std::make_unique<views::GridLayout>(control_container.get())); + std::make_unique<views::GridLayout>()); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL,
diff --git a/ui/views/examples/message_box_example.cc b/ui/views/examples/message_box_example.cc index b21e9e1..67ff6dc 100644 --- a/ui/views/examples/message_box_example.cc +++ b/ui/views/examples/message_box_example.cc
@@ -24,8 +24,8 @@ MessageBoxExample::~MessageBoxExample() = default; void MessageBoxExample::CreateExampleView(View* container) { - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); auto message_box_view = std::make_unique<MessageBoxView>( MessageBoxView::InitParams(ASCIIToUTF16("Hello, world!")));
diff --git a/ui/views/examples/multiline_example.cc b/ui/views/examples/multiline_example.cc index a990d89..9a48182 100644 --- a/ui/views/examples/multiline_example.cc +++ b/ui/views/examples/multiline_example.cc
@@ -152,8 +152,8 @@ textfield->set_controller(this); textfield->SetText(kTestString); - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
diff --git a/ui/views/examples/native_theme_example.cc b/ui/views/examples/native_theme_example.cc index 80387bd..7818147 100644 --- a/ui/views/examples/native_theme_example.cc +++ b/ui/views/examples/native_theme_example.cc
@@ -64,8 +64,7 @@ // of ui::NativeTheme::ColorId and the second contains the color. std::unique_ptr<View> CreateAllColorsView() { auto container = std::make_unique<View>(); - auto* layout = container->SetLayoutManager( - std::make_unique<GridLayout>(container.get())); + auto* layout = container->SetLayoutManager(std::make_unique<GridLayout>()); auto* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1.0, GridLayout::USE_PREF, 0, 0);
diff --git a/ui/views/examples/progress_bar_example.cc b/ui/views/examples/progress_bar_example.cc index e932f4fa..4a103933 100644 --- a/ui/views/examples/progress_bar_example.cc +++ b/ui/views/examples/progress_bar_example.cc
@@ -30,8 +30,8 @@ ProgressBarExample::~ProgressBarExample() = default; void ProgressBarExample::CreateExampleView(View* container) { - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
diff --git a/ui/views/examples/radio_button_example.cc b/ui/views/examples/radio_button_example.cc index d6d9f0a23..0bbcc618 100644 --- a/ui/views/examples/radio_button_example.cc +++ b/ui/views/examples/radio_button_example.cc
@@ -30,8 +30,8 @@ RadioButtonExample::~RadioButtonExample() = default; void RadioButtonExample::CreateExampleView(View* container) { - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1.0f, GridLayout::USE_PREF, 0, 0);
diff --git a/ui/views/examples/scroll_view_example.cc b/ui/views/examples/scroll_view_example.cc index 567d4960..543f34d 100644 --- a/ui/views/examples/scroll_view_example.cc +++ b/ui/views/examples/scroll_view_example.cc
@@ -80,8 +80,8 @@ scrollable_->SetBounds(0, 0, 1000, 100); scrollable_->SetColor(SK_ColorYELLOW, SK_ColorCYAN); - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); // Add scroll view. ColumnSet* column_set = layout->AddColumnSet(0);
diff --git a/ui/views/examples/tabbed_pane_example.cc b/ui/views/examples/tabbed_pane_example.cc index 4003b26..f20d362b 100644 --- a/ui/views/examples/tabbed_pane_example.cc +++ b/ui/views/examples/tabbed_pane_example.cc
@@ -27,8 +27,8 @@ auto select_at = std::make_unique<LabelButton>(this, ASCIIToUTF16("Select At 1")); - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); const int tabbed_pane_column = 0; ColumnSet* column_set = layout->AddColumnSet(tabbed_pane_column);
diff --git a/ui/views/examples/table_example.cc b/ui/views/examples/table_example.cc index c0636e3..8b60316 100644 --- a/ui/views/examples/table_example.cc +++ b/ui/views/examples/table_example.cc
@@ -41,8 +41,8 @@ } void TableExample::CreateExampleView(View* container) { - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); std::vector<ui::TableColumn> columns; columns.push_back(TestTableColumn(0, "Fruit"));
diff --git a/ui/views/examples/text_example.cc b/ui/views/examples/text_example.cc index 24c9986..4b3ed12 100644 --- a/ui/views/examples/text_example.cc +++ b/ui/views/examples/text_example.cc
@@ -150,8 +150,8 @@ void TextExample::CreateExampleView(View* container) { auto text_view = std::make_unique<TextExampleView>(); text_view->SetBorder(CreateSolidBorder(1, SK_ColorGRAY)); - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); layout->AddPaddingRow(0, 8); ColumnSet* column_set = layout->AddColumnSet(0);
diff --git a/ui/views/examples/textfield_example.cc b/ui/views/examples/textfield_example.cc index 7a7a9d50..6c217df 100644 --- a/ui/views/examples/textfield_example.cc +++ b/ui/views/examples/textfield_example.cc
@@ -59,8 +59,8 @@ auto rtl = std::make_unique<Textfield>(); rtl->ChangeTextDirectionAndLayoutAlignment(base::i18n::RIGHT_TO_LEFT); - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL,
diff --git a/ui/views/examples/tree_view_example.cc b/ui/views/examples/tree_view_example.cc index f652d46..7496472d 100644 --- a/ui/views/examples/tree_view_example.cc +++ b/ui/views/examples/tree_view_example.cc
@@ -84,8 +84,8 @@ change_title->SetFocusForPlatform(); change_title->set_request_focus_on_press(true); - GridLayout* layout = container->SetLayoutManager( - std::make_unique<views::GridLayout>(container)); + GridLayout* layout = + container->SetLayoutManager(std::make_unique<views::GridLayout>()); const int tree_view_column = 0; ColumnSet* column_set = layout->AddColumnSet(tree_view_column);
diff --git a/ui/views/layout/grid_layout.cc b/ui/views/layout/grid_layout.cc index 5859715..3bbb5f25 100644 --- a/ui/views/layout/grid_layout.cc +++ b/ui/views/layout/grid_layout.cc
@@ -772,9 +772,7 @@ // GridLayout ------------------------------------------------------------- -GridLayout::GridLayout(View* host) : host_(host) { - DCHECK(host); -} +GridLayout::GridLayout() = default; GridLayout::~GridLayout() = default; @@ -819,6 +817,7 @@ } void GridLayout::AddView(View* view, int col_span, int row_span) { + DCHECK(host_); DCHECK(current_row_col_set_ && next_column_ < current_row_col_set_->num_columns()); Column* column = current_row_col_set_->columns_[next_column_].get(); @@ -873,7 +872,7 @@ } void GridLayout::Installed(View* host) { - DCHECK(host_ == host); + host_ = host; } void GridLayout::ViewAdded(View* host, View* view) {
diff --git a/ui/views/layout/grid_layout.h b/ui/views/layout/grid_layout.h index 791dbcb..2b783f8 100644 --- a/ui/views/layout/grid_layout.h +++ b/ui/views/layout/grid_layout.h
@@ -111,7 +111,7 @@ USE_PREF }; - explicit GridLayout(View* host); + GridLayout(); ~GridLayout() override; // See class description for what this does. @@ -259,8 +259,8 @@ // Returns the column set of the last non-padding row. ColumnSet* GetLastValidColumnSet(); - // The view we were created with. We don't own this. - View* const host_; + // The View this is installed on. + View* host_ = nullptr; // Whether or not we've calculated the master/linked columns. mutable bool calculated_master_columns_ = false;
diff --git a/ui/views/layout/grid_layout_unittest.cc b/ui/views/layout/grid_layout_unittest.cc index ad1d50a..8b4dc47 100644 --- a/ui/views/layout/grid_layout_unittest.cc +++ b/ui/views/layout/grid_layout_unittest.cc
@@ -104,8 +104,7 @@ class GridLayoutTest : public testing::Test { public: GridLayoutTest() : host_(std::make_unique<View>()) { - layout_ = host_->SetLayoutManager( - std::make_unique<views::GridLayout>(host_.get())); + layout_ = host_->SetLayoutManager(std::make_unique<views::GridLayout>()); } gfx::Size GetPreferredSize() { @@ -123,8 +122,7 @@ class GridLayoutAlignmentTest : public testing::Test { public: GridLayoutAlignmentTest() : host_(std::make_unique<View>()) { - layout_ = host_->SetLayoutManager( - std::make_unique<views::GridLayout>(host_.get())); + layout_ = host_->SetLayoutManager(std::make_unique<views::GridLayout>()); } void TestAlignment(GridLayout::Alignment alignment, gfx::Rect* bounds) {
diff --git a/ui/views/window/dialog_client_view.cc b/ui/views/window/dialog_client_view.cc index f78181dc..3bcb2e1 100644 --- a/ui/views/window/dialog_client_view.cc +++ b/ui/views/window/dialog_client_view.cc
@@ -347,7 +347,7 @@ // Clobber any existing LayoutManager since it has weak references to child // Views which may be removed by SetupViews(). GridLayout* layout = button_row_container_->SetLayoutManager( - std::make_unique<views::GridLayout>(button_row_container_)); + std::make_unique<views::GridLayout>()); layout->set_minimum_size(minimum_size_); SetupViews();