diff --git a/DEPS b/DEPS index 2217879..6c944fd 100644 --- a/DEPS +++ b/DEPS
@@ -245,15 +245,15 @@ # 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': '98d664096d4035fc8936788b100167de68cab8fd', + 'skia_revision': '35e34d8db246398830566d83ea4140efec214dac', # 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': '2d9015d3fccc08c1cd448d21ebbcef10bd91f239', + 'v8_revision': '4c66f05b3ee29bdc65cbd3e4e60209af8b1d0fbc', # 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': '693b48a077b8158375e16dd0dc5a194ddf7bb7d1', + 'angle_revision': 'd6fb76a68b6e1e90fc9f87c69997f8abb32e72fa', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -360,7 +360,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': '0cb5c0edeb808525487e4dbba6003e110171dd29', + 'dawn_revision': '7d37677a031adb4578b5df1d1cc7eefda6140647', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -768,7 +768,7 @@ 'packages': [ { 'package': 'chromium/rts/model/linux-amd64', - 'version': 'Vdvls5CUFjFJJ9RIhmiEPyCCGllMIFjKSd_Dq-iPIF8C', + 'version': 'e7DhxyFjXyNAU9I9YpHHj8rvAIPPoKQX4OPLna6aepEC', }, ], 'dep_type': 'cipd', @@ -779,7 +779,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'H7G30oLdFUX179nmm_MjwG3MsJbqjXSTgAcFmY1hDHEC', + 'version': 'dXXn-xiY_r8w06KhMCRC-G6jEXqoXCOoQTVekmpvktcC', }, ], 'dep_type': 'cipd', @@ -790,7 +790,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': 'UAtJcGvAQlwiebAuubcSLXxgKNxba-wv0e3s18hcPkYC', + 'version': '-G2ZT1ZDQNgr6v9Pa8l1aitRv0pF7UyF9f9ebCgM74sC', }, ], 'dep_type': 'cipd', @@ -1070,7 +1070,7 @@ # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'f0d96456666b72c49a4827a5315ffdc21d96d90c', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '4feb237ba806ed22f4ef5005f6239e9cda81af91', 'condition': 'checkout_chromeos', }, @@ -1473,7 +1473,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '00b152a26effb7ba2ec1f2d1fdace9116ea470e4', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '9839aeef62f039aa5f9a1c310b6f6000405a75e7', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1551,7 +1551,7 @@ 'packages': [ { 'package': 'fuchsia/third_party/android/aemu/release/linux-amd64', - 'version': 'yIMUaCNVYPAFt-BZcSfLNL1mge8HK-ZfTF2vI73JNhUC' + 'version': 'HiJFcVfsBoDHop93JYsTF-6MLX5YMqQgll1W2d4X1qAC' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -1694,7 +1694,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '89f20c5e69574ffbede2d89e18b4dba71bf9c1f2', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'fe968dff86b2f2f976719f6cda76d99eb6b20cc0', + Var('webrtc_git') + '/src.git' + '@' + 'e39a16fa7c54ad7a4b57e061bdcdf971d95beeed', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1764,7 +1764,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@af3972fda9af5d5c0d90ad2eeec681fb96d94949', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@a35039134b0af54e43a4ecb5309823754cd5d744', 'condition': 'checkout_src_internal', }, @@ -1794,7 +1794,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'g7q_uwTN8BqJVJvD6qEdTnK61QGpAYsB5oWQTQlqrXgC', + 'version': 'gJW6tIL9SW_1-nn_sr42UO3pIMD6OnMu5IENV6awhBAC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1805,7 +1805,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': '8quErftXrS2mkjFDsOspAn06yTIupAAMuiIGkpR4SEAC', + 'version': 'PnyQe46huXU2OEzmVFbJrgcEf1GeKdPAZhhcyDBQ3_AC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/tools/system_webview_shell/layout_tests/src/org/chromium/webview_shell/test/WebViewLayoutTest.java b/android_webview/tools/system_webview_shell/layout_tests/src/org/chromium/webview_shell/test/WebViewLayoutTest.java index 5673fc2..d99a123 100644 --- a/android_webview/tools/system_webview_shell/layout_tests/src/org/chromium/webview_shell/test/WebViewLayoutTest.java +++ b/android_webview/tools/system_webview_shell/layout_tests/src/org/chromium/webview_shell/test/WebViewLayoutTest.java
@@ -146,6 +146,7 @@ } } + @DisabledTest(message = "https://crbug.com/1293089") @Test @MediumTest public void testWebViewExcludedInterfaces() throws Exception {
diff --git a/ash/app_list/views/app_list_view_unittest.cc b/ash/app_list/views/app_list_view_unittest.cc index d6d6e802..8308b09 100644 --- a/ash/app_list/views/app_list_view_unittest.cc +++ b/ash/app_list/views/app_list_view_unittest.cc
@@ -108,10 +108,39 @@ // The maximum allowed margin between items in apps item grid. constexpr int kMaxItemMargin = 96; +// The min margins for contents within the fullscreen productivity launcher. +constexpr int kMinProductivityLauncherMargin = 24; + +// The min horizontal margin for apps grid in fullscreen productivity launcher. +// In addition to min productivity launcher margin, reserves 32 dip for page +// switcher UI. +constexpr int kMinProductivityLauncherGridHorizontalMargin = + kMinProductivityLauncherMargin + 32; + +int GetExpectedProductivityLauncherAppsContainerHeight(int row_count, + int tile_height, + int tile_margins) { + return row_count * tile_height + (row_count - 1) * tile_margins + + 2 * kMinProductivityLauncherMargin + kGridVerticalMargin + + kGridVerticalInset + 48 /*search box height*/ + 56 /*shelf size*/; +} + SearchModel* GetSearchModel() { return AppListModelProvider::Get()->search_model(); } +void AddRecentApps(int num_apps) { + for (int i = 0; i < num_apps; i++) { + auto result = std::make_unique<TestSearchResult>(); + // Use the same "Item #" convention as AppListTestModel uses. The search + // result IDs must match app item IDs in the app list data model. + result->set_result_id(test::AppListTestModel::GetItemName(i)); + result->set_result_type(AppListSearchResultType::kInstalledApp); + result->set_display_type(SearchResultDisplayType::kRecentApps); + GetSearchModel()->results()->Add(std::move(result)); + } +} + int GridItemSizeWithMargins(int grid_size, int item_size, int item_count) { int margin = (grid_size - item_size * item_count) / (2 * (item_count - 1)); return item_size + 2 * margin; @@ -312,6 +341,10 @@ return contents_view()->apps_container_view()->page_switcher(); } + RecentAppsView* recent_apps() { + return contents_view()->apps_container_view()->GetRecentApps(); + } + views::View* assistant_page_view() { const int assistant_page_index = contents_view()->GetPageIndexForState( ash::AppListState::kStateEmbeddedAssistant); @@ -332,6 +365,131 @@ return delegate_->show_wallpaper_context_menu_count(); } + void VerifyAppsContainerLayoutForProductivityLauncher( + const gfx::Size& container_size, + int row_count, + int expected_horizontal_margin, + const gfx::Size& expected_item_size, + bool has_recent_apps) { + const int column_count = 5; + ASSERT_EQ(column_count, apps_grid_view()->cols()); + ASSERT_EQ(row_count, apps_grid_view()->GetFirstPageRowsForTesting()); + + const int expected_vertical_margin = kMinProductivityLauncherMargin; + + const int expected_grid_width = + container_size.width() - 2 * expected_horizontal_margin; + + // Verify scrollable container bounds. + const int expected_scrollable_container_top = expected_vertical_margin + + 48 /*search box height*/ + + kGridVerticalMargin; + const int expected_scrollable_container_height = + container_size.height() - expected_scrollable_container_top - + expected_vertical_margin - ShelfSize(); + EXPECT_EQ( + gfx::Rect(expected_horizontal_margin, expected_scrollable_container_top, + expected_grid_width, expected_scrollable_container_height), + scrollable_container()->bounds()); + + // Verify apps grid bounds. + gfx::Point grid_origin_in_scrollable_container; + views::View::ConvertPointToTarget(apps_grid_view(), scrollable_container(), + &grid_origin_in_scrollable_container); + EXPECT_EQ(gfx::Point(0, kGridVerticalInset), + grid_origin_in_scrollable_container); + + const int expected_grid_height = + expected_scrollable_container_height - kGridVerticalInset; + EXPECT_EQ(gfx::Size(expected_grid_width, expected_grid_height), + apps_grid_view()->size()); + + // Verify page switcher bounds. + EXPECT_EQ(gfx::Rect(expected_grid_width + expected_horizontal_margin + + kPageSwitcherSpacing, + expected_scrollable_container_top, + 2 * PageSwitcher::kMaxButtonRadiusForRootGrid, + expected_grid_height), + page_switcher_view()->bounds()); + + // Verify recent apps view visibility and bounds (when visible). + EXPECT_EQ(has_recent_apps, recent_apps()->GetVisible()); + if (has_recent_apps) { + gfx::Point origin_in_scrollable_container; + views::View::ConvertPointToTarget(recent_apps(), scrollable_container(), + &origin_in_scrollable_container); + EXPECT_EQ(gfx::Point(0, kGridVerticalInset), + origin_in_scrollable_container); + EXPECT_EQ(expected_grid_width, recent_apps()->width()); + EXPECT_EQ(expected_item_size.height(), recent_apps()->height()); + } + + // Horizontal offset between app list item views, which includes tile width + // and horizontal margin. + const int horizontal_item_offset = GridItemSizeWithMargins( + expected_grid_width, expected_item_size.width(), column_count); + EXPECT_LE(horizontal_item_offset - expected_item_size.width(), 128); + + // Calculate space reserved for separator, which is only shown if suggested + // content (e.g. recent apps) exists. + int separator_size = 0; + if (has_recent_apps) { + const int separator_margin = expected_item_size.height() > 88 ? 16 : 8; + separator_size = 2 * separator_margin + 1 /*actual separator height*/; + } + + // Vertical offset between app list item views, which includes tile height + // and vertical margin. + const int vertical_item_offset = GridItemSizeWithMargins( + expected_grid_height - separator_size, expected_item_size.height(), + row_count + (has_recent_apps ? 1 : 0)); + EXPECT_GE(vertical_item_offset - expected_item_size.height(), 8); + EXPECT_LE(vertical_item_offset - expected_item_size.height(), 96); + + // If recent apps are shown, the items on the first page are offset by the + // recent apps container height, a separator and vertical margin between + // tiles. + const int base_vertical_offset = + has_recent_apps ? vertical_item_offset + separator_size : 0; + + // Verify expected bounds for the first row: + for (int i = 0; i < column_count; ++i) { + EXPECT_EQ(gfx::Rect(gfx::Point(i * horizontal_item_offset, + base_vertical_offset), + expected_item_size), + test_api_->GetItemTileRectAtVisualIndex(0, i)) + << "Item " << i << " bounds"; + } + + // Verify expected bounds for the first column: + for (int j = 1; j < row_count; ++j) { + EXPECT_EQ(gfx::Rect(gfx::Point(0, base_vertical_offset + + j * vertical_item_offset), + expected_item_size), + test_api_->GetItemTileRectAtVisualIndex(0, j * column_count)) + << "Item " << j * column_count << " bounds"; + } + + // The last item in the page (bottom right): + EXPECT_EQ(gfx::Rect(gfx::Point((column_count - 1) * horizontal_item_offset, + base_vertical_offset + + (row_count - 1) * vertical_item_offset), + expected_item_size), + test_api_->GetItemTileRectAtVisualIndex( + 0, row_count * column_count - 1)); + + // Verify that search box top is at the expected apps container vertical + // margin, both in apps, and search results state. + std::vector<ash::AppListState> available_app_list_states = { + ash::AppListState::kStateApps, ash::AppListState::kStateSearchResults}; + for (auto app_list_state : available_app_list_states) { + const gfx::Rect search_box_bounds = + contents_view()->GetSearchBoxBounds(app_list_state); + EXPECT_EQ(expected_vertical_margin, search_box_bounds.y()) + << "App list state: " << static_cast<int>(app_list_state); + } + } + // Verifies fullscreen apps container bounds and layout. void VerifyAppsContainerLayout(const gfx::Size& container_size, int column_count, @@ -456,9 +614,17 @@ // Tests app list view layout for different screen sizes. class AppListViewScalableLayoutTest : public AppListViewTest { public: - AppListViewScalableLayoutTest() { - scoped_feature_list_.InitAndEnableFeature( - ash::features::kEnableBackgroundBlur); + explicit AppListViewScalableLayoutTest(bool enable_productivity_launcher) { + if (enable_productivity_launcher) { + scoped_feature_list_.InitWithFeatures( + {ash::features::kEnableBackgroundBlur, + ash::features::kProductivityLauncher}, + {}); + } else { + scoped_feature_list_.InitWithFeatures( + {ash::features::kEnableBackgroundBlur}, + {ash::features::kProductivityLauncher}); + } } ~AppListViewScalableLayoutTest() override = default; @@ -473,10 +639,30 @@ AppListConfigProvider::Get().ResetForTesting(); } - private: + protected: base::test::ScopedFeatureList scoped_feature_list_; }; +class ProductivityLauncherAppListViewLayoutTest + : public AppListViewScalableLayoutTest { + public: + ProductivityLauncherAppListViewLayoutTest() + : AppListViewScalableLayoutTest(/*enable_productivity_launcher=*/true) {} + + void InitializeAppList() { + Initialize(true /*is_tablet_mode*/); + delegate_->GetTestModel()->PopulateApps(kInitialItems); + Show(); + } +}; + +class LegacyLauncherAppListViewLayoutTest + : public AppListViewScalableLayoutTest { + public: + LegacyLauncherAppListViewLayoutTest() + : AppListViewScalableLayoutTest(/*enable_productivity_launcher=*/false) {} +}; + // Tests of focus, optionally parameterized by RTL. class AppListViewFocusTest : public views::ViewsTestBase, public testing::WithParamInterface<bool> { @@ -2941,9 +3127,779 @@ EXPECT_EQ(0.0f, contents_view()->expand_arrow_view()->layer()->opacity()); } +TEST_F(ProductivityLauncherAppListViewLayoutTest, RegularLandscapeScreen) { + const gfx::Size window_size = gfx::Size(1000, 800); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(96, 120); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 3 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + RegularLandscapeScreenAtMinPreferredVerticalMargin) { + const int window_height = GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/4, /*tile_size=*/120, /*tile_margin=*/8); + EXPECT_EQ(680, window_height); + const gfx::Size window_size = gfx::Size(800, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(96, 120); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 2 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + RegularLandscapeScreenWithRemovedRows) { + const int window_height = + GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/4, /*tile_size=*/120, /*tile_margin=*/8) - + 4; + EXPECT_EQ(676, window_height); + const gfx::Size window_size = gfx::Size(800, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(96, 120); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(3, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 3 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(3, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 2 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + RegularLandscapeScreenAtMaxPreferredVerticalMargin) { + const int window_height = GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/4, /*tile_size=*/120, /*tile_margin=*/96); + EXPECT_EQ(944, window_height); + const gfx::Size window_size = gfx::Size(1000, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(96, 120); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 3 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + RegularLandscapeScreenWithAddedRows) { + const int window_height = + GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/4, /*tile_size=*/120, /*tile_margin=*/96) + + 6; + EXPECT_EQ(950, window_height); + const gfx::Size window_size = gfx::Size(1000, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(96, 120); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/5, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 3 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, RegularPortraitScreen) { + const gfx::Size window_size = gfx::Size(800, 1000); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(96, 120); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/5, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + RegularPortraitScreenAtMinPreferredVerticalMargin) { + const int window_height = GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/5, /*tile_size=*/120, /*tile_margin=*/8); + EXPECT_EQ(808, window_height); + const gfx::Size window_size = gfx::Size(700, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(96, 120); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/5, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 3 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + RegularPortraitScreenWithRemovedRows) { + const int window_height = + GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/5, /*tile_size=*/120, /*tile_margin=*/8) - + 8; + EXPECT_EQ(800, window_height); + const gfx::Size window_size = gfx::Size(700, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(96, 120); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 3 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + RegularPortraitScreenAtMaxPreferredVerticalMargin) { + const int window_height = GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/5, /*tile_size=*/120, /*tile_margin=*/96); + EXPECT_EQ(1160, window_height); + const gfx::Size window_size = gfx::Size(1200, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = 104; + const gfx::Size expected_item_size(96, 120); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/5, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + RegularPortraitScreenWithExtraRows) { + const int window_height = + GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/5, /*tile_size=*/120, /*tile_margin=*/96) + + 4; + EXPECT_EQ(1164, window_height); + const gfx::Size window_size = gfx::Size(1200, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = 104; + const gfx::Size expected_item_size(96, 120); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(6, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/6, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(6, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, DenseLandscapeScreen) { + const gfx::Size window_size = gfx::Size(800, 600); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 3 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + DenseLandscapeScreenAtMinPreferredVerticalMargin) { + const int window_height = GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/4, /*tile_size=*/88, /*tile_margin=*/8); + EXPECT_EQ(552, window_height); + const gfx::Size window_size = gfx::Size(800, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 2 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + DenseLandscapeScreenWithRemovedRows) { + const int window_height = + GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/4, /*tile_size=*/88, /*tile_margin=*/8) - + 4; + EXPECT_EQ(548, window_height); + const gfx::Size window_size = gfx::Size(800, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(3, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 3 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(3, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 2 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, DensePortraitScreen) { + const gfx::Size window_size = gfx::Size(600, 800); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/5, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + DensePortraitScreenAtMinPreferredVerticalMargin) { + const int window_height = GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/5, /*tile_size=*/88, /*tile_margin=*/8); + EXPECT_EQ(648, window_height); + const gfx::Size window_size = gfx::Size(600, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/5, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 3 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + DensePortraitScreenWithRemovedRows) { + const int window_height = + GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/5, /*tile_size=*/88, /*tile_margin=*/8) - + 8; + EXPECT_EQ(640, window_height); + const gfx::Size window_size = gfx::Size(500, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, 3 /*row_count*/, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + DensePortraitScreenAtMaxPreferredVerticalMargin) { + const int window_height = GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/5, /*tile_size=*/88, /*tile_margin=*/96); + EXPECT_EQ(1000, window_height); + const gfx::Size window_size = gfx::Size(600, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/5, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + DensePortraitScreenWithExtraRows) { + const int window_height = + GetExpectedProductivityLauncherAppsContainerHeight( + /*row_count=*/5, /*tile_size=*/88, /*tile_margin=*/96) + + 4; + EXPECT_EQ(1004, window_height); + const gfx::Size window_size = gfx::Size(600, window_height); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + + { + SCOPED_TRACE("Only apps grid"); + EXPECT_EQ(6, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/6, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + } + + AddRecentApps(4); + contents_view()->ResetForShow(); + + { + SCOPED_TRACE("With recent apps"); + EXPECT_EQ(6, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + } +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + DenseAppsGridPaddingScaledDownToMakeRoomForPageSwitcher) { + // Select window width so using non-zero horizontal padding would result in + // lack of space for the page switcher. + const gfx::Size window_size = gfx::Size(472, 800); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/5, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + DenseAppsGridScaledDownToMakeRoomForPageSwitcher) { + // Select window width so using default icon width would result in lack of + // space for the page switcher. + const gfx::Size window_size = gfx::Size(442, 800); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(66, 88); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/5, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + DenseAppsGridWithMaxHorizontalItemMargins) { + // Select window width that results in apps grid layout with max allowed + // horizontal margin (128): 2 * 56 (min horizontal margin) + 4 * 128 + 5 * 72 + const gfx::Size window_size = gfx::Size(984, 600); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + DenseAppsGridHorizontalItemMarginsBounded) { + // Select window width that results in apps grid layout with max allowed + // horizontal margin (128), i.e. larger than + // 2 * 56 (min horizontal margin) + 4 * 128 * 5 * 72 + const gfx::Size window_size = gfx::Size(1000, 600); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = 64; + const gfx::Size expected_item_size(72, 88); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + RegularAppsGridWithMaxHorizontalItemMargins) { + // Select window width that results in apps grid layout with max allowed + // horizontal margin (128): + // 2 * 56 (min horizontal margin) + 4 * 128 * 5 * 96 + const gfx::Size window_size = gfx::Size(1104, 1200); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(96, 120); + EXPECT_EQ(6, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/6, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + RegularAppsGridHorizontalItemMarginsBounded) { + // Select window width that results in apps grid layout with max allowed + // horizontal margin (128), i.e. larger than + // 2 * 56 (min horizontal margin) + 4 * 128 * 5 * 96 + const gfx::Size window_size = gfx::Size(1116, 1200); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = 62; + const gfx::Size expected_item_size(96, 120); + EXPECT_EQ(6, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/6, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, LayoutAfterConfigChange) { + const gfx::Size window_size = gfx::Size(600, 800); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/5, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/false); + + const gfx::Size updated_window_size = gfx::Size(1000, 800); + GetContext()->SetBounds(gfx::Rect(updated_window_size)); + view_->OnParentWindowBoundsChanged(); + + const gfx::Size expected_updated_item_size(96, 120); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + updated_window_size, /*row_count=*/4, expected_horizontal_margin, + expected_updated_item_size, /*has_recent_apps=*/false); +} + +TEST_F(ProductivityLauncherAppListViewLayoutTest, + LayoutAfterConfigChangeWithRecentApps) { + const gfx::Size window_size = gfx::Size(600, 800); + GetContext()->SetBounds(gfx::Rect(window_size)); + + InitializeAppList(); + AddRecentApps(4); + contents_view()->ResetForShow(); + + const int expected_horizontal_margin = + kMinProductivityLauncherGridHorizontalMargin; + const gfx::Size expected_item_size(72, 88); + EXPECT_EQ(5, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + window_size, /*row_count=*/4, expected_horizontal_margin, + expected_item_size, /*has_recent_apps=*/true); + + const gfx::Size updated_window_size = gfx::Size(1000, 800); + GetContext()->SetBounds(gfx::Rect(updated_window_size)); + view_->OnParentWindowBoundsChanged(); + + const gfx::Size expected_updated_item_size(96, 120); + EXPECT_EQ(4, apps_grid_view()->GetRowsForTesting()); + VerifyAppsContainerLayoutForProductivityLauncher( + updated_window_size, /*row_count=*/3, expected_horizontal_margin, + expected_updated_item_size, /*has_recent_apps=*/true); +} + // Tests fullscreen apps grid sizing and layout for small screens (width < 960) // in landscape layout. -TEST_F(AppListViewScalableLayoutTest, +TEST_F(LegacyLauncherAppListViewLayoutTest, AppListViewLayoutForSmallLandscapeScreen) { const gfx::Size window_size = gfx::Size(800, 600); gfx::NativeView parent = GetContext(); @@ -2964,7 +3920,8 @@ // Tests fullscreen apps grid sizing and layout for small screens (width < 600) // in portrait layout. -TEST_F(AppListViewScalableLayoutTest, AppListViewLayoutForSmallPortraitScreen) { +TEST_F(LegacyLauncherAppListViewLayoutTest, + AppListViewLayoutForSmallPortraitScreen) { const gfx::Size window_size = gfx::Size(500, 800); gfx::NativeView parent = GetContext(); parent->SetBounds(gfx::Rect(window_size)); @@ -2984,7 +3941,7 @@ // Tests fullscreen apps grid sizing and layout for medium sized screens // (width < 1200) in lanscape layout. -TEST_F(AppListViewScalableLayoutTest, +TEST_F(LegacyLauncherAppListViewLayoutTest, AppListViewLayoutForMediumLandscapeScreen) { const gfx::Size window_size = gfx::Size(960, 800); gfx::NativeView parent = GetContext(); @@ -3008,7 +3965,7 @@ // Tests fullscreen apps grid sizing and layout for medium sized screens // (width < 768) in portrait layout. -TEST_F(AppListViewScalableLayoutTest, +TEST_F(LegacyLauncherAppListViewLayoutTest, AppListViewLayoutForMediumPortraitScreen) { const gfx::Size window_size = gfx::Size(700, 800); gfx::NativeView parent = GetContext(); @@ -3029,7 +3986,7 @@ // Tests fullscreen apps grid sizing and layout for large screens // (width >= 1200) in landscape layout. -TEST_F(AppListViewScalableLayoutTest, +TEST_F(LegacyLauncherAppListViewLayoutTest, AppListViewLayoutForLargeLandscapeScreen) { const gfx::Size window_size = gfx::Size(1200, 960); gfx::NativeView parent = GetContext(); @@ -3053,7 +4010,8 @@ // Tests fullscreen apps grid sizing and layout for large screens (width >= 768) // in portrait layout. -TEST_F(AppListViewScalableLayoutTest, AppListViewLayoutForLargePortraitScreen) { +TEST_F(LegacyLauncherAppListViewLayoutTest, + AppListViewLayoutForLargePortraitScreen) { const gfx::Size window_size = gfx::Size(800, 1200); gfx::NativeView parent = GetContext(); parent->SetBounds(gfx::Rect(window_size)); @@ -3073,7 +4031,8 @@ // Tests that apps grid horizontal margin have minimum that ensures the page // switcher view can fit next to the apps grid. -TEST_F(AppListViewScalableLayoutTest, EnsurePageSwitcherFitsAppsGridMargin) { +TEST_F(LegacyLauncherAppListViewLayoutTest, + EnsurePageSwitcherFitsAppsGridMargin) { const gfx::Size window_size = gfx::Size(440, 800); gfx::NativeView parent = GetContext(); parent->SetBounds(gfx::Rect(window_size)); @@ -3097,7 +4056,8 @@ // Verifies that the vertical spacing between items in apps grid has an upper // limit, and that the apps grid is centered in the available space if item // spacing hits that limit. -TEST_F(AppListViewScalableLayoutTest, VerticalAppsGridItemSpacingIsBounded) { +TEST_F(LegacyLauncherAppListViewLayoutTest, + VerticalAppsGridItemSpacingIsBounded) { const gfx::Size window_size = gfx::Size(960, 1600); gfx::NativeView parent = GetContext(); parent->SetBounds(gfx::Rect(window_size)); @@ -3123,7 +4083,7 @@ // Verifies that the vertical apps container margin is big enough to fit the // apps grid fadeout area. -TEST_F(AppListViewScalableLayoutTest, +TEST_F(LegacyLauncherAppListViewLayoutTest, VerticalAppsContainerMarginFitFadeoutArea) { const gfx::Size window_size(650, 536); gfx::NativeView parent = GetContext(); @@ -3146,7 +4106,8 @@ // Tests fullscreen apps grid sizing and layout gets updated to correct bounds // when app list config changes. -TEST_F(AppListViewScalableLayoutTest, AppListViewLayoutAfterConfigChange) { +TEST_F(LegacyLauncherAppListViewLayoutTest, + AppListViewLayoutAfterConfigChange) { const gfx::Size window_size = gfx::Size(500, 800); gfx::NativeView parent = GetContext(); parent->SetBounds(gfx::Rect(window_size));
diff --git a/ash/app_list/views/apps_container_view.cc b/ash/app_list/views/apps_container_view.cc index 37ee607..93ee734 100644 --- a/ash/app_list/views/apps_container_view.cc +++ b/ash/app_list/views/apps_container_view.cc
@@ -1076,6 +1076,8 @@ } int AppsContainerView::GetIdealHorizontalMargin() const { + if (features::IsProductivityLauncherEnabled()) + return 24; const int available_width = GetContentsBounds().width(); if (available_width >= kAppsGridMarginRatio * GetMinHorizontalMarginForAppsGrid()) {
diff --git a/ash/app_list/views/contents_view.cc b/ash/app_list/views/contents_view.cc index 76272e8..f03bb34 100644 --- a/ash/app_list/views/contents_view.cc +++ b/ash/app_list/views/contents_view.cc
@@ -20,6 +20,7 @@ #include "ash/app_list/views/search_result_list_view.h" #include "ash/app_list/views/search_result_page_view.h" #include "ash/app_list/views/search_result_tile_item_list_view.h" +#include "ash/constants/ash_features.h" #include "ash/keyboard/ui/keyboard_ui_controller.h" #include "ash/public/cpp/app_list/app_list_config.h" #include "ash/public/cpp/app_list/app_list_features.h" @@ -555,7 +556,8 @@ // Reduce the search box size in fullscreen view state when the work area // height is less than 600 dip - the goal is to increase the amount of space // available to the apps grid. - if (GetContentsBounds().height() < kDenseLayoutHeightThreshold) { + if (!features::IsProductivityLauncherEnabled() && + GetContentsBounds().height() < kDenseLayoutHeightThreshold) { preferred_size.set_height(kSearchBoxHeightForDenseLayout); } else { preferred_size.set_height(kSearchBoxHeight);
diff --git a/ash/app_list/views/paged_apps_grid_view.cc b/ash/app_list/views/paged_apps_grid_view.cc index f2d6478..b0ee4b8 100644 --- a/ash/app_list/views/paged_apps_grid_view.cc +++ b/ash/app_list/views/paged_apps_grid_view.cc
@@ -1382,9 +1382,9 @@ // I.e. min n, with padding as close to max as possible where: // n* tile_height + (n - 1) * padding <= available_height // padding <= max_padding - final_row_count = - std::ceil((available_height + kMaxVerticalPaddingBetweenTiles) / - (tile_height + kMaxVerticalPaddingBetweenTiles)); + final_row_count = std::ceil( + static_cast<float>(available_height + kMaxVerticalPaddingBetweenTiles) / + (tile_height + kMaxVerticalPaddingBetweenTiles)); } // Unit tests may create artificially small screens resulting in // `final_row_count` of 0. Return 1 row to avoid divide-by-zero in layout.
diff --git a/ash/app_list/views/paged_apps_grid_view_unittest.cc b/ash/app_list/views/paged_apps_grid_view_unittest.cc index a017443..f803c4a 100644 --- a/ash/app_list/views/paged_apps_grid_view_unittest.cc +++ b/ash/app_list/views/paged_apps_grid_view_unittest.cc
@@ -167,8 +167,8 @@ // Test with a display in landscape mode with more height. This should have // more rows. UpdateDisplay("1400x1100"); - EXPECT_EQ(3, GetPagedAppsGridView()->GetFirstPageRowsForTesting()); - EXPECT_EQ(4, GetPagedAppsGridView()->GetRowsForTesting()); + EXPECT_EQ(4, GetPagedAppsGridView()->GetFirstPageRowsForTesting()); + EXPECT_EQ(5, GetPagedAppsGridView()->GetRowsForTesting()); EXPECT_EQ(5, GetPagedAppsGridView()->cols()); // Test with a display in portrait mode. @@ -180,8 +180,8 @@ // Test with a display in portrait mode with more height. This should have // more rows. UpdateDisplay("700x1400"); - EXPECT_EQ(4, GetPagedAppsGridView()->GetFirstPageRowsForTesting()); - EXPECT_EQ(6, GetPagedAppsGridView()->GetRowsForTesting()); + EXPECT_EQ(5, GetPagedAppsGridView()->GetFirstPageRowsForTesting()); + EXPECT_EQ(7, GetPagedAppsGridView()->GetRowsForTesting()); EXPECT_EQ(5, GetPagedAppsGridView()->cols()); }
diff --git a/ash/components/arc/BUILD.gn b/ash/components/arc/BUILD.gn index 9c7667d..6b22190e 100644 --- a/ash/components/arc/BUILD.gn +++ b/ash/components/arc/BUILD.gn
@@ -145,7 +145,7 @@ "//third_party/re2", "//ui/base/ime/ash", "//ui/chromeos/strings", - "//ui/chromeos/styles:cros_styles_views_generator", + "//ui/chromeos/styles:cros_styles_views", "//ui/display/manager", "//ui/events/ozone", "//ui/wm/public",
diff --git a/ash/login/ui/fingerprint_auth_factor_model.cc b/ash/login/ui/fingerprint_auth_factor_model.cc index 4ab2080..3de3ac7 100644 --- a/ash/login/ui/fingerprint_auth_factor_model.cc +++ b/ash/login/ui/fingerprint_auth_factor_model.cc
@@ -23,7 +23,8 @@ } // namespace -FingerprintAuthFactorModel::FingerprintAuthFactorModel() = default; +FingerprintAuthFactorModel::FingerprintAuthFactorModel(FingerprintState state) + : state_(state) {} FingerprintAuthFactorModel::~FingerprintAuthFactorModel() = default;
diff --git a/ash/login/ui/fingerprint_auth_factor_model.h b/ash/login/ui/fingerprint_auth_factor_model.h index 7591dcb..e8e549a 100644 --- a/ash/login/ui/fingerprint_auth_factor_model.h +++ b/ash/login/ui/fingerprint_auth_factor_model.h
@@ -16,7 +16,7 @@ // lock screen. class FingerprintAuthFactorModel : public AuthFactorModel { public: - FingerprintAuthFactorModel(); + explicit FingerprintAuthFactorModel(FingerprintState state); FingerprintAuthFactorModel(FingerprintAuthFactorModel&) = delete; FingerprintAuthFactorModel& operator=(FingerprintAuthFactorModel&) = delete; ~FingerprintAuthFactorModel() override; @@ -40,9 +40,11 @@ void DoHandleErrorTimeout() override; void UpdateIcon(AuthIconView* icon) override; - FingerprintState state_ = FingerprintState::AVAILABLE_DEFAULT; + FingerprintState state_; absl::optional<bool> auth_result_; + // TODO(b/216691052): Change the name of this to be more clear that this is + // an override on top of |state_|. bool available_ = true; };
diff --git a/ash/login/ui/login_auth_user_view.cc b/ash/login/ui/login_auth_user_view.cc index 0edc25b3..a420135 100644 --- a/ash/login/ui/login_auth_user_view.cc +++ b/ash/login/ui/login_auth_user_view.cc
@@ -1017,10 +1017,20 @@ return view_->auth_factors_view_; } +AuthFactorModel* LoginAuthUserView::TestApi::fingerprint_auth_factor_model() + const { + return view_->fingerprint_auth_factor_model_; +} + bool LoginAuthUserView::TestApi::HasAuthMethod(AuthMethods auth_method) const { return view_->HasAuthMethod(auth_method); } +void LoginAuthUserView::TestApi::SetFingerprintState( + FingerprintState state) const { + return view_->SetFingerprintState(state); +} + const std::u16string& LoginAuthUserView::TestApi::GetDisabledAuthMessageContent() const { return LoginAuthUserView::DisabledAuthMessageView::TestApi( @@ -1133,7 +1143,7 @@ std::unique_ptr<LoginAuthFactorsView> auth_factors_view; if (smart_lock_ui_revamp_enabled_) { auto fingerprint_auth_factor_model = - std::make_unique<FingerprintAuthFactorModel>(); + std::make_unique<FingerprintAuthFactorModel>(user.fingerprint_state); fingerprint_auth_factor_model_ = fingerprint_auth_factor_model.get(); auto smart_lock_auth_factor_model = std::make_unique<SmartLockAuthFactorModel>(base::BindRepeating(
diff --git a/ash/login/ui/login_auth_user_view.h b/ash/login/ui/login_auth_user_view.h index 52e428e..4b415ce 100644 --- a/ash/login/ui/login_auth_user_view.h +++ b/ash/login/ui/login_auth_user_view.h
@@ -9,6 +9,7 @@ #include <memory> #include "ash/ash_export.h" +#include "ash/login/ui/auth_factor_model.h" #include "ash/login/ui/login_error_bubble.h" #include "ash/login/ui/login_password_view.h" #include "ash/login/ui/login_user_view.h" @@ -103,8 +104,10 @@ views::Button* challenge_response_button(); views::Label* challenge_response_label(); LoginAuthFactorsView* auth_factors_view() const; + AuthFactorModel* fingerprint_auth_factor_model() const; bool HasAuthMethod(AuthMethods auth_method) const; const std::u16string& GetDisabledAuthMessageContent() const; + void SetFingerprintState(FingerprintState state) const; private: LoginAuthUserView* const view_;
diff --git a/ash/login/ui/login_auth_user_view_unittest.cc b/ash/login/ui/login_auth_user_view_unittest.cc index b7135e3..6d8aa4b 100644 --- a/ash/login/ui/login_auth_user_view_unittest.cc +++ b/ash/login/ui/login_auth_user_view_unittest.cc
@@ -6,6 +6,8 @@ #include "ash/constants/ash_features.h" #include "ash/login/mock_login_screen_client.h" +#include "ash/login/ui/auth_factor_model.h" +#include "ash/login/ui/fingerprint_auth_factor_model.h" #include "ash/login/ui/login_password_view.h" #include "ash/login/ui/login_pin_input_view.h" #include "ash/login/ui/login_pin_view.h" @@ -79,24 +81,7 @@ void SetUp() override { LoginTestBase::SetUp(); SetUpFeatures(); - user_ = CreateUser("user@domain.com"); - - LoginAuthUserView::Callbacks auth_callbacks; - auth_callbacks.on_auth = base::DoNothing(); - auth_callbacks.on_easy_unlock_icon_hovered = base::DoNothing(); - auth_callbacks.on_easy_unlock_icon_tapped = - views::Button::PressedCallback(); - auth_callbacks.on_tap = base::DoNothing(); - auth_callbacks.on_remove_warning_shown = base::DoNothing(); - auth_callbacks.on_remove = base::DoNothing(); - view_ = new LoginAuthUserView(user_, auth_callbacks); - - // We proxy |view_| inside of |container_| so we can control layout. - container_ = new views::View(); - container_->SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kVertical)); - container_->AddChildView(view_); - SetWidget(CreateWidgetWithContent(container_)); + InitializeViewForUser(CreateUser("user@domain.com")); } void SetUpFeatures() { @@ -142,6 +127,26 @@ EXPECT_EQ(test.pin_password_toggle()->GetVisible(), visibility.toggle); } + void InitializeViewForUser(LoginUserInfo user) { + user_ = user; + LoginAuthUserView::Callbacks auth_callbacks; + auth_callbacks.on_auth = base::DoNothing(); + auth_callbacks.on_easy_unlock_icon_hovered = base::DoNothing(); + auth_callbacks.on_easy_unlock_icon_tapped = + views::Button::PressedCallback(); + auth_callbacks.on_tap = base::DoNothing(); + auth_callbacks.on_remove_warning_shown = base::DoNothing(); + auth_callbacks.on_remove = base::DoNothing(); + view_ = new LoginAuthUserView(user_, auth_callbacks); + + // We proxy |view_| inside of |container_| so we can control layout. + container_ = new views::View(); + container_->SetLayoutManager(std::make_unique<views::BoxLayout>( + views::BoxLayout::Orientation::kVertical)); + container_->AddChildView(view_); + SetWidget(CreateWidgetWithContent(container_)); + } + // Initialized by test parameter in `SetUpFeatures` bool autosubmit_feature_enabled_ = false; @@ -521,4 +526,51 @@ testing::Bool(), // PIN autosubmit feature LoginAuthUserViewUnittest::ParamInfoToString); +/** + * This subclass is a test fixture for tests validating logic with auth factors + * with the kSmartLockUIRevamp feature flag enabled. The test requires passing + * a custom user object per test to initialize the view to test. + */ +class LoginAuthUserViewAuthFactorsUnittest : public LoginAuthUserViewUnittest { + public: + LoginAuthUserViewAuthFactorsUnittest( + const LoginAuthUserViewAuthFactorsUnittest&) = delete; + LoginAuthUserViewAuthFactorsUnittest& operator=( + const LoginAuthUserViewAuthFactorsUnittest&) = delete; + + protected: + LoginAuthUserViewAuthFactorsUnittest() = default; + ~LoginAuthUserViewAuthFactorsUnittest() override = default; + + void SetUp() override { + LoginTestBase::SetUp(); + feature_list_.InitWithFeatures({chromeos::features::kSmartLockUIRevamp}, + {}); + } +}; + +TEST_F(LoginAuthUserViewAuthFactorsUnittest, ShowFingerprintIfAvailable) { + auto user = CreateUser("user@domain.com"); + user.fingerprint_state = FingerprintState::AVAILABLE_DEFAULT; + InitializeViewForUser(user); + SetAuthMethods(LoginAuthUserView::AuthMethods::AUTH_FINGERPRINT); + LoginAuthUserView::TestApi auth_test(view_); + AuthFactorModel* fingerprint_auth_factor = + auth_test.fingerprint_auth_factor_model(); + EXPECT_EQ(fingerprint_auth_factor->GetAuthFactorState(), + AuthFactorModel::AuthFactorState::kReady); +} + +TEST_F(LoginAuthUserViewAuthFactorsUnittest, NotShowFingerprintIfUnavaialble) { + auto user = CreateUser("user@domain.com"); + user.fingerprint_state = FingerprintState::UNAVAILABLE; + InitializeViewForUser(user); + SetAuthMethods(LoginAuthUserView::AuthMethods::AUTH_FINGERPRINT); + LoginAuthUserView::TestApi auth_test(view_); + AuthFactorModel* fingerprint_auth_factor = + auth_test.fingerprint_auth_factor_model(); + EXPECT_EQ(fingerprint_auth_factor->GetAuthFactorState(), + AuthFactorModel::AuthFactorState::kUnavailable); +} + } // namespace ash
diff --git a/ash/system/message_center/unified_message_list_view_unittest.cc b/ash/system/message_center/unified_message_list_view_unittest.cc index 5052371..9e766abd 100644 --- a/ash/system/message_center/unified_message_list_view_unittest.cc +++ b/ash/system/message_center/unified_message_list_view_unittest.cc
@@ -478,13 +478,8 @@ EXPECT_EQ(0, message_list_view()->GetPreferredSize().height()); } -// Flaky on ASAN: https://crbug.com/1293003. -#if defined(ADDRESS_SANITIZER) -#define MAYBE_ResetAnimation DISABLED_ResetAnimation -#else -#define MAYBE_ResetAnimation ResetAnimation -#endif -TEST_P(ParameterizedUnifiedMessageListViewTest, MAYBE_ResetAnimation) { +// Flaky: https://crbug.com/1292774. +TEST_P(ParameterizedUnifiedMessageListViewTest, DISABLED_ResetAnimation) { auto id0 = AddNotification(); auto id1 = AddNotification(); CreateMessageListView(); @@ -672,14 +667,9 @@ EXPECT_EQ(1u, message_list_view()->children().size()); } -// Flaky on ASAN: https://crbug.com/1293003. -#if defined(ADDRESS_SANITIZER) -#define MAYBE_UserSwipesAwayNotification DISABLED_UserSwipesAwayNotification -#else -#define MAYBE_UserSwipesAwayNotification UserSwipesAwayNotification -#endif +// Flaky: https://crbug.com/1292701. TEST_P(ParameterizedUnifiedMessageListViewTest, - MAYBE_UserSwipesAwayNotification) { + DISABLED_UserSwipesAwayNotification) { // Show message list with two notifications. AddNotification(); auto id1 = AddNotification(); @@ -913,8 +903,9 @@ // Tests that expanding a notification at various stages while it is being // closed does not result in an animation. +// TODO(crbug.com/1292775): Test is flaky. TEST_F(RefreshedUnifiedMessageListView, - CollapseDuringCloseResultsInNoCollapseAnimation) { + DISABLED_CollapseDuringCloseResultsInNoCollapseAnimation) { auto id1 = AddNotification(/*pinned=*/false, /*expandable=*/true); AddNotification(/*pinned=*/false, /*expandable=*/true); CreateMessageListView();
diff --git a/ash/webui/firmware_update_ui/firmware_update_app_ui.cc b/ash/webui/firmware_update_ui/firmware_update_app_ui.cc index 8788d06d..09effe2 100644 --- a/ash/webui/firmware_update_ui/firmware_update_app_ui.cc +++ b/ash/webui/firmware_update_ui/firmware_update_app_ui.cc
@@ -46,6 +46,7 @@ {"nextButton", IDS_FIRMWARE_NEXT_BUTTON_TEXT}, {"cancelButton", IDS_FIRMWARE_CANCEL_BUTTON_TEXT}, {"doneButton", IDS_FIRMWARE_DONE_BUTTON_TEXT}, + {"okButton", IDS_FIRMWARE_OK_BUTTON_TEXT}, {"updateButton", IDS_FIRMWARE_UPDATE_BUTTON_TEXT}, {"updateButtonA11yLabel", IDS_FIRMWARE_UPDATE_BUTTON_A11Y_LABEL}, {"updateFailedBodyText", IDS_FIRMWARE_UPDATE_FAILED_BODY_TEXT},
diff --git a/ash/webui/firmware_update_ui/resources/firmware_update_dialog.html b/ash/webui/firmware_update_ui/resources/firmware_update_dialog.html index 9517cd5..745a55d7 100644 --- a/ash/webui/firmware_update_ui/resources/firmware_update_dialog.html +++ b/ash/webui/firmware_update_ui/resources/firmware_update_dialog.html
@@ -62,7 +62,7 @@ <cr-button class="action-button" on-click="closeDialog_" id="updateDoneButton"> - [[i18n('doneButton')]] + [[computeButtonText_(installationProgress.state)]] </cr-button> </div> </cr-dialog>
diff --git a/ash/webui/firmware_update_ui/resources/firmware_update_dialog.js b/ash/webui/firmware_update_ui/resources/firmware_update_dialog.js index 7e06109..ec3a96f 100644 --- a/ash/webui/firmware_update_ui/resources/firmware_update_dialog.js +++ b/ash/webui/firmware_update_ui/resources/firmware_update_dialog.js
@@ -311,6 +311,20 @@ return false; } + + /** + * @protected + * @return {string} + */ + computeButtonText_() { + if (!this.isUpdateDone_()) { + return ''; + } + + return this.installationProgress.state === UpdateState.kSuccess ? + this.i18n('doneButton') : + this.i18n('okButton'); + } } customElements.define(
diff --git a/ash/webui/personalization_app/BUILD.gn b/ash/webui/personalization_app/BUILD.gn index 55900716..069e21f 100644 --- a/ash/webui/personalization_app/BUILD.gn +++ b/ash/webui/personalization_app/BUILD.gn
@@ -29,7 +29,7 @@ "//ash/webui/resources:personalization_app_resources", "//chromeos/strings", "//content/public/browser", - "//ui/chromeos/styles:cros_styles_views_generator", + "//ui/chromeos/styles:cros_styles_views", "//ui/resources:webui_generated_resources_grd_grit", "//ui/resources:webui_resources_grd_grit", "//ui/webui",
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc index cc99c81..16283cd5 100644 --- a/ash/wm/overview/overview_grid.cc +++ b/ash/wm/overview/overview_grid.cc
@@ -1033,15 +1033,17 @@ UpdateCannotSnapWarningVisibility(); - if (desks_templates_grid_widget_) - desks_templates_grid_widget_->SetBounds(GetGridEffectiveBounds()); - // In case of split view mode, the grid bounds and item positions will be // updated in |OnSplitViewDividerPositionChanged|. if (SplitViewController::Get(root_window_)->InSplitViewMode()) return; SetBoundsAndUpdatePositions(GetGridBoundsInScreen(root_window_), /*ignored_items=*/{}, /*animate=*/false); + + // This needs to be done after `SetBoundsAndUpdatePositions` since it needs + // `bounds_` to have its new value. + if (desks_templates_grid_widget_) + desks_templates_grid_widget_->SetBounds(GetGridEffectiveBounds()); } void OverviewGrid::OnUserWorkAreaInsetsChanged(aura::Window* root_window) {
diff --git a/base/allocator/allocator_shim.h b/base/allocator/allocator_shim.h index 1a4146e065..26eae8c3 100644 --- a/base/allocator/allocator_shim.h +++ b/base/allocator/allocator_shim.h
@@ -177,6 +177,8 @@ using SplitMainPartition = base::StrongAlias<class SplitMainPartitionTag, bool>; using UseDedicatedAlignedPartition = base::StrongAlias<class UseDedicatedAlignedPartitionTag, bool>; +using AlternateBucketDistribution = + base::StrongAlias<class AlternateBucketDistributionTag, bool>; // If |thread_cache_on_non_quarantinable_partition| is specified, the // thread-cache will be enabled on the non-quarantinable partition. The @@ -184,7 +186,8 @@ BASE_EXPORT void ConfigurePartitions( EnableBrp enable_brp, SplitMainPartition split_main_partition, - UseDedicatedAlignedPartition use_dedicated_aligned_partition); + UseDedicatedAlignedPartition use_dedicated_aligned_partition, + AlternateBucketDistribution use_alternate_bucket_distribution); #if defined(PA_ALLOW_PCSCAN) BASE_EXPORT void EnablePCScan(base::internal::PCScan::InitConfig);
diff --git a/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc b/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc index 8a112af9..66977c4 100644 --- a/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc +++ b/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc
@@ -490,7 +490,8 @@ void ConfigurePartitions( EnableBrp enable_brp, SplitMainPartition split_main_partition, - UseDedicatedAlignedPartition use_dedicated_aligned_partition) { + UseDedicatedAlignedPartition use_dedicated_aligned_partition, + AlternateBucketDistribution use_alternate_bucket_distribution) { // BRP cannot be enabled without splitting the main partition. Furthermore, in // the "before allocation" mode, it can't be enabled without further splitting // out the aligned partition. @@ -566,6 +567,11 @@ // Purge memory, now that the traffic to the original partition is cut off. current_root->PurgeMemory(PartitionPurgeDecommitEmptySlotSpans | PartitionPurgeDiscardUnusedSystemPages); + + if (!use_alternate_bucket_distribution) { + g_root.Get()->SwitchToDenserBucketDistribution(); + g_aligned_root.Get()->SwitchToDenserBucketDistribution(); + } } #if defined(PA_ALLOW_PCSCAN)
diff --git a/base/allocator/partition_alloc_features.cc b/base/allocator/partition_alloc_features.cc index a5afcc7..41fdab22 100644 --- a/base/allocator/partition_alloc_features.cc +++ b/base/allocator/partition_alloc_features.cc
@@ -78,6 +78,12 @@ #endif // BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) +// If enabled, switches the bucket distribution to an alternate one. The +// alternate distribution must have buckets that are a subset of the default +// one. +const Feature kPartitionAllocUseAlternateDistribution{ + "PartitionAllocUseAlternateDistribution", FEATURE_DISABLED_BY_DEFAULT}; + // If enabled, switches PCScan scheduling to a mutator-aware scheduler. Does not // affect whether PCScan is enabled itself. const Feature kPartitionAllocPCScanMUAwareScheduler{
diff --git a/base/allocator/partition_alloc_features.h b/base/allocator/partition_alloc_features.h index 0e37ed3..df79f3c 100644 --- a/base/allocator/partition_alloc_features.h +++ b/base/allocator/partition_alloc_features.h
@@ -69,6 +69,7 @@ extern const BASE_EXPORT Feature kPartitionAllocDCScan; extern const BASE_EXPORT Feature kPartitionAllocPCScanImmediateFreeing; extern const BASE_EXPORT Feature kPartitionAllocPCScanEagerClearing; +extern const BASE_EXPORT Feature kPartitionAllocUseAlternateDistribution; } // namespace features } // namespace base
diff --git a/base/allocator/partition_allocator/partition_alloc_perftest.cc b/base/allocator/partition_allocator/partition_alloc_perftest.cc index 8eeaa6c..75146c8 100644 --- a/base/allocator/partition_allocator/partition_alloc_perftest.cc +++ b/base/allocator/partition_allocator/partition_alloc_perftest.cc
@@ -82,7 +82,10 @@ class PartitionAllocator : public Allocator { public: - PartitionAllocator() = default; + explicit PartitionAllocator(bool use_alternate_bucket_dist) { + if (!use_alternate_bucket_dist) + alloc_.SwitchToDenserBucketDistribution(); + } ~PartitionAllocator() override = default; void* Alloc(size_t size) override { @@ -105,7 +108,7 @@ ThreadSafePartitionRoot* g_partition_root = nullptr; class PartitionAllocatorWithThreadCache : public Allocator { public: - PartitionAllocatorWithThreadCache() { + explicit PartitionAllocatorWithThreadCache(bool use_alternate_bucket_dist) { if (!g_partition_root) { g_partition_root = new ThreadSafePartitionRoot({ PartitionOptions::AlignedAlloc::kDisallowed, @@ -117,6 +120,8 @@ }); } internal::ThreadCacheRegistry::Instance().PurgeAll(); + if (!use_alternate_bucket_dist) + g_partition_root->SwitchToDenserBucketDistribution(); } ~PartitionAllocatorWithThreadCache() override = default; @@ -302,14 +307,16 @@ return timer.LapsPerSecond(); } -std::unique_ptr<Allocator> CreateAllocator(AllocatorType type) { +std::unique_ptr<Allocator> CreateAllocator(AllocatorType type, + bool use_alternate_bucket_dist) { switch (type) { case AllocatorType::kSystem: return std::make_unique<SystemAllocator>(); case AllocatorType::kPartitionAlloc: - return std::make_unique<PartitionAllocator>(); + return std::make_unique<PartitionAllocator>(use_alternate_bucket_dist); case AllocatorType::kPartitionAllocWithThreadCache: - return std::make_unique<PartitionAllocatorWithThreadCache>(); + return std::make_unique<PartitionAllocatorWithThreadCache>( + use_alternate_bucket_dist); } } @@ -323,11 +330,12 @@ } void RunTest(int thread_count, + bool use_alternate_bucket_dist, AllocatorType alloc_type, float (*test_fn)(Allocator*), float (*noisy_neighbor_fn)(Allocator*), const char* story_base_name) { - auto alloc = CreateAllocator(alloc_type); + auto alloc = CreateAllocator(alloc_type, use_alternate_bucket_dist); std::unique_ptr<TestLoopThread> noisy_neighbor_thread = nullptr; if (noisy_neighbor_fn) { @@ -376,7 +384,7 @@ } class PartitionAllocMemoryAllocationPerfTest - : public testing::TestWithParam<std::tuple<int, AllocatorType>> {}; + : public testing::TestWithParam<std::tuple<int, bool, AllocatorType>> {}; // Only one partition with a thread cache: cannot use the thread cache when // PartitionAlloc is malloc(). @@ -385,6 +393,7 @@ PartitionAllocMemoryAllocationPerfTest, ::testing::Combine( ::testing::Values(1, 2, 3, 4), + ::testing::Values(false, true), ::testing::Values(AllocatorType::kSystem, AllocatorType::kPartitionAlloc, AllocatorType::kPartitionAllocWithThreadCache))); @@ -394,34 +403,38 @@ #if !defined(MEMORY_CONSTRAINED) TEST_P(PartitionAllocMemoryAllocationPerfTest, SingleBucket) { auto params = GetParam(); - RunTest(std::get<0>(params), std::get<1>(params), SingleBucket, nullptr, + RunTest(std::get<int>(params), std::get<bool>(params), + std::get<AllocatorType>(params), SingleBucket, nullptr, "SingleBucket"); } #endif // defined(MEMORY_CONSTRAINED) TEST_P(PartitionAllocMemoryAllocationPerfTest, SingleBucketWithFree) { auto params = GetParam(); - RunTest(std::get<0>(params), std::get<1>(params), SingleBucketWithFree, - nullptr, "SingleBucketWithFree"); + RunTest(std::get<int>(params), std::get<bool>(params), + std::get<AllocatorType>(params), SingleBucketWithFree, nullptr, + "SingleBucketWithFree"); } #if !defined(MEMORY_CONSTRAINED) TEST_P(PartitionAllocMemoryAllocationPerfTest, MultiBucket) { auto params = GetParam(); - RunTest(std::get<0>(params), std::get<1>(params), MultiBucket, nullptr, - "MultiBucket"); + RunTest(std::get<int>(params), std::get<bool>(params), + std::get<AllocatorType>(params), MultiBucket, nullptr, "MultiBucket"); } #endif // defined(MEMORY_CONSTRAINED) TEST_P(PartitionAllocMemoryAllocationPerfTest, MultiBucketWithFree) { auto params = GetParam(); - RunTest(std::get<0>(params), std::get<1>(params), MultiBucketWithFree, - nullptr, "MultiBucketWithFree"); + RunTest(std::get<int>(params), std::get<bool>(params), + std::get<AllocatorType>(params), MultiBucketWithFree, nullptr, + "MultiBucketWithFree"); } TEST_P(PartitionAllocMemoryAllocationPerfTest, DirectMapped) { auto params = GetParam(); - RunTest(std::get<0>(params), std::get<1>(params), DirectMapped, nullptr, + RunTest(std::get<int>(params), std::get<bool>(params), + std::get<AllocatorType>(params), DirectMapped, nullptr, "DirectMapped"); } @@ -429,7 +442,8 @@ TEST_P(PartitionAllocMemoryAllocationPerfTest, DISABLED_MultiBucketWithNoisyNeighbor) { auto params = GetParam(); - RunTest(std::get<0>(params), std::get<1>(params), MultiBucket, DirectMapped, + RunTest(std::get<int>(params), std::get<bool>(params), + std::get<AllocatorType>(params), MultiBucket, DirectMapped, "MultiBucketWithNoisyNeighbor"); } #endif // !defined(MEMORY_CONSTRAINED)
diff --git a/base/allocator/partition_allocator/partition_alloc_unittest.cc b/base/allocator/partition_allocator/partition_alloc_unittest.cc index ec884b0..248e3928 100644 --- a/base/allocator/partition_allocator/partition_alloc_unittest.cc +++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc
@@ -223,7 +223,7 @@ char* ptr_; }; -class PartitionAllocTest : public testing::Test { +class PartitionAllocTest : public testing::TestWithParam<bool> { protected: PartitionAllocTest() = default; @@ -262,10 +262,16 @@ allocator.root()->UncapEmptySlotSpanMemoryForTesting(); aligned_allocator.root()->UncapEmptySlotSpanMemoryForTesting(); + + if (!GetParam()) + allocator.root()->SwitchToDenserBucketDistribution(); + else + allocator.root()->ResetBucketDistributionForTesting(); } size_t SizeToIndex(size_t size) { - return PartitionRoot<base::internal::ThreadSafe>::SizeToBucketIndex(size); + return PartitionRoot<base::internal::ThreadSafe>::SizeToBucketIndex( + size, GetParam()); } void TearDown() override { @@ -513,8 +519,12 @@ } // namespace +INSTANTIATE_TEST_SUITE_P(AlternateBucketDistribution, + PartitionAllocTest, + testing::Values(false, true)); + // Check that the most basic of allocate / free pairs work. -TEST_F(PartitionAllocTest, Basic) { +TEST_P(PartitionAllocTest, Basic) { PartitionRoot<ThreadSafe>::Bucket* bucket = &allocator.root()->buckets[test_bucket_index_]; auto* seed_slot_span = SlotSpan::get_sentinel_slot_span(); @@ -540,7 +550,7 @@ } // Test multiple allocations, and freelist handling. -TEST_F(PartitionAllocTest, MultiAlloc) { +TEST_P(PartitionAllocTest, MultiAlloc) { char* ptr1 = reinterpret_cast<char*>( allocator.root()->Alloc(kTestAllocSize, type_name)); char* ptr2 = reinterpret_cast<char*>( @@ -581,7 +591,7 @@ } // Test a bucket with multiple slot spans. -TEST_F(PartitionAllocTest, MultiSlotSpans) { +TEST_P(PartitionAllocTest, MultiSlotSpans) { PartitionRoot<ThreadSafe>::Bucket* bucket = &allocator.root()->buckets[test_bucket_index_]; @@ -622,7 +632,7 @@ } // Test some finer aspects of internal slot span transitions. -TEST_F(PartitionAllocTest, SlotSpanTransitions) { +TEST_P(PartitionAllocTest, SlotSpanTransitions) { PartitionRoot<ThreadSafe>::Bucket* bucket = &allocator.root()->buckets[test_bucket_index_]; @@ -683,7 +693,7 @@ // Test some corner cases relating to slot span transitions in the internal // free slot span list metadata bucket. -TEST_F(PartitionAllocTest, FreeSlotSpanListSlotSpanTransitions) { +TEST_P(PartitionAllocTest, FreeSlotSpanListSlotSpanTransitions) { PartitionRoot<ThreadSafe>::Bucket* bucket = &allocator.root()->buckets[test_bucket_index_]; @@ -728,7 +738,7 @@ // Test a large series of allocations that cross more than one underlying // super page. -TEST_F(PartitionAllocTest, MultiPageAllocs) { +TEST_P(PartitionAllocTest, MultiPageAllocs) { size_t num_pages_per_slot_span = GetNumPagesPerSlotSpan(kTestAllocSize); // 1 super page has 2 guard partition pages. size_t num_slot_spans_needed = @@ -761,7 +771,7 @@ // Test the generic allocation functions that can handle arbitrary sizes and // reallocing etc. -TEST_F(PartitionAllocTest, Alloc) { +TEST_P(PartitionAllocTest, Alloc) { void* ptr = allocator.root()->Alloc(1, type_name); EXPECT_TRUE(ptr); allocator.root()->Free(ptr); @@ -855,7 +865,7 @@ // Test the generic allocation functions can handle some specific sizes of // interest. -TEST_F(PartitionAllocTest, AllocSizes) { +TEST_P(PartitionAllocTest, AllocSizes) { { void* ptr = allocator.root()->Alloc(0, type_name); EXPECT_TRUE(ptr); @@ -957,7 +967,7 @@ } // Test that we can fetch the real allocated size after an allocation. -TEST_F(PartitionAllocTest, AllocGetSizeAndStart) { +TEST_P(PartitionAllocTest, AllocGetSizeAndStart) { void* ptr; size_t requested_size, actual_capacity, predicted_capacity; @@ -1071,7 +1081,7 @@ } #if BUILDFLAG(USE_BACKUP_REF_PTR) -TEST_F(PartitionAllocTest, IsValidPtrDelta) { +TEST_P(PartitionAllocTest, IsValidPtrDelta) { const size_t kMinReasonableTestSize = base::bits::AlignUp(kExtraAllocSize + 1, base::kAlignment); ASSERT_GT(kMinReasonableTestSize, kExtraAllocSize); @@ -1150,7 +1160,7 @@ } } -TEST_F(PartitionAllocTest, GetSlotStartMultiplePages) { +TEST_P(PartitionAllocTest, GetSlotStartMultiplePages) { const size_t real_size = 80; const size_t requested_size = real_size - kExtraAllocSize; // Double check we don't end up with 0 or negative size. @@ -1180,7 +1190,7 @@ #endif // BUILDFLAG(USE_BACKUP_REF_PTR) // Test the realloc() contract. -TEST_F(PartitionAllocTest, Realloc) { +TEST_P(PartitionAllocTest, Realloc) { // realloc(0, size) should be equivalent to malloc(). void* ptr = allocator.root()->Realloc(nullptr, kTestAllocSize, type_name); memset(ptr, 'A', kTestAllocSize); @@ -1296,7 +1306,7 @@ allocator.root()->Free(ptr3); } -TEST_F(PartitionAllocTest, ReallocDirectMapAligned) { +TEST_P(PartitionAllocTest, ReallocDirectMapAligned) { size_t alignments[] = { PartitionPageSize(), 2 * PartitionPageSize(), @@ -1347,7 +1357,7 @@ } } -TEST_F(PartitionAllocTest, ReallocDirectMapAlignedRelocate) { +TEST_P(PartitionAllocTest, ReallocDirectMapAlignedRelocate) { // Pick size such that the alignment will put it cross the super page // boundary. size_t size = 2 * kSuperPageSize - kMaxSupportedAlignment + SystemPageSize(); @@ -1373,7 +1383,7 @@ } // Tests the handing out of freelists for partial slot spans. -TEST_F(PartitionAllocTest, PartialPageFreelists) { +TEST_P(PartitionAllocTest, PartialPageFreelists) { size_t big_size = SystemPageSize() - kExtraAllocSize; size_t bucket_index = SizeToIndex(big_size + kExtraAllocSize); PartitionRoot<ThreadSafe>::Bucket* bucket = @@ -1586,7 +1596,7 @@ } // Test some of the fragmentation-resistant properties of the allocator. -TEST_F(PartitionAllocTest, SlotSpanRefilling) { +TEST_P(PartitionAllocTest, SlotSpanRefilling) { PartitionRoot<ThreadSafe>::Bucket* bucket = &allocator.root()->buckets[test_bucket_index_]; @@ -1620,7 +1630,7 @@ } // Basic tests to ensure that allocations work for partial page buckets. -TEST_F(PartitionAllocTest, PartialPages) { +TEST_P(PartitionAllocTest, PartialPages) { // Find a size that is backed by a partial partition page. size_t size = sizeof(void*); size_t bucket_index; @@ -1643,7 +1653,7 @@ } // Test correct handling if our mapping collides with another. -TEST_F(PartitionAllocTest, MappingCollision) { +TEST_P(PartitionAllocTest, MappingCollision) { size_t num_pages_per_slot_span = GetNumPagesPerSlotSpan(kTestAllocSize); // The -2 is because the first and last partition pages in a super page are // guard pages. @@ -1733,7 +1743,7 @@ // Tests that slot spans in the free slot span cache do get freed as // appropriate. -TEST_F(PartitionAllocTest, FreeCache) { +TEST_P(PartitionAllocTest, FreeCache) { EXPECT_EQ(0U, allocator.root()->get_total_size_of_committed_pages()); size_t big_size = 1000 - kExtraAllocSize; @@ -1791,7 +1801,7 @@ } // Tests for a bug we had with losing references to free slot spans. -TEST_F(PartitionAllocTest, LostFreeSlotSpansBug) { +TEST_P(PartitionAllocTest, LostFreeSlotSpansBug) { size_t size = PartitionPageSize() - kExtraAllocSize; void* ptr = allocator.root()->Alloc(size, type_name); @@ -1870,6 +1880,10 @@ // Death tests misbehave on Android, http://crbug.com/643760. #if defined(GTEST_HAS_DEATH_TEST) && !BUILDFLAG(IS_ANDROID) +INSTANTIATE_TEST_SUITE_P(AlternateBucketDistribution, + PartitionAllocDeathTest, + testing::Values(false, true)); + // Unit tests that check if an allocation fails in "return null" mode, // repeating it doesn't crash, and still returns null. The tests need to // stress memory subsystem limits to do so, hence they try to allocate @@ -1900,7 +1914,7 @@ // These tests are *very* slow when DCHECK_IS_ON(), because they memset() many // GiB of data (see crbug.com/1168168). // TODO(lizeb): make these tests faster. -TEST_F(PartitionAllocDeathTest, RepeatedAllocReturnNullDirect) { +TEST_P(PartitionAllocDeathTest, RepeatedAllocReturnNullDirect) { // A direct-mapped allocation size. size_t direct_map_size = 32 * 1024 * 1024; ASSERT_GT(direct_map_size, kMaxBucketed); @@ -1909,7 +1923,7 @@ } // Repeating above test with Realloc -TEST_F(PartitionAllocDeathTest, RepeatedReallocReturnNullDirect) { +TEST_P(PartitionAllocDeathTest, RepeatedReallocReturnNullDirect) { size_t direct_map_size = 32 * 1024 * 1024; ASSERT_GT(direct_map_size, kMaxBucketed); EXPECT_DEATH(DoReturnNullTest(direct_map_size, kPartitionReallocFlags), @@ -1917,7 +1931,7 @@ } // Repeating above test with TryRealloc -TEST_F(PartitionAllocDeathTest, RepeatedTryReallocReturnNullDirect) { +TEST_P(PartitionAllocDeathTest, RepeatedTryReallocReturnNullDirect) { size_t direct_map_size = 32 * 1024 * 1024; ASSERT_GT(direct_map_size, kMaxBucketed); EXPECT_DEATH(DoReturnNullTest(direct_map_size, kPartitionRootTryRealloc), @@ -1926,7 +1940,7 @@ // See crbug.com/1187404 to re-enable the tests below. // Test "return null" with a 512 kB block size. -TEST_F(PartitionAllocDeathTest, DISABLED_RepeatedAllocReturnNull) { +TEST_P(PartitionAllocDeathTest, DISABLED_RepeatedAllocReturnNull) { // A single-slot but non-direct-mapped allocation size. size_t single_slot_size = 512 * 1024; ASSERT_GT(single_slot_size, MaxRegularSlotSpanSize()); @@ -1936,7 +1950,7 @@ } // Repeating above test with Realloc. -TEST_F(PartitionAllocDeathTest, DISABLED_RepeatedReallocReturnNull) { +TEST_P(PartitionAllocDeathTest, DISABLED_RepeatedReallocReturnNull) { size_t single_slot_size = 512 * 1024; ASSERT_GT(single_slot_size, MaxRegularSlotSpanSize()); ASSERT_LE(single_slot_size, kMaxBucketed); @@ -1945,7 +1959,7 @@ } // Repeating above test with TryRealloc. -TEST_F(PartitionAllocDeathTest, DISABLED_RepeatedTryReallocReturnNull) { +TEST_P(PartitionAllocDeathTest, DISABLED_RepeatedTryReallocReturnNull) { size_t single_slot_size = 512 * 1024; ASSERT_GT(single_slot_size, MaxRegularSlotSpanSize()); ASSERT_LE(single_slot_size, kMaxBucketed); @@ -1959,7 +1973,7 @@ // Make sure that malloc(-1) dies. // In the past, we had an integer overflow that would alias malloc(-1) to // malloc(0), which is not good. -TEST_F(PartitionAllocDeathTest, LargeAllocs) { +TEST_P(PartitionAllocDeathTest, LargeAllocs) { // Largest alloc. EXPECT_DEATH(allocator.root()->Alloc(static_cast<size_t>(-1), type_name), ""); // And the smallest allocation we expect to die. @@ -1980,7 +1994,7 @@ (defined(PA_HAS_64_BITS_POINTERS) && defined(ARCH_CPU_LITTLE_ENDIAN)) // Check that our immediate double-free detection works. -TEST_F(PartitionAllocDeathTest, ImmediateDoubleFree) { +TEST_P(PartitionAllocDeathTest, ImmediateDoubleFree) { void* ptr = allocator.root()->Alloc(kTestAllocSize, type_name); EXPECT_TRUE(ptr); allocator.root()->Free(ptr); @@ -1988,7 +2002,7 @@ } // As above, but when this isn't the only slot in the span. -TEST_F(PartitionAllocDeathTest, ImmediateDoubleFree2ndSlot) { +TEST_P(PartitionAllocDeathTest, ImmediateDoubleFree2ndSlot) { void* ptr0 = allocator.root()->Alloc(kTestAllocSize, type_name); EXPECT_TRUE(ptr0); void* ptr = allocator.root()->Alloc(kTestAllocSize, type_name); @@ -2004,7 +2018,7 @@ // Unlike in ImmediateDoubleFree test, we can't have a 2ndSlot version, as this // protection wouldn't work when there is another slot present in the span. It // will prevent |num_allocated_slots| from going below 0. -TEST_F(PartitionAllocDeathTest, NumAllocatedSlotsDoubleFree) { +TEST_P(PartitionAllocDeathTest, NumAllocatedSlotsDoubleFree) { void* ptr = allocator.root()->Alloc(kTestAllocSize, type_name); EXPECT_TRUE(ptr); void* ptr2 = allocator.root()->Alloc(kTestAllocSize, type_name); @@ -2021,7 +2035,7 @@ // (defined(PA_HAS_64_BITS_POINTERS) && defined(ARCH_CPU_LITTLE_ENDIAN)) // Check that guard pages are present where expected. -TEST_F(PartitionAllocDeathTest, DirectMapGuardPages) { +TEST_P(PartitionAllocDeathTest, DirectMapGuardPages) { const size_t kSizes[] = { kMaxBucketed + kExtraAllocSize + 1, kMaxBucketed + SystemPageSize(), kMaxBucketed + PartitionPageSize(), @@ -2045,7 +2059,7 @@ } #if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)) && defined(ARCH_CPU_ARM64) -TEST_F(PartitionAllocTest, MTEProtectsFreedPtr) { +TEST_P(PartitionAllocTest, MTEProtectsFreedPtr) { // This test checks that Arm's memory tagging extension is correctly // protecting freed pointers. Writes to a freed pointer should cause a crash. CPU cpu; @@ -2081,7 +2095,7 @@ // These tests rely on precise layout. They handle cookie, not ref-count. #if !BUILDFLAG(USE_BACKUP_REF_PTR) && defined(PA_HAS_FREELIST_SHADOW_ENTRY) -TEST_F(PartitionAllocDeathTest, UseAfterFreeDetection) { +TEST_P(PartitionAllocDeathTest, UseAfterFreeDetection) { CPU cpu; void* data = allocator.root()->Alloc(100, ""); allocator.root()->Free(data); @@ -2092,7 +2106,7 @@ EXPECT_DEATH(allocator.root()->Alloc(100, ""), ""); } -TEST_F(PartitionAllocDeathTest, FreelistCorruption) { +TEST_P(PartitionAllocDeathTest, FreelistCorruption) { CPU cpu; const size_t alloc_size = 2 * sizeof(void*); void** fake_freelist_entry = @@ -2116,7 +2130,7 @@ // With DCHECK_IS_ON(), cookie already handles off-by-one detection. #if !DCHECK_IS_ON() -TEST_F(PartitionAllocDeathTest, OffByOneDetection) { +TEST_P(PartitionAllocDeathTest, OffByOneDetection) { CPU cpu; const size_t alloc_size = 2 * sizeof(void*); char* array = static_cast<char*>(allocator.root()->Alloc(alloc_size, "")); @@ -2139,7 +2153,7 @@ } } -TEST_F(PartitionAllocDeathTest, OffByOneDetectionWithRealisticData) { +TEST_P(PartitionAllocDeathTest, OffByOneDetectionWithRealisticData) { CPU cpu; const size_t alloc_size = 2 * sizeof(void*); void** array = static_cast<void**>(allocator.root()->Alloc(alloc_size, "")); @@ -2166,7 +2180,7 @@ // Tests that |PartitionDumpStats| and |PartitionDumpStats| run without // crashing and return non-zero values when memory is allocated. -TEST_F(PartitionAllocTest, DumpMemoryStats) { +TEST_P(PartitionAllocTest, DumpMemoryStats) { { void* ptr = allocator.root()->Alloc(kTestAllocSize, type_name); MockPartitionStatsDumper mock_stats_dumper; @@ -2427,7 +2441,7 @@ } // Tests the API to purge freeable memory. -TEST_F(PartitionAllocTest, Purge) { +TEST_P(PartitionAllocTest, Purge) { char* ptr = reinterpret_cast<char*>( allocator.root()->Alloc(2048 - kExtraAllocSize, type_name)); allocator.root()->Free(ptr); @@ -2476,7 +2490,7 @@ // Tests that we prefer to allocate into a non-empty partition page over an // empty one. This is an important aspect of minimizing memory usage for some // allocation sizes, particularly larger ones. -TEST_F(PartitionAllocTest, PreferActiveOverEmpty) { +TEST_P(PartitionAllocTest, PreferActiveOverEmpty) { size_t size = (SystemPageSize() * 2) - kExtraAllocSize; // Allocate 3 full slot spans worth of 8192-byte allocations. // Each slot span for this size is 16384 bytes, or 1 partition page and 2 @@ -2528,7 +2542,7 @@ } // Tests the API to purge discardable memory. -TEST_F(PartitionAllocTest, PurgeDiscardableSecondPage) { +TEST_P(PartitionAllocTest, PurgeDiscardableSecondPage) { // Free the second of two 4096 byte allocations and then purge. void* ptr1 = allocator.root()->Alloc(SystemPageSize() - kExtraAllocSize, type_name); @@ -2562,7 +2576,7 @@ allocator.root()->Free(ptr1); } -TEST_F(PartitionAllocTest, PurgeDiscardableFirstPage) { +TEST_P(PartitionAllocTest, PurgeDiscardableFirstPage) { // Free the first of two 4096 byte allocations and then purge. char* ptr1 = reinterpret_cast<char*>( allocator.root()->Alloc(SystemPageSize() - kExtraAllocSize, type_name)); @@ -2595,7 +2609,7 @@ allocator.root()->Free(ptr2); } -TEST_F(PartitionAllocTest, PurgeDiscardableNonPageSizedAlloc) { +TEST_P(PartitionAllocTest, PurgeDiscardableNonPageSizedAlloc) { const size_t requested_size = 2.5 * SystemPageSize(); char* ptr1 = reinterpret_cast<char*>( allocator.root()->Alloc(requested_size - kExtraAllocSize, type_name)); @@ -2640,7 +2654,7 @@ allocator.root()->Free(ptr4); } -TEST_F(PartitionAllocTest, PurgeDiscardableManyPages) { +TEST_P(PartitionAllocTest, PurgeDiscardableManyPages) { // On systems with large pages, use less pages because: // 1) There must be a bucket for kFirstAllocPages * SystemPageSize(), and // 2) On low-end systems, using too many large pages can OOM during the test @@ -2685,7 +2699,7 @@ CHECK_PAGE_IN_CORE(p.PageAtIndex(i), false); } -TEST_F(PartitionAllocTest, PurgeDiscardableWithFreeListRewrite) { +TEST_P(PartitionAllocTest, PurgeDiscardableWithFreeListRewrite) { // This sub-test tests truncation of the provisioned slots in a trickier // case where the freelist is rewritten. allocator.root()->PurgeMemory(PartitionPurgeDecommitEmptySlotSpans); @@ -2753,7 +2767,7 @@ allocator.root()->Free(ptr3); } -TEST_F(PartitionAllocTest, PurgeDiscardableDoubleTruncateFreeList) { +TEST_P(PartitionAllocTest, PurgeDiscardableDoubleTruncateFreeList) { // This sub-test is similar, but tests a double-truncation. allocator.root()->PurgeMemory(PartitionPurgeDecommitEmptySlotSpans); char* ptr1 = reinterpret_cast<char*>( @@ -2807,7 +2821,7 @@ allocator.root()->Free(ptr2); } -TEST_F(PartitionAllocTest, ReallocMovesCookie) { +TEST_P(PartitionAllocTest, ReallocMovesCookie) { // Resize so as to be sure to hit a "resize in place" case, and ensure that // use of the entire result is compatible with the debug mode's cookie, even // when the bucket size is large enough to span more than one partition page @@ -2824,7 +2838,7 @@ allocator.root()->Free(ptr); } -TEST_F(PartitionAllocTest, SmallReallocDoesNotMoveTrailingCookie) { +TEST_P(PartitionAllocTest, SmallReallocDoesNotMoveTrailingCookie) { // For crbug.com/781473 static constexpr size_t kSize = 264; void* ptr = allocator.root()->Alloc(kSize, type_name); @@ -2836,7 +2850,7 @@ allocator.root()->Free(ptr); } -TEST_F(PartitionAllocTest, ZeroFill) { +TEST_P(PartitionAllocTest, ZeroFill) { constexpr static size_t kAllZerosSentinel = std::numeric_limits<size_t>::max(); for (size_t size : kTestSizes) { @@ -2860,7 +2874,7 @@ } } -TEST_F(PartitionAllocTest, Bug_897585) { +TEST_P(PartitionAllocTest, Bug_897585) { // Need sizes big enough to be direct mapped and a delta small enough to // allow re-use of the slot span when cookied. These numbers fall out of the // test case in the indicated bug. @@ -2878,7 +2892,7 @@ allocator.root()->Free(ptr); } -TEST_F(PartitionAllocTest, OverrideHooks) { +TEST_P(PartitionAllocTest, OverrideHooks) { constexpr size_t kOverriddenSize = 1234; constexpr const char* kOverriddenType = "Overridden type"; constexpr unsigned char kOverriddenChar = 'A'; @@ -2886,7 +2900,8 @@ // Marked static so that we can use them in non-capturing lambdas below. // (Non-capturing lambdas convert directly to function pointers.) static volatile bool free_called = false; - static void* overridden_allocation = malloc(kOverriddenSize); + static void* overridden_allocation = nullptr; + overridden_allocation = malloc(kOverriddenSize); memset(overridden_allocation, kOverriddenChar, kOverriddenSize); PartitionAllocHooks::SetOverrideHooks( @@ -2934,7 +2949,7 @@ free(overridden_allocation); } -TEST_F(PartitionAllocTest, Alignment) { +TEST_P(PartitionAllocTest, Alignment) { std::vector<void*> allocated_ptrs; for (size_t size = 1; size <= base::PartitionPageSize(); size <<= 1) { @@ -2963,7 +2978,7 @@ allocator.root()->Free(ptr); } -TEST_F(PartitionAllocTest, FundamentalAlignment) { +TEST_P(PartitionAllocTest, FundamentalAlignment) { // See the test above for details. Essentially, checking the bucket size is // sufficient to ensure that alignment will always be respected, as long as // the fundamental alignment is <= 16 bytes. @@ -3020,7 +3035,7 @@ PartitionRoot<ThreadSafe>::Free(ptr); } -TEST_F(PartitionAllocTest, AlignedAllocations) { +TEST_P(PartitionAllocTest, AlignedAllocations) { size_t alloc_sizes[] = {1, 10, 100, @@ -3051,7 +3066,7 @@ // Test that the optimized `GetSlotNumber` implementation produces valid // results. -TEST_F(PartitionAllocTest, OptimizedGetSlotNumber) { +TEST_P(PartitionAllocTest, OptimizedGetSlotNumber) { for (size_t i = 0; i < kNumBuckets; ++i) { auto& bucket = allocator.root()->buckets[i]; if (SizeToIndex(bucket.slot_size) != i) @@ -3065,11 +3080,11 @@ } } -TEST_F(PartitionAllocTest, GetUsableSizeNull) { +TEST_P(PartitionAllocTest, GetUsableSizeNull) { EXPECT_EQ(0ULL, PartitionRoot<ThreadSafe>::GetUsableSize(nullptr)); } -TEST_F(PartitionAllocTest, GetUsableSize) { +TEST_P(PartitionAllocTest, GetUsableSize) { size_t delta = SystemPageSize() + 1; for (size_t size = 1; size <= kMinDirectMappedDownsize; size += delta) { void* ptr = allocator.root()->Alloc(size, ""); @@ -3082,7 +3097,7 @@ } } -TEST_F(PartitionAllocTest, Bookkeeping) { +TEST_P(PartitionAllocTest, Bookkeeping) { auto& root = *allocator.root(); EXPECT_EQ(0U, root.total_size_of_committed_pages); @@ -3327,7 +3342,7 @@ #if BUILDFLAG(USE_BACKUP_REF_PTR) -TEST_F(PartitionAllocTest, RefCountBasic) { +TEST_P(PartitionAllocTest, RefCountBasic) { constexpr uint64_t kCookie = 0x1234567890ABCDEF; constexpr uint64_t kQuarantined = 0xEFEFEFEFEFEFEFEF; @@ -3421,7 +3436,7 @@ allocator.root()->Free(ptr2); } -TEST_F(PartitionAllocTest, RefCountRealloc) { +TEST_P(PartitionAllocTest, RefCountRealloc) { size_t alloc_sizes[] = {500, 5000, 50000, 400000}; for (size_t alloc_size : alloc_sizes) { @@ -3435,7 +3450,7 @@ #endif // BUILDFLAG(USE_BACKUP_REF_PTR) -TEST_F(PartitionAllocTest, ReservationOffset) { +TEST_P(PartitionAllocTest, ReservationOffset) { // For normal buckets, offset should be kOffsetTagNormalBuckets. void* ptr = allocator.root()->Alloc(kTestAllocSize, type_name); EXPECT_TRUE(ptr); @@ -3481,7 +3496,7 @@ *ReservationOffsetPointer(ptr_as_uintptr + kSuperPageSize * 5)); } -TEST_F(PartitionAllocTest, GetReservationStart) { +TEST_P(PartitionAllocTest, GetReservationStart) { size_t large_size = kSuperPageSize * 3 + PartitionPageSize() * .5f; ASSERT_GT(large_size, kMaxBucketed); void* ptr = allocator.root()->Alloc(large_size, type_name); @@ -3502,7 +3517,7 @@ allocator.root()->Free(ptr); } -TEST_F(PartitionAllocTest, CheckReservationType) { +TEST_P(PartitionAllocTest, CheckReservationType) { void* ptr = allocator.root()->Alloc(kTestAllocSize, type_name); EXPECT_TRUE(ptr); uintptr_t address = reinterpret_cast<uintptr_t>(ptr); @@ -3567,7 +3582,7 @@ } // Test for crash http://crbug.com/1169003. -TEST_F(PartitionAllocTest, CrossPartitionRootRealloc) { +TEST_P(PartitionAllocTest, CrossPartitionRootRealloc) { // Size is large enough to satisfy it from a single-slot slot span size_t test_size = MaxRegularSlotSpanSize() - kExtraAllocSize; void* ptr = allocator.root()->AllocFlags(PartitionAllocReturnNull, test_size, @@ -3593,7 +3608,7 @@ PA_EXPECT_PTR_NE(ptr, ptr2); } -TEST_F(PartitionAllocTest, FastPathOrReturnNull) { +TEST_P(PartitionAllocTest, FastPathOrReturnNull) { size_t allocation_size = 64; // The very first allocation is never a fast path one, since it needs a new // super page and a new partition page. @@ -3632,7 +3647,7 @@ #if defined(GTEST_HAS_DEATH_TEST) && !BUILDFLAG(IS_ANDROID) #if !defined(OFFICIAL_BUILD) || !defined(NDEBUG) -TEST_F(PartitionAllocDeathTest, CheckTriggered) { +TEST_P(PartitionAllocDeathTest, CheckTriggered) { using ::testing::ContainsRegex; #if DCHECK_IS_ON() EXPECT_DEATH(PA_CHECK(5 == 7), ContainsRegex("Check failed.*5 == 7")); @@ -3670,7 +3685,7 @@ // Disabled because executing it causes Gtest to show a warning in the output, // which confuses the runner on some platforms, making the test report an // "UNKNOWN" status even though it succeeded. -TEST_F(PartitionAllocTest, DISABLED_PreforkHandler) { +TEST_P(PartitionAllocTest, DISABLED_PreforkHandler) { std::atomic<bool> please_stop; std::atomic<int> started_threads{0}; @@ -3719,7 +3734,7 @@ // !BUILDFLAG(IS_CHROMECAST) // Checks the bucket index logic. -TEST_F(PartitionAllocTest, GetIndex) { +TEST_P(PartitionAllocTest, GetIndex) { BucketIndexLookup lookup{}; for (size_t size = 0; size < kMaxBucketed; size++) { @@ -3737,7 +3752,7 @@ // Used to check alignment. If the compiler understands the annotations, the // zeroing in the constructor uses aligned SIMD instructions. -TEST_F(PartitionAllocTest, MallocFunctionAnnotations) { +TEST_P(PartitionAllocTest, MallocFunctionAnnotations) { struct TestStruct { uint64_t a = 0; uint64_t b = 0; @@ -3752,7 +3767,7 @@ } // Test that the ConfigurablePool works properly. -TEST_F(PartitionAllocTest, ConfigurablePool) { +TEST_P(PartitionAllocTest, ConfigurablePool) { EXPECT_FALSE(IsConfigurablePoolAvailable()); // The rest is only applicable to 64-bit mode @@ -3801,7 +3816,7 @@ #endif // defined(ARCH_CPU_64_BITS) } -TEST_F(PartitionAllocTest, EmptySlotSpanSizeIsCapped) { +TEST_P(PartitionAllocTest, EmptySlotSpanSizeIsCapped) { // Use another root, since the ones from the test harness disable the empty // slot span size cap. PartitionRoot<ThreadSafe> root; @@ -3860,7 +3875,7 @@ root.Free(ptr); } -TEST_F(PartitionAllocTest, IncreaseEmptySlotSpanRingSize) { +TEST_P(PartitionAllocTest, IncreaseEmptySlotSpanRingSize) { PartitionRoot<ThreadSafe> root({ PartitionOptions::AlignedAlloc::kDisallowed, PartitionOptions::ThreadCache::kDisabled, @@ -3930,14 +3945,14 @@ void* __real_malloc(size_t); } // extern "C" -TEST_F(PartitionAllocTest, HandleMixedAllocations) { +TEST_P(PartitionAllocTest, HandleMixedAllocations) { void* ptr = __real_malloc(12); // Should not crash, no test assertion. free(ptr); } #endif -TEST_F(PartitionAllocTest, SortFreelist) { +TEST_P(PartitionAllocTest, SortFreelist) { const size_t count = 100; const size_t allocation_size = 1; void* first_ptr = allocator.root()->Alloc(allocation_size, ""); @@ -3995,7 +4010,7 @@ #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && BUILDFLAG(IS_LINUX) && \ defined(ARCH_CPU_64_BITS) -TEST_F(PartitionAllocTest, CrashOnUnknownPointer) { +TEST_P(PartitionAllocTest, CrashOnUnknownPointer) { int not_a_heap_object = 42; EXPECT_DEATH( allocator.root()->Free(reinterpret_cast<void*>(¬_a_heap_object)), ""); @@ -4089,7 +4104,7 @@ // On macOS 10.11, allocations are made with PartitionAlloc, but the pointer // is incorrectly passed by CoreFoundation to the previous default zone, // causing crashes. This is intended to detect these issues coming back. -TEST_F(PartitionAllocTest, OpenCL) { +TEST_P(PartitionAllocTest, OpenCL) { // Skip on 10.11, as it fails there. // TODO(crbug.com/1268776): Make it pass on macOS 10.11. if (base::mac::IsOS10_11())
diff --git a/base/allocator/partition_allocator/partition_bucket_lookup.h b/base/allocator/partition_allocator/partition_bucket_lookup.h index 483cf55..83001bb 100644 --- a/base/allocator/partition_allocator/partition_bucket_lookup.h +++ b/base/allocator/partition_allocator/partition_bucket_lookup.h
@@ -104,6 +104,7 @@ // The class used to generate the bucket lookup table at compile-time. class BucketIndexLookup final { public: + ALWAYS_INLINE constexpr static size_t GetIndexForDenserBuckets(size_t size); ALWAYS_INLINE constexpr static size_t GetIndex(size_t size); constexpr BucketIndexLookup() { @@ -201,8 +202,53 @@ bucket_index_lookup_[((kBitsPerSizeT + 1) * kNumBucketsPerOrder) + 1]{}; }; +ALWAYS_INLINE constexpr size_t RoundUpToPowerOfTwo(size_t size) { + const size_t n = 1 << bits::Log2Ceiling(static_cast<uint32_t>(size)); + PA_DCHECK(size <= n); + return n; +} + +ALWAYS_INLINE constexpr size_t RoundUpSize(size_t size) { + const size_t next_power = RoundUpToPowerOfTwo(size); + const size_t prev_power = next_power >> 1; + PA_DCHECK(size <= next_power); + PA_DCHECK(prev_power < size); + if (size <= prev_power * 5 / 4) { + return prev_power * 5 / 4; + } else { + return next_power; + } +} + // static ALWAYS_INLINE constexpr size_t BucketIndexLookup::GetIndex(size_t size) { + // For any order 2^N, under the denser bucket distribution ("Distribution A"), + // we have 4 evenly distributed buckets: 2^N, 1.25*2^N, 1.5*2^N, and 1.75*2^N. + // These numbers represent the maximum size of an allocation that can go into + // a given bucket. + // + // Under the less dense bucket distribution ("Distribution B"), we only have + // 2 buckets for the same order 2^N: 2^N and 1.25*2^N. + // + // Everything that would be mapped to the last two buckets of an order under + // Distribution A is instead mapped to the first bucket of the next order + // under Distribution B. The following diagram shows roughly what this looks + // like for the order starting from 2^10, as an example. + // + // A: ... | 2^10 | 1.25*2^10 | 1.5*2^10 | 1.75*2^10 | 2^11 | ... + // B: ... | 2^10 | 1.25*2^10 | -------- | --------- | 2^11 | ... + // + // So, an allocation of size 1.4*2^10 would go into the 1.5*2^10 bucket under + // Distribution A, but to the 2^11 bucket under Distribution B. + if (1 << 8 < size && size < 1 << 19) + return BucketIndexLookup::GetIndexForDenserBuckets(RoundUpSize(size)); + else + return BucketIndexLookup::GetIndexForDenserBuckets(size); +} + +// static +ALWAYS_INLINE constexpr size_t BucketIndexLookup::GetIndexForDenserBuckets( + size_t size) { // This forces the bucket table to be constant-initialized and immediately // materialized in the binary. constexpr BucketIndexLookup lookup{};
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h index 193e066..9f6a766 100644 --- a/base/allocator/partition_allocator/partition_root.h +++ b/base/allocator/partition_allocator/partition_root.h
@@ -208,6 +208,7 @@ ScanMode scan_mode; bool with_thread_cache = false; + bool with_denser_bucket_distribution = false; bool allow_aligned_alloc; bool allow_cookie; @@ -450,7 +451,8 @@ static void DeleteForTesting(PartitionRoot* partition_root); void ResetBookkeepingForTesting(); - static uint16_t SizeToBucketIndex(size_t size); + static uint16_t SizeToBucketIndex(size_t size, + bool with_denser_bucket_distribution); ALWAYS_INLINE void FreeInSlotSpan(uintptr_t slot_start, SlotSpan* slot_span) EXCLUSIVE_LOCKS_REQUIRED(lock_); @@ -468,6 +470,21 @@ ALWAYS_INLINE void RawFreeWithThreadCache(uintptr_t slot_start, SlotSpan* slot_span); + // This is safe to do because we are switching to a bucket distribution with + // more buckets, meaning any allocations we have done before the switch are + // guaranteed to have a bucket under the new distribution when they are + // eventually deallocated. We do not need synchronization here or below. + void SwitchToDenserBucketDistribution() { + with_denser_bucket_distribution = true; + } + // Switching back to the less dense bucket distribution is ok during tests. + // At worst, we end up with deallocations that are sent to a bucket that we + // cannot allocate from, which will not cause problems besides wasting + // memory. + void ResetBucketDistributionForTesting() { + with_denser_bucket_distribution = false; + } + internal::ThreadCache* thread_cache_for_testing() const { return with_thread_cache ? internal::ThreadCache::Get() : nullptr; } @@ -1425,9 +1442,13 @@ // static template <bool thread_safe> -ALWAYS_INLINE uint16_t -PartitionRoot<thread_safe>::SizeToBucketIndex(size_t size) { - return internal::BucketIndexLookup::GetIndex(size); +ALWAYS_INLINE uint16_t PartitionRoot<thread_safe>::SizeToBucketIndex( + size_t size, + bool with_denser_bucket_distribution) { + if (with_denser_bucket_distribution) + return internal::BucketIndexLookup::GetIndexForDenserBuckets(size); + else + return internal::BucketIndexLookup::GetIndex(size); } template <bool thread_safe> @@ -1504,7 +1525,12 @@ size_t raw_size = AdjustSizeForExtrasAdd(requested_size); PA_CHECK(raw_size >= requested_size); // check for overflows - uint16_t bucket_index = SizeToBucketIndex(raw_size); + // We should only call |SizeToBucketIndex| at most once when allocating. + // Otherwise, we risk having |with_denser_bucket_distribution| changed + // underneath us (between calls to |SizeToBucketIndex| during the same call), + // which would result in an inconsistent state. + uint16_t bucket_index = + SizeToBucketIndex(raw_size, with_denser_bucket_distribution); size_t usable_size; bool is_already_zeroed = false; uintptr_t slot_start = 0; @@ -1791,7 +1817,8 @@ #else PA_DCHECK(PartitionRoot<thread_safe>::initialized); size = AdjustSizeForExtrasAdd(size); - auto& bucket = bucket_at(SizeToBucketIndex(size)); + auto& bucket = + bucket_at(SizeToBucketIndex(size, with_denser_bucket_distribution)); PA_DCHECK(!bucket.slot_size || bucket.slot_size >= size); PA_DCHECK(!(bucket.slot_size % kSmallestBucket));
diff --git a/base/allocator/partition_allocator/starscan/pcscan_unittest.cc b/base/allocator/partition_allocator/starscan/pcscan_unittest.cc index e0a4608a..7ab4035b 100644 --- a/base/allocator/partition_allocator/starscan/pcscan_unittest.cc +++ b/base/allocator/partition_allocator/starscan/pcscan_unittest.cc
@@ -74,6 +74,7 @@ PartitionOptions::UseConfigurablePool::kNo, }); allocator_.root()->UncapEmptySlotSpanMemoryForTesting(); + allocator_.root()->SwitchToDenserBucketDistribution(); PCScan::RegisterScannableRoot(allocator_.root()); } @@ -142,7 +143,8 @@ CHECK_EQ(0u, root.get_total_size_of_committed_pages()); const size_t raw_size = root.AdjustSizeForExtrasAdd(object_size); - const size_t bucket_index = root.SizeToBucketIndex(raw_size); + const size_t bucket_index = + root.SizeToBucketIndex(raw_size, root.with_denser_bucket_distribution); ThreadSafePartitionRoot::Bucket& bucket = root.buckets[bucket_index]; const size_t num_slots = (bucket.get_bytes_per_span()) / bucket.slot_size;
diff --git a/base/allocator/partition_allocator/thread_cache.cc b/base/allocator/partition_allocator/thread_cache.cc index 4f373f6..d8497014 100644 --- a/base/allocator/partition_allocator/thread_cache.cc +++ b/base/allocator/partition_allocator/thread_cache.cc
@@ -398,7 +398,7 @@ if (size > ThreadCache::kLargeSizeThreshold) size = ThreadCache::kLargeSizeThreshold; largest_active_bucket_index_ = - PartitionRoot<internal::ThreadSafe>::SizeToBucketIndex(size); + PartitionRoot<internal::ThreadSafe>::SizeToBucketIndex(size, false); PA_CHECK(largest_active_bucket_index_ < kBucketCount); ThreadCacheRegistry::Instance().SetLargestActiveBucketIndex( largest_active_bucket_index_); @@ -422,8 +422,8 @@ bool already_zeroed; auto* bucket = - root->buckets + - PartitionRoot<internal::ThreadSafe>::SizeToBucketIndex(raw_size); + root->buckets + PartitionRoot<internal::ThreadSafe>::SizeToBucketIndex( + raw_size, root->with_denser_bucket_distribution); uintptr_t buffer = root->RawAlloc(bucket, PartitionAllocZeroFill, raw_size, PartitionPageSize(), &usable_size, &already_zeroed);
diff --git a/base/allocator/partition_allocator/thread_cache_unittest.cc b/base/allocator/partition_allocator/thread_cache_unittest.cc index 9c369cf3..80f49e55 100644 --- a/base/allocator/partition_allocator/thread_cache_unittest.cc +++ b/base/allocator/partition_allocator/thread_cache_unittest.cc
@@ -95,7 +95,7 @@ } // namespace -class PartitionAllocThreadCacheTest : public ::testing::Test { +class PartitionAllocThreadCacheTest : public ::testing::TestWithParam<bool> { public: PartitionAllocThreadCacheTest() : root_(CreatePartitionRoot()) {} @@ -112,6 +112,11 @@ protected: void SetUp() override { + if (!GetParam()) + root_->SwitchToDenserBucketDistribution(); + else + root_->ResetBucketDistributionForTesting(); + #if defined(PA_HAS_64_BITS_POINTERS) // Another test can uninitialize the pools, so make sure they are // initialized. @@ -135,8 +140,17 @@ tcache->ResetForTesting(); } + void TearDown() override { + auto* tcache = root_->thread_cache_for_testing(); + ASSERT_TRUE(tcache); + tcache->Purge(); + + ASSERT_EQ(root_->get_total_size_of_allocated_bytes(), sizeof(ThreadCache)); + } + size_t FillThreadCacheAndReturnIndex(size_t size, size_t count = 1) { - uint16_t bucket_index = PartitionRoot<ThreadSafe>::SizeToBucketIndex(size); + uint16_t bucket_index = + PartitionRoot<ThreadSafe>::SizeToBucketIndex(size, GetParam()); std::vector<void*> allocated_data; for (size_t i = 0; i < count; ++i) { @@ -167,7 +181,11 @@ ThreadSafePartitionRoot* root_; }; -TEST_F(PartitionAllocThreadCacheTest, Simple) { +INSTANTIATE_TEST_SUITE_P(AlternateBucketDistribution, + PartitionAllocThreadCacheTest, + ::testing::Values(false, true)); + +TEST_P(PartitionAllocThreadCacheTest, Simple) { // There is a cache. auto* tcache = root_->thread_cache_for_testing(); EXPECT_TRUE(tcache); @@ -176,7 +194,8 @@ void* ptr = root_->Alloc(kSmallSize, ""); ASSERT_TRUE(ptr); - uint16_t index = PartitionRoot<ThreadSafe>::SizeToBucketIndex(kSmallSize); + uint16_t index = + PartitionRoot<ThreadSafe>::SizeToBucketIndex(kSmallSize, GetParam()); EXPECT_EQ(kFillCountForSmallBucket - 1, tcache->bucket_count_for_testing(index)); @@ -196,7 +215,7 @@ root_->Free(ptr2); } -TEST_F(PartitionAllocThreadCacheTest, InexactSizeMatch) { +TEST_P(PartitionAllocThreadCacheTest, InexactSizeMatch) { void* ptr = root_->Alloc(kSmallSize, ""); ASSERT_TRUE(ptr); @@ -204,7 +223,8 @@ auto* tcache = root_->thread_cache_for_testing(); EXPECT_TRUE(tcache); - uint16_t index = PartitionRoot<ThreadSafe>::SizeToBucketIndex(kSmallSize); + uint16_t index = + PartitionRoot<ThreadSafe>::SizeToBucketIndex(kSmallSize, GetParam()); EXPECT_EQ(kFillCountForSmallBucket - 1, tcache->bucket_count_for_testing(index)); @@ -218,9 +238,10 @@ // Allocated from the thread cache. EXPECT_EQ(kFillCountForSmallBucket - 1, tcache->bucket_count_for_testing(index)); + root_->Free(ptr2); } -TEST_F(PartitionAllocThreadCacheTest, MultipleObjectsCachedPerBucket) { +TEST_P(PartitionAllocThreadCacheTest, MultipleObjectsCachedPerBucket) { auto* tcache = root_->thread_cache_for_testing(); DeltaCounter batch_fill_counter{tcache->stats_.batch_fill_count}; size_t bucket_index = @@ -232,13 +253,13 @@ EXPECT_EQ(2u, batch_fill_counter.Delta()); } -TEST_F(PartitionAllocThreadCacheTest, ObjectsCachedCountIsLimited) { +TEST_P(PartitionAllocThreadCacheTest, ObjectsCachedCountIsLimited) { size_t bucket_index = FillThreadCacheAndReturnIndex(kMediumSize, 1000); auto* tcache = root_->thread_cache_for_testing(); EXPECT_LT(tcache->bucket_count_for_testing(bucket_index), 1000u); } -TEST_F(PartitionAllocThreadCacheTest, Purge) { +TEST_P(PartitionAllocThreadCacheTest, Purge) { size_t allocations = 10; size_t bucket_index = FillThreadCacheAndReturnIndex(kMediumSize, allocations); auto* tcache = root_->thread_cache_for_testing(); @@ -249,7 +270,7 @@ EXPECT_EQ(0u, tcache->bucket_count_for_testing(bucket_index)); } -TEST_F(PartitionAllocThreadCacheTest, NoCrossPartitionCache) { +TEST_P(PartitionAllocThreadCacheTest, NoCrossPartitionCache) { ThreadSafePartitionRoot root({ PartitionOptions::AlignedAlloc::kAllowed, PartitionOptions::ThreadCache::kDisabled, @@ -274,7 +295,7 @@ #if defined(PA_ENABLE_THREAD_CACHE_STATISTICS) // Required to record hits and // misses. -TEST_F(PartitionAllocThreadCacheTest, LargeAllocationsAreNotCached) { +TEST_P(PartitionAllocThreadCacheTest, LargeAllocationsAreNotCached) { auto* tcache = root_->thread_cache_for_testing(); DeltaCounter alloc_miss_counter{tcache->stats_.alloc_misses}; DeltaCounter alloc_miss_too_large_counter{ @@ -291,7 +312,7 @@ } #endif // defined(PA_ENABLE_THREAD_CACHE_STATISTICS) -TEST_F(PartitionAllocThreadCacheTest, DirectMappedAllocationsAreNotCached) { +TEST_P(PartitionAllocThreadCacheTest, DirectMappedAllocationsAreNotCached) { FillThreadCacheAndReturnIndex(1024 * 1024); // The line above would crash due to out of bounds access if this wasn't // properly handled. @@ -299,7 +320,7 @@ // This tests that Realloc properly handles bookkeeping, specifically the path // that reallocates in place. -TEST_F(PartitionAllocThreadCacheTest, DirectMappedReallocMetrics) { +TEST_P(PartitionAllocThreadCacheTest, DirectMappedReallocMetrics) { root_->ResetBookkeepingForTesting(); size_t expected_allocated_size = root_->get_total_size_of_allocated_bytes(); @@ -328,7 +349,7 @@ root_->Free(ptr); } -TEST_F(PartitionAllocThreadCacheTest, MultipleThreadCaches) { +TEST_P(PartitionAllocThreadCacheTest, MultipleThreadCaches) { FillThreadCacheAndReturnIndex(kMediumSize); auto* parent_thread_tcache = root_->thread_cache_for_testing(); ASSERT_TRUE(parent_thread_tcache); @@ -347,7 +368,7 @@ PlatformThread::Join(thread_handle); } -TEST_F(PartitionAllocThreadCacheTest, ThreadCacheReclaimedWhenThreadExits) { +TEST_P(PartitionAllocThreadCacheTest, ThreadCacheReclaimedWhenThreadExits) { // Make sure that there is always at least one object allocated in the test // bucket, so that the PartitionPage is no reclaimed. // @@ -390,7 +411,7 @@ #define MAYBE_ThreadCacheRegistry ThreadCacheRegistry #endif // BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && BUILDFLAG(IS_ANDROID) -TEST_F(PartitionAllocThreadCacheTest, MAYBE_ThreadCacheRegistry) { +TEST_P(PartitionAllocThreadCacheTest, MAYBE_ThreadCacheRegistry) { auto* parent_thread_tcache = root_->thread_cache_for_testing(); ASSERT_TRUE(parent_thread_tcache); @@ -421,7 +442,7 @@ } #if defined(PA_ENABLE_THREAD_CACHE_STATISTICS) -TEST_F(PartitionAllocThreadCacheTest, RecordStats) { +TEST_P(PartitionAllocThreadCacheTest, RecordStats) { auto* tcache = root_->thread_cache_for_testing(); DeltaCounter alloc_counter{tcache->stats_.alloc_count}; DeltaCounter alloc_hits_counter{tcache->stats_.alloc_hits}; @@ -469,7 +490,7 @@ EXPECT_EQ(sizeof(ThreadCache), stats.metadata_overhead); } -TEST_F(PartitionAllocThreadCacheTest, MultipleThreadCachesAccounting) { +TEST_P(PartitionAllocThreadCacheTest, MultipleThreadCachesAccounting) { FillThreadCacheAndReturnIndex(kMediumSize); uint64_t alloc_count = root_->thread_cache_for_testing()->stats_.alloc_count; @@ -503,7 +524,7 @@ #else #define MAYBE_PurgeAll PurgeAll #endif -TEST_F(PartitionAllocThreadCacheTest, MAYBE_PurgeAll) +TEST_P(PartitionAllocThreadCacheTest, MAYBE_PurgeAll) NO_THREAD_SAFETY_ANALYSIS { std::atomic<bool> other_thread_started{false}; std::atomic<bool> purge_called{false}; @@ -556,7 +577,7 @@ PlatformThread::Join(thread_handle); } -TEST_F(PartitionAllocThreadCacheTest, PeriodicPurge) { +TEST_P(PartitionAllocThreadCacheTest, PeriodicPurge) { auto& registry = ThreadCacheRegistry::Instance(); auto NextInterval = [®istry]() { return Microseconds(registry.GetPeriodicPurgeNextIntervalInMicroseconds()); @@ -604,7 +625,7 @@ } // Disabled due to flakiness: crbug.com/1220371 -TEST_F(PartitionAllocThreadCacheTest, +TEST_P(PartitionAllocThreadCacheTest, DISABLED_PeriodicPurgeSumsOverAllThreads) { auto& registry = ThreadCacheRegistry::Instance(); auto NextInterval = [®istry]() { @@ -669,7 +690,7 @@ #else #define MAYBE_DynamicCountPerBucket DynamicCountPerBucket #endif -TEST_F(PartitionAllocThreadCacheTest, MAYBE_DynamicCountPerBucket) { +TEST_P(PartitionAllocThreadCacheTest, MAYBE_DynamicCountPerBucket) { auto* tcache = root_->thread_cache_for_testing(); size_t bucket_index = FillThreadCacheAndReturnIndex(kMediumSize, kDefaultCountForMediumBucket); @@ -702,7 +723,7 @@ kDefaultCountForMediumBucket / 2); } -TEST_F(PartitionAllocThreadCacheTest, DynamicCountPerBucketClamping) { +TEST_P(PartitionAllocThreadCacheTest, DynamicCountPerBucketClamping) { auto* tcache = root_->thread_cache_for_testing(); ThreadCacheRegistry::Instance().SetThreadCacheMultiplier( @@ -736,7 +757,7 @@ #define MAYBE_DynamicCountPerBucketMultipleThreads \ DynamicCountPerBucketMultipleThreads #endif -TEST_F(PartitionAllocThreadCacheTest, +TEST_P(PartitionAllocThreadCacheTest, MAYBE_DynamicCountPerBucketMultipleThreads) { std::atomic<bool> other_thread_started{false}; std::atomic<bool> threshold_changed{false}; @@ -782,7 +803,7 @@ PlatformThread::Join(thread_handle); } -TEST_F(PartitionAllocThreadCacheTest, DynamicSizeThreshold) { +TEST_P(PartitionAllocThreadCacheTest, DynamicSizeThreshold) { auto* tcache = root_->thread_cache_for_testing(); DeltaCounter alloc_miss_counter{tcache->stats_.alloc_misses}; DeltaCounter alloc_miss_too_large_counter{ @@ -819,7 +840,7 @@ } // Disabled due to flakiness: crbug.com/1287811 -TEST_F(PartitionAllocThreadCacheTest, DISABLED_DynamicSizeThresholdPurge) { +TEST_P(PartitionAllocThreadCacheTest, DISABLED_DynamicSizeThresholdPurge) { auto* tcache = root_->thread_cache_for_testing(); DeltaCounter alloc_miss_counter{tcache->stats_.alloc_misses}; DeltaCounter alloc_miss_too_large_counter{ @@ -846,7 +867,7 @@ EXPECT_EQ(0u, tcache->buckets_[index].count); } -TEST_F(PartitionAllocThreadCacheTest, ClearFromTail) { +TEST_P(PartitionAllocThreadCacheTest, ClearFromTail) { auto count_items = [](ThreadCache* tcache, size_t index) { uint8_t count = 0; auto* head = tcache->buckets_[index].freelist_head; @@ -877,7 +898,7 @@ #else #define MAYBE_Bookkeeping Bookkeeping #endif -TEST_F(PartitionAllocThreadCacheTest, MAYBE_Bookkeeping) { +TEST_P(PartitionAllocThreadCacheTest, MAYBE_Bookkeeping) { void* arr[kFillCountForMediumBucket] = {}; auto* tcache = root_->thread_cache_for_testing(); @@ -885,7 +906,8 @@ PartitionPurgeDiscardUnusedSystemPages); root_->ResetBookkeepingForTesting(); - size_t tc_bucket_index = root_->SizeToBucketIndex(sizeof(ThreadCache)); + size_t tc_bucket_index = + root_->SizeToBucketIndex(sizeof(ThreadCache), GetParam()); auto* tc_bucket = &root_->buckets[tc_bucket_index]; size_t expected_allocated_size = tc_bucket->slot_size; // For the ThreadCache itself. @@ -900,7 +922,8 @@ void* ptr = root_->Alloc(kMediumSize, ""); - auto* medium_bucket = &root_->buckets[root_->SizeToBucketIndex(kMediumSize)]; + auto* medium_bucket = + &root_->buckets[root_->SizeToBucketIndex(kMediumSize, GetParam())]; size_t medium_alloc_size = medium_bucket->slot_size; expected_allocated_size += medium_alloc_size; expected_committed_size += @@ -934,6 +957,121 @@ for (auto*& el : arr) { root_->Free(el); } + EXPECT_EQ(root_->get_total_size_of_allocated_bytes(), + expected_allocated_size); + tcache->Purge(); + EXPECT_EQ(root_->get_total_size_of_allocated_bytes(), sizeof(ThreadCache)); +} + +TEST(AlternateBucketDistributionTest, SizeToIndex) { + // The first 12 buckets are the same as the default bucket index. + for (size_t i = 1 << 0; i < 1 << 8; i <<= 1) { + for (size_t offset = 0; offset < 4; offset++) { + size_t n = i * (4 + offset) / 4; + EXPECT_EQ(internal::BucketIndexLookup::GetIndex(n), + internal::BucketIndexLookup::GetIndexForDenserBuckets(n)); + } + } + + // The alternate bucket distribution is different in the middle values. + // + // For each order, the top two buckets are removed compared with the default + // distribution. Values that would be allocated in those two buckets are + // instead allocated in the next power of two bucket. + // + // The first two buckets (each power of two and the next bucket up) remain + // the same between the two bucket distributions. + size_t expected_index = 11; + for (size_t i = 1 << 8; i < 1 << 19; i <<= 1) { + // The first two buckets in the order should match up to the normal bucket + // distribution. + for (size_t offset = 0; offset < 2; offset++) { + size_t n = i * (4 + offset) / 4; + EXPECT_EQ(internal::BucketIndexLookup::GetIndex(n), + internal::BucketIndexLookup::GetIndexForDenserBuckets(n)); + EXPECT_EQ(internal::BucketIndexLookup::GetIndex(n), expected_index++); + } + // The last two buckets in the order are "rounded up" to the same bucket + // as the next power of two. + expected_index += 2; + for (size_t offset = 2; offset < 4; offset++) { + size_t n = i * (4 + offset) / 4; + // These two are rounded up in the alternate distribution, so we expect + // the bucket index to be larger than the bucket index for the same + // allocation under the default distribution. + EXPECT_GT(internal::BucketIndexLookup::GetIndex(n), + internal::BucketIndexLookup::GetIndexForDenserBuckets(n)); + // We expect both allocations in this loop to be rounded up to the next + // power of two bucket. + EXPECT_EQ(internal::BucketIndexLookup::GetIndex(n), expected_index); + } + } + + // The rest of the buckets all match up exactly with the existing + // bucket distribution. + for (size_t i = 1 << 19; i < kMaxBucketed; i <<= 1) { + for (size_t offset = 0; offset < 4; offset++) { + size_t n = i * (4 + offset) / 4; + EXPECT_EQ(internal::BucketIndexLookup::GetIndex(n), + internal::BucketIndexLookup::GetIndexForDenserBuckets(n)); + } + } +} + +// This test makes sure it's safe to switch to the alternate bucket distribution +// at runtime. This is intended to happen once, near the start of Chrome, +// once we have enabled features. +TEST(AlternateBucketDistributionTest, SwitchBeforeAlloc) { + auto* root = CreatePartitionRoot(); + root->SwitchToDenserBucketDistribution(); + constexpr size_t n = (1 << 12) * 3 / 2; + EXPECT_NE(internal::BucketIndexLookup::GetIndex(n), + internal::BucketIndexLookup::GetIndexForDenserBuckets(n)); + + void* ptr = root->Alloc(n, ""); + + root->ResetBucketDistributionForTesting(); + + root->Free(ptr); + + // Clean up + ThreadCache::SetLargestCachedSize(ThreadCache::kDefaultSizeThreshold); + SwapInProcessThreadCacheForTesting(root); + + ThreadSafePartitionRoot::DeleteForTesting(root); + + // Cleanup the global state so next test can recreate ThreadCache. + if (internal::ThreadCache::IsTombstone(internal::ThreadCache::Get())) + internal::ThreadCache::RemoveTombstoneForTesting(); +} + +// This test makes sure it's safe to switch to the alternate bucket distribution +// at runtime. This is intended to happen once, near the start of Chrome, +// once we have enabled features. +TEST(AlternateBucketDistributionTest, SwitchAfterAlloc) { + auto* root = CreatePartitionRoot(); + constexpr size_t n = (1 << 12) * 3 / 2; + EXPECT_NE(internal::BucketIndexLookup::GetIndex(n), + internal::BucketIndexLookup::GetIndexForDenserBuckets(n)); + + void* ptr = root->Alloc(n, ""); + + root->SwitchToDenserBucketDistribution(); + + void* ptr2 = root->Alloc(n, ""); + + root->Free(ptr2); + root->Free(ptr); + + // Clean up + ThreadCache::SetLargestCachedSize(ThreadCache::kDefaultSizeThreshold); + SwapInProcessThreadCacheForTesting(root); + + ThreadSafePartitionRoot::DeleteForTesting(root); + + // Cleanup the global state so next test can recreate ThreadCache. + if (internal::ThreadCache::IsTombstone(internal::ThreadCache::Get())) + internal::ThreadCache::RemoveTombstoneForTesting(); } } // namespace internal
diff --git a/base/ios/ios_util.h b/base/ios/ios_util.h index d3528dd..8332b51 100644 --- a/base/ios/ios_util.h +++ b/base/ios/ios_util.h
@@ -55,11 +55,6 @@ // supportsMultipleScenes] instead. BASE_EXPORT bool IsMultiwindowSupported(); -// Returns true if the iOS13 UIScene-based startup flow is supported, regardless -// of whether multiple windows are permitted. This always returns true if -// base::ios::IsMultiwindowSupported() returns true. -BASE_EXPORT bool IsSceneStartupSupported(); - // Returns true iff multiple windows can be opened, i.e. when the multiwindow // build flag is on, the device is running on iOS 13+ and it's a compatible // iPad.
diff --git a/base/ios/ios_util.mm b/base/ios/ios_util.mm index e3f864a..34a8dab3 100644 --- a/base/ios/ios_util.mm +++ b/base/ios/ios_util.mm
@@ -111,16 +111,6 @@ return cached_value; } -bool IsSceneStartupSupported() { - static bool cached_value = false; - static dispatch_once_t once_token = 0; - dispatch_once(&once_token, ^{ - NSDictionary* scene_api_manifest = SceneAPIManifestFromInfoPlist(); - cached_value = scene_api_manifest != nil; - }); - return cached_value; -} - bool IsMultipleScenesSupported() { if (@available(iOS 13, *)) { return UIApplication.sharedApplication.supportsMultipleScenes;
diff --git a/build/android/fast_local_dev_server.py b/build/android/fast_local_dev_server.py index a35c5007..a1e0d79cd 100755 --- a/build/android/fast_local_dev_server.py +++ b/build/android/fast_local_dev_server.py
@@ -281,6 +281,7 @@ tasks: Dict[Tuple[str, str], Task] = {} task_manager = TaskManager() try: + log(f'READY for tasks...') for data in _listen_for_request_data(sock): task = Task(name=data['name'], cwd=data['cwd'], @@ -303,7 +304,23 @@ def main(): parser = argparse.ArgumentParser(description=__doc__) - parser.parse_args() + parser.add_argument( + '--fail-if-not-running', + action='store_true', + help='Used by GN to fail fast if the build server is not running.') + args = parser.parse_args() + if args.fail_if_not_running: + with socket.socket(socket.AF_UNIX) as sock: + try: + sock.connect(server_utils.SOCKET_ADDRESS) + except socket.error: + print('Build server is not running and ' + 'android_static_analysis="build_server" is set.\nPlease run ' + 'this command in a separate terminal:\n\n' + '$ build/android/fast_local_dev_server.py\n') + return 1 + else: + return 0 with socket.socket(socket.AF_UNIX) as sock: sock.bind(server_utils.SOCKET_ADDRESS) sock.listen()
diff --git a/build/android/gyp/bytecode_processor.py b/build/android/gyp/bytecode_processor.py index d77f159..049e26d 100755 --- a/build/android/gyp/bytecode_processor.py +++ b/build/android/gyp/bytecode_processor.py
@@ -21,6 +21,9 @@ argv = build_utils.ExpandFileArgs(argv[1:]) parser = argparse.ArgumentParser() parser.add_argument('--target-name', help='Fully qualified GN target name.') + parser.add_argument('--use-build-server', + action='store_true', + help='Always use the build server.') parser.add_argument('--script', required=True, help='Path to the java binary wrapper script.') parser.add_argument('--gn-target', required=True) @@ -40,7 +43,8 @@ if server_utils.MaybeRunCommand(name=args.target_name, argv=sys.argv, - stamp_file=args.stamp): + stamp_file=args.stamp, + force=args.use_build_server): return args.sdk_classpath_jars = build_utils.ParseGnList(args.sdk_classpath_jars)
diff --git a/build/android/gyp/compile_java.py b/build/android/gyp/compile_java.py index 842ca18..6be0eed 100755 --- a/build/android/gyp/compile_java.py +++ b/build/android/gyp/compile_java.py
@@ -586,6 +586,9 @@ parser.add_option('--skip-build-server', action='store_true', help='Avoid using the build server.') + parser.add_option('--use-build-server', + action='store_true', + help='Always use the build server.') parser.add_option( '--java-srcjars', action='append', @@ -694,7 +697,8 @@ if (options.enable_errorprone and not options.skip_build_server and server_utils.MaybeRunCommand(name=options.target_name, argv=sys.argv, - stamp_file=options.jar_path)): + stamp_file=options.jar_path, + force=options.use_build_server)): return javac_cmd = []
diff --git a/build/android/gyp/lint.py b/build/android/gyp/lint.py index 5a336a9..6bf2fec 100755 --- a/build/android/gyp/lint.py +++ b/build/android/gyp/lint.py
@@ -377,6 +377,9 @@ parser.add_argument('--skip-build-server', action='store_true', help='Avoid using the build server.') + parser.add_argument('--use-build-server', + action='store_true', + help='Always use the build server.') parser.add_argument('--lint-binary-path', required=True, help='Path to lint executable.') @@ -457,8 +460,10 @@ # Avoid parallelizing cache creation since lint runs without the cache defeat # the purpose of creating the cache in the first place. if (not args.create_cache and not args.skip_build_server - and server_utils.MaybeRunCommand( - name=args.target_name, argv=sys.argv, stamp_file=args.stamp)): + and server_utils.MaybeRunCommand(name=args.target_name, + argv=sys.argv, + stamp_file=args.stamp, + force=args.use_build_server)): return sources = []
diff --git a/build/android/gyp/turbine.py b/build/android/gyp/turbine.py index 074550e..247924b 100755 --- a/build/android/gyp/turbine.py +++ b/build/android/gyp/turbine.py
@@ -14,6 +14,7 @@ import javac_output_processor from util import build_utils +from util import server_utils def ProcessJavacOutput(output, target_name):
diff --git a/build/android/gyp/turbine.pydeps b/build/android/gyp/turbine.pydeps index 8f20e8b..9e82b0cf 100644 --- a/build/android/gyp/turbine.pydeps +++ b/build/android/gyp/turbine.pydeps
@@ -24,3 +24,4 @@ turbine.py util/__init__.py util/build_utils.py +util/server_utils.py
diff --git a/build/android/gyp/util/server_utils.py b/build/android/gyp/util/server_utils.py index e050ef6..852f04b 100644 --- a/build/android/gyp/util/server_utils.py +++ b/build/android/gyp/util/server_utils.py
@@ -13,7 +13,7 @@ BUILD_SERVER_ENV_VARIABLE = 'INVOKED_BY_BUILD_SERVER' -def MaybeRunCommand(name, argv, stamp_file): +def MaybeRunCommand(name, argv, stamp_file, force): """Returns True if the command was successfully sent to the build server.""" # When the build server runs a command, it sets this environment variable. @@ -36,6 +36,12 @@ # [Errno 111] Connection refused. Either the server has not been started # or the server is not currently accepting new connections. if e.errno == 111: + if force: + raise RuntimeError( + '\n\nBuild server is not running and ' + 'android_static_analysis="build_server" is set.\nPlease run ' + 'this command in a separate terminal:\n\n' + '$ build/android/fast_local_dev_server.py\n\n') from None return False raise e return True
diff --git a/build/config/android/config.gni b/build/config/android/config.gni index 69ba216..5fa6099 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni
@@ -51,11 +51,22 @@ # not explicitly set it. default_min_sdk_version = 23 - # [WIP] Allows devs to achieve much faster edit-build-install cycles. - # Currently only works for ChromeModern apks due to incremental install. - # This needs to be in a separate declare_args as it determines some of the - # args in the main declare_args block below. - android_fast_local_dev = false + # Static analysis can be either "on" or "off" or "build_server". This + # controls how android lint, error-prone, bytecode checks are run. This + # needs to be in a separate declare_args as it determines some of the args + # in the main declare_args block below. + # "on" is the default. + # "off" avoids running any static analysis. This is the default for + # official builds to reduce build times. Failures in static analysis + # would have been caught by other bots. + # "build_server" ensures that fast_local_dev_server.py is running and + # offloads analysis tasks to it to be run after the build completes. + # This is the recommended setting for local development. + if (is_official_build) { + android_static_analysis = "off" + } else { + android_static_analysis = "on" + } } declare_args() { @@ -211,24 +222,18 @@ debuggable_apks = !is_official_build # Set to false to disable the Errorprone compiler. - # Defaults to false for official builds to reduce build times. - # Static analysis failures should have been already caught by normal bots. - # Disabled when fast_local_dev is turned on. - use_errorprone_java_compiler = !is_official_build && !android_fast_local_dev + use_errorprone_java_compiler = android_static_analysis != "off" # Build incremental targets whenever possible. # See //build/android/incremental_install/README.md for more details. - incremental_install = android_fast_local_dev + incremental_install = false # When true, updates all android_aar_prebuilt() .info files during gn gen. # Refer to android_aar_prebuilt() for more details. update_android_aar_prebuilts = false - # Turns off android lint. Useful for prototyping or for faster local builds. - # Defaults to true for official builds to reduce build times. - # Static analysis failures should have been already caught by normal bots. - # Disabled when fast_local_dev is turned on. - disable_android_lint = is_official_build || android_fast_local_dev + # Turns off android lint. + disable_android_lint = android_static_analysis == "off" # Location of aapt2 used for app bundles. For now, a more recent version # than the one distributed with the Android SDK is required.
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni index 0ee70903..5027a004 100644 --- a/build/config/android/internal_rules.gni +++ b/build/config/android/internal_rules.gni
@@ -1097,6 +1097,8 @@ if (defined(invoker.skip_build_server) && invoker.skip_build_server) { # Nocompile tests need lint to fail through ninja. args += [ "--skip-build-server" ] + } else if (android_static_analysis == "build_server") { + args += [ "--use-build-server" ] } if (defined(invoker.lint_suppressions_file)) { @@ -1948,6 +1950,9 @@ "--full-classpath-jars=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)", "--full-classpath-gn-targets=@FileArg($_rebased_build_config:deps_info:javac_full_classpath_targets)", ] + if (android_static_analysis == "build_server") { + args += [ "--use-build-server" ] + } if (invoker.requires_android) { args += [ "--sdk-classpath-jars=@FileArg($_rebased_build_config:android:sdk_jars)" ] } @@ -3120,6 +3125,8 @@ if (defined(invoker.skip_build_server) && invoker.skip_build_server) { # Nocompile tests need lint to fail through ninja. args += [ "--skip-build-server" ] + } else if (android_static_analysis == "build_server") { + args += [ "--use-build-server" ] } foreach(e, _processor_args) { @@ -3891,8 +3898,9 @@ } if (_build_host_jar || _build_device_jar) { - _enable_bytecode_checks = !defined(invoker.enable_bytecode_checks) || - invoker.enable_bytecode_checks + _enable_bytecode_checks = + (!defined(invoker.enable_bytecode_checks) || + invoker.enable_bytecode_checks) && android_static_analysis != "off" if (_enable_bytecode_checks) { _bytecode_checks_target = "${target_name}__validate_classpath" bytecode_processor(_bytecode_checks_target) {
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index ae7d047..86881561 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -7.20220201.0.1 +7.20220201.2.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index ae7d047..a5c06ad3 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -7.20220201.0.1 +7.20220201.1.1
diff --git a/build/rust/rustc_wrapper.py b/build/rust/rustc_wrapper.py index 328f011b..9f94006 100755 --- a/build/rust/rustc_wrapper.py +++ b/build/rust/rustc_wrapper.py
@@ -110,7 +110,9 @@ env[k] = v fixed_env_vars.append(k) - subprocess.run([args.rustc, *rustc_args], env=env, check=True) + r = subprocess.run([args.rustc, *rustc_args], env=env, check=False) + if r.returncode != 0: + sys.exit(r.returncode) # Now edit the depfile produced if args.depfile is not None:
diff --git a/build_overrides/pdfium.gni b/build_overrides/pdfium.gni index 9ece390..f5759bd 100644 --- a/build_overrides/pdfium.gni +++ b/build_overrides/pdfium.gni
@@ -17,7 +17,3 @@ # Disable use of Skia backend, paths only (experimental) pdf_use_skia_paths_override = false - -# TODO(crbug.com/1188795) Remove when this is no longer required in PDFium. -# Enable experimental win32 GDI APIs. -pdf_use_win32_gdi_override = false
diff --git a/chrome/VERSION b/chrome/VERSION index 3ebe92ff..5477145 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=100 MINOR=0 -BUILD=4864 +BUILD=4865 PATCH=0
diff --git a/chrome/android/features/autofill_assistant/BUILD.gn b/chrome/android/features/autofill_assistant/BUILD.gn index 9ee5e6c6..c54f7e1 100644 --- a/chrome/android/features/autofill_assistant/BUILD.gn +++ b/chrome/android/features/autofill_assistant/BUILD.gn
@@ -172,7 +172,6 @@ "java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantTermsSection.java", "java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantVerticalExpander.java", "java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantVerticalExpanderAccordion.java", - "java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AutofillUtilChrome.java", "java/src/org/chromium/chrome/browser/autofill_assistant/user_data/additional_sections/AssistantAdditionalSection.java", "java/src/org/chromium/chrome/browser/autofill_assistant/user_data/additional_sections/AssistantAdditionalSectionContainer.java", "java/src/org/chromium/chrome/browser/autofill_assistant/user_data/additional_sections/AssistantAdditionalSectionFactory.java",
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantBottomBarCoordinator.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantBottomBarCoordinator.java index cf93514..5472455 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantBottomBarCoordinator.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantBottomBarCoordinator.java
@@ -101,7 +101,8 @@ @Nullable AssistantTabObscuringUtil tabObscuringUtil, @NonNull AssistantBrowserControlsFactory browserControlsFactory, AccessibilityUtil accessibilityUtil, AssistantInfoPageUtil infoPageUtil, - @Nullable AssistantProfileImageUtil profileImageUtil) { + @Nullable AssistantProfileImageUtil profileImageUtil, + AssistantEditorFactory editorFactory) { mAccessibilityUtil = accessibilityUtil; mModel = model; mOverlayCoordinator = overlayCoordinator; @@ -145,8 +146,8 @@ new AssistantDetailsCoordinator(activity, infoPageUtil, model.getDetailsModel(), ImageFetcherFactory.createImageFetcher(ImageFetcherConfig.DISK_CACHE_ONLY, AutofillAssistantUiController.getProfile().getProfileKey())); - mCollectUserDataCoordinator = - new AssistantCollectUserDataCoordinator(activity, model.getCollectUserDataModel()); + mCollectUserDataCoordinator = new AssistantCollectUserDataCoordinator( + activity, model.getCollectUserDataModel(), editorFactory); AssistantFormCoordinator formCoordinator = new AssistantFormCoordinator(activity, model.getFormModel()); mActionsCoordinator =
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantCoordinator.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantCoordinator.java index 78a731b..bf0599a 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantCoordinator.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantCoordinator.java
@@ -35,7 +35,8 @@ @NonNull AssistantBrowserControlsFactory browserControlsFactory, @NonNull ApplicationViewportInsetSupplier applicationBottomInsetProvider, AccessibilityUtil accessibilityUtil, AssistantInfoPageUtil infoPageUtil, - @Nullable AssistantProfileImageUtil profileImageUtil) { + @Nullable AssistantProfileImageUtil profileImageUtil, + AssistantEditorFactory editorFactory) { if (overlayCoordinator != null) { mModel = new AssistantModel(overlayCoordinator.getModel()); mOverlayCoordinator = overlayCoordinator; @@ -46,9 +47,10 @@ accessibilityUtil); } - mBottomBarCoordinator = new AssistantBottomBarCoordinator(activity, mModel, - mOverlayCoordinator, controller, applicationBottomInsetProvider, tabObscuringUtil, - browserControlsFactory, accessibilityUtil, infoPageUtil, profileImageUtil); + mBottomBarCoordinator = + new AssistantBottomBarCoordinator(activity, mModel, mOverlayCoordinator, controller, + applicationBottomInsetProvider, tabObscuringUtil, browserControlsFactory, + accessibilityUtil, infoPageUtil, profileImageUtil, editorFactory); mKeyboardCoordinator = new AssistantKeyboardCoordinator(activity, keyboardDelegate, rootView, mModel, keyboardCoordinatorDelegate, controller); }
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java index 6e0a469..8d3a092 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java
@@ -103,7 +103,8 @@ dependencies.createBrowserControlsFactory(), dependencies.getBottomInsetProvider(), dependencies.getAccessibilityUtil(), dependencies.createInfoPageUtil(), dependencies.createProfileImageUtilOrNull( - mActivity, R.dimen.autofill_assistant_profile_size)); + mActivity, R.dimen.autofill_assistant_profile_size), + dependencies.createEditorFactory()); mTabChangeObserverDestroyer = dependencies.observeTabChanges(new AssistantTabChangeObserver() {
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java index c1f63c6ca..3eb8ecc 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
@@ -9,31 +9,21 @@ import android.view.ViewGroup; import org.chromium.base.task.PostTask; -import org.chromium.chrome.browser.autofill.prefeditor.EditorDialog; -import org.chromium.chrome.browser.autofill.settings.AddressEditor; -import org.chromium.chrome.browser.autofill.settings.CardEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditorFactory; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.AddressModel; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.ContactModel; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.PaymentInstrumentModel; import org.chromium.chrome.browser.autofill_assistant.generic_ui.AssistantValue; -import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.AddressModel; -import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.ContactModel; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.LoginChoiceModel; -import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.PaymentInstrumentModel; import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantAdditionalSection.Delegate; import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantAdditionalSectionContainer; -import org.chromium.chrome.browser.payments.ContactEditor; -import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.components.payments.BasicCardUtils; -import org.chromium.components.payments.MethodStrings; -import org.chromium.components.version_info.VersionInfo; import org.chromium.content_public.browser.UiThreadTaskTraits; import org.chromium.content_public.browser.WebContents; -import org.chromium.payments.mojom.PaymentMethodData; import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import java.util.Map; /** * This class is responsible for pushing updates to the Autofill Assistant UI for requesting user @@ -64,6 +54,7 @@ private final ViewGroup mGenericUserInterfaceContainerAppended; private final Object mDividerTag; private final Activity mActivity; + private final AssistantEditorFactory mEditorFactory; public ViewHolder(View rootView, AssistantVerticalExpanderAccordion accordion, int sectionPadding, AssistantLoginSection loginSection, @@ -76,7 +67,7 @@ AssistantAdditionalSectionContainer appendedSections, ViewGroup genericUserInterfaceContainerPrepended, ViewGroup genericUserInterfaceContainerAppended, Object dividerTag, - Activity activity) { + Activity activity, AssistantEditorFactory editorFactory) { mRootView = rootView; mPaymentRequestExpanderAccordion = accordion; mSectionToSectionPadding = sectionPadding; @@ -93,6 +84,7 @@ mGenericUserInterfaceContainerAppended = genericUserInterfaceContainerAppended; mDividerTag = dividerTag; mActivity = activity; + mEditorFactory = editorFactory; } } @@ -204,17 +196,10 @@ */ private boolean updateSectionContents( AssistantCollectUserDataModel model, PropertyKey propertyKey, ViewHolder view) { - if (propertyKey == AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS - || propertyKey == AssistantCollectUserDataModel.WEB_CONTENTS) { + if (propertyKey == AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS) { if (model.get(AssistantCollectUserDataModel.REQUEST_PAYMENT)) { - List<PaymentInstrumentModel> paymentInstruments; - if (model.get(AssistantCollectUserDataModel.WEB_CONTENTS) == null) { - paymentInstruments = Collections.emptyList(); - } else { - paymentInstruments = - model.get(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS); - } - view.mPaymentMethodSection.onAvailablePaymentMethodsChanged(paymentInstruments); + view.mPaymentMethodSection.onAvailablePaymentMethodsChanged( + model.get(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS)); } return true; } else if (propertyKey == AssistantCollectUserDataModel.AVAILABLE_CONTACTS) { @@ -521,12 +506,12 @@ */ private boolean updateEditors( AssistantCollectUserDataModel model, PropertyKey propertyKey, ViewHolder view) { - if ((propertyKey != AssistantCollectUserDataModel.WEB_CONTENTS) - && (propertyKey != AssistantCollectUserDataModel.REQUEST_NAME) - && (propertyKey != AssistantCollectUserDataModel.REQUEST_EMAIL) - && (propertyKey != AssistantCollectUserDataModel.REQUEST_PHONE) - && (propertyKey != AssistantCollectUserDataModel.SUPPORTED_BASIC_CARD_NETWORKS) - && (propertyKey != AssistantCollectUserDataModel.SHOULD_STORE_USER_DATA_CHANGES)) { + if (propertyKey != AssistantCollectUserDataModel.WEB_CONTENTS + && propertyKey != AssistantCollectUserDataModel.REQUEST_NAME + && propertyKey != AssistantCollectUserDataModel.REQUEST_EMAIL + && propertyKey != AssistantCollectUserDataModel.REQUEST_PHONE + && propertyKey != AssistantCollectUserDataModel.SUPPORTED_BASIC_CARD_NETWORKS + && propertyKey != AssistantCollectUserDataModel.SHOULD_STORE_USER_DATA_CHANGES) { return false; } @@ -535,74 +520,26 @@ view.mContactDetailsSection.setEditor(null); view.mPaymentMethodSection.setEditor(null); view.mShippingAddressSection.setEditor(null); - view.mPaymentMethodSection.setWebContents(null); return true; } boolean shouldStoreChanges = model.get(AssistantCollectUserDataModel.SHOULD_STORE_USER_DATA_CHANGES); - Profile profile = Profile.fromWebContents(webContents); if (shouldShowContactDetails(model)) { - ContactEditor contactEditor = - new ContactEditor(model.get(AssistantCollectUserDataModel.REQUEST_NAME), - model.get(AssistantCollectUserDataModel.REQUEST_PHONE), - model.get(AssistantCollectUserDataModel.REQUEST_EMAIL), - /* saveToDisk= */ shouldStoreChanges); - contactEditor.setEditorDialog(new EditorDialog(view.mActivity, - /*deleteRunnable =*/null, profile)); - view.mContactDetailsSection.setEditor(contactEditor); + view.mContactDetailsSection.setEditor(view.mEditorFactory.createContactEditor( + webContents, view.mActivity, + model.get(AssistantCollectUserDataModel.REQUEST_NAME), + model.get(AssistantCollectUserDataModel.REQUEST_PHONE), + model.get(AssistantCollectUserDataModel.REQUEST_EMAIL), shouldStoreChanges)); } + view.mShippingAddressSection.setEditor(view.mEditorFactory.createAddressEditor( + webContents, view.mActivity, shouldStoreChanges)); + view.mPaymentMethodSection.setEditor( + view.mEditorFactory.createPaymentInstrumentEditor(webContents, view.mActivity, + model.get(AssistantCollectUserDataModel.SUPPORTED_BASIC_CARD_NETWORKS), + shouldStoreChanges)); - AddressEditor addressEditor = new AddressEditor(AddressEditor.Purpose.AUTOFILL_ASSISTANT, - /* saveToDisk= */ shouldStoreChanges); - addressEditor.setEditorDialog(new EditorDialog(view.mActivity, - /* deleteRunnable= */ null, profile)); - - CardEditor cardEditor = new CardEditor(webContents, addressEditor, - /* includeOrgLabel= */ false, /* saveToDisk= */ shouldStoreChanges); - List<String> supportedCardNetworks = - model.get(AssistantCollectUserDataModel.SUPPORTED_BASIC_CARD_NETWORKS); - if (supportedCardNetworks != null) { - cardEditor.addAcceptedPaymentMethodIfRecognized( - getPaymentMethodDataFromNetworks(supportedCardNetworks)); - } - - EditorDialog cardEditorDialog = new EditorDialog(view.mActivity, - /*deleteRunnable =*/null, profile); - if (VersionInfo.isBetaBuild() || VersionInfo.isStableBuild()) { - cardEditorDialog.disableScreenshots(); - } - cardEditor.setEditorDialog(cardEditorDialog); - - view.mShippingAddressSection.setEditor(addressEditor); - view.mPaymentMethodSection.setEditor(cardEditor); - view.mPaymentMethodSection.setWebContents(webContents); return true; } - - private PaymentMethodData getPaymentMethodDataFromNetworks(List<String> supportedCardNetworks) { - // Only enable 'basic-card' payment method. - PaymentMethodData methodData = new PaymentMethodData(); - methodData.supportedMethod = MethodStrings.BASIC_CARD; - - // Apply basic-card filter if specified - if (supportedCardNetworks != null && supportedCardNetworks.size() > 0) { - ArrayList<Integer> filteredNetworks = new ArrayList<>(); - Map<String, Integer> networks = BasicCardUtils.getNetworkIdentifiers(); - for (String network : supportedCardNetworks) { - assert networks.containsKey(network); - if (networks.containsKey(network)) { - filteredNetworks.add(networks.get(network)); - } - } - - methodData.supportedNetworks = new int[filteredNetworks.size()]; - for (int i = 0; i < filteredNetworks.size(); ++i) { - methodData.supportedNetworks[i] = filteredNetworks.get(i); - } - } - - return methodData; - } }
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataCoordinator.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataCoordinator.java index 9cf7b2a8..e3954965 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataCoordinator.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataCoordinator.java
@@ -10,6 +10,7 @@ import android.widget.LinearLayout; import org.chromium.chrome.autofill_assistant.R; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditorFactory; import org.chromium.chrome.browser.autofill_assistant.AssistantTagsForTesting; import org.chromium.chrome.browser.autofill_assistant.LayoutUtils; import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantAdditionalSectionContainer; @@ -27,8 +28,8 @@ private final AssistantCollectUserDataModel mModel; private AssistantCollectUserDataBinder.ViewHolder mViewHolder; - public AssistantCollectUserDataCoordinator( - Activity activity, AssistantCollectUserDataModel model) { + public AssistantCollectUserDataCoordinator(Activity activity, + AssistantCollectUserDataModel model, AssistantEditorFactory editorFactory) { mActivity = activity; mModel = model; int sectionToSectionPadding = activity.getResources().getDimensionPixelSize( @@ -115,7 +116,7 @@ contactDetailsSection, paymentMethodSection, shippingAddressSection, termsSection, termsAsCheckboxSection, infoSection, prependedSections, appendedSections, genericUserInterfaceContainerPrepended, genericUserInterfaceContainerAppended, - DIVIDER_TAG, mActivity); + DIVIDER_TAG, mActivity, editorFactory); AssistantCollectUserDataBinder binder = new AssistantCollectUserDataBinder(); PropertyModelChangeProcessor.create(model, mViewHolder, binder);
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataDelegate.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataDelegate.java index 4a8c1a0..e00ade3 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataDelegate.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataDelegate.java
@@ -6,6 +6,7 @@ import androidx.annotation.Nullable; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel; import org.chromium.chrome.browser.autofill_assistant.generic_ui.AssistantValue; /** @@ -16,16 +17,16 @@ */ public interface AssistantCollectUserDataDelegate { /** The currently selected contact has changed. */ - void onContactInfoChanged(@Nullable AssistantCollectUserDataModel.ContactModel contactModel, + void onContactInfoChanged(@Nullable AssistantOptionModel.ContactModel contactModel, @AssistantUserDataEventType int eventType); /** The currently selected shipping address has changed. */ - void onShippingAddressChanged(@Nullable AssistantCollectUserDataModel.AddressModel addressModel, + void onShippingAddressChanged(@Nullable AssistantOptionModel.AddressModel addressModel, @AssistantUserDataEventType int eventType); /** The currently selected payment method has changed. */ void onPaymentMethodChanged( - @Nullable AssistantCollectUserDataModel.PaymentInstrumentModel paymentInstrumentModel, + @Nullable AssistantOptionModel.PaymentInstrumentModel paymentInstrumentModel, @AssistantUserDataEventType int eventType); /** The currently selected terms & conditions state has changed. */
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java index 546348b..c7d4839 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java
@@ -14,6 +14,10 @@ import org.chromium.chrome.browser.autofill_assistant.AssistantAutofillCreditCard; import org.chromium.chrome.browser.autofill_assistant.AssistantAutofillProfile; import org.chromium.chrome.browser.autofill_assistant.AssistantInfoPopup; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.AddressModel; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.ContactModel; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.PaymentInstrumentModel; import org.chromium.chrome.browser.autofill_assistant.AssistantPaymentInstrument; import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantAdditionalSectionFactory; import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantPopupListSection; @@ -42,75 +46,8 @@ public int mMaxNumberLines; } - /** - * Model wrapper for a data item to contain errors. - * - * @param <T> The type that an instance of this class is created for, such as - * {@link AssistantAutofillProfile}, {@link AssistantPaymentInstrument}, etc. - */ - public static class OptionModel<T> { - public T mOption; - public List<String> mErrors; - - public OptionModel(T option, List<String> errors) { - this.mOption = option; - this.mErrors = errors; - } - - public OptionModel(T option) { - this(option, new ArrayList<>()); - } - - boolean isComplete() { - return mErrors.isEmpty(); - } - } - - /** Model wrapper for an {@code AssistantAutofillProfile}. */ - public static class ContactModel extends OptionModel<AssistantAutofillProfile> { - private final boolean mCanEdit; - - public ContactModel( - AssistantAutofillProfile contact, List<String> errors, boolean canEdit) { - super(contact, errors); - mCanEdit = canEdit; - } - - public ContactModel(AssistantAutofillProfile contact) { - super(contact); - mCanEdit = true; - } - - public boolean canEdit() { - return mCanEdit; - } - } - - /** Model wrapper for an {@code AssistantAutofillProfile}. */ - public static class AddressModel extends OptionModel<AssistantAutofillProfile> { - public AddressModel(AssistantAutofillProfile address, List<String> errors) { - super(address, errors); - } - - public AddressModel(AssistantAutofillProfile address) { - super(address); - } - } - - /** Model wrapper for an {@code AssistantPaymentInstrument}. */ - public static class PaymentInstrumentModel extends OptionModel<AssistantPaymentInstrument> { - public PaymentInstrumentModel( - AssistantPaymentInstrument paymentInstrument, List<String> errors) { - super(paymentInstrument, errors); - } - - public PaymentInstrumentModel(AssistantPaymentInstrument paymentInstrument) { - super(paymentInstrument); - } - } - /** Model wrapper for an {@code AssistantLoginChoice}. */ - public static class LoginChoiceModel extends OptionModel<AssistantLoginChoice> { + public static class LoginChoiceModel extends AssistantOptionModel<AssistantLoginChoice> { public LoginChoiceModel(AssistantLoginChoice loginChoice) { super(loginChoice); } @@ -260,6 +197,7 @@ set(REQUEST_LOGIN_CHOICE, false); set(PREPENDED_SECTIONS, Collections.emptyList()); set(APPENDED_SECTIONS, Collections.emptyList()); + set(SUPPORTED_BASIC_CARD_NETWORKS, Collections.emptyList()); set(AVAILABLE_PAYMENT_INSTRUMENTS, Collections.emptyList()); set(AVAILABLE_CONTACTS, Collections.emptyList()); set(AVAILABLE_SHIPPING_ADDRESSES, Collections.emptyList());
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataNativeDelegate.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataNativeDelegate.java index fa882b8c..0a56605 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataNativeDelegate.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataNativeDelegate.java
@@ -11,6 +11,7 @@ import org.chromium.base.annotations.NativeMethods; import org.chromium.chrome.browser.autofill_assistant.AssistantAutofillCreditCard; import org.chromium.chrome.browser.autofill_assistant.AssistantAutofillProfile; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel; import org.chromium.chrome.browser.autofill_assistant.generic_ui.AssistantValue; /** Delegate for the Collect user data UI which forwards events to a native counterpart. */ @@ -29,8 +30,7 @@ } @Override - public void onContactInfoChanged( - @Nullable AssistantCollectUserDataModel.ContactModel contactModel, + public void onContactInfoChanged(@Nullable AssistantOptionModel.ContactModel contactModel, @AssistantUserDataEventType int eventType) { if (mNativeAssistantCollectUserDataDelegate != 0) { AssistantCollectUserDataNativeDelegateJni.get().onContactInfoChanged( @@ -41,8 +41,7 @@ } @Override - public void onShippingAddressChanged( - @Nullable AssistantCollectUserDataModel.AddressModel addressModel, + public void onShippingAddressChanged(@Nullable AssistantOptionModel.AddressModel addressModel, @AssistantUserDataEventType int eventType) { if (mNativeAssistantCollectUserDataDelegate != 0) { AssistantCollectUserDataNativeDelegateJni.get().onShippingAddressChanged( @@ -54,7 +53,7 @@ @Override public void onPaymentMethodChanged( - @Nullable AssistantCollectUserDataModel.PaymentInstrumentModel paymentInstrumentModel, + @Nullable AssistantOptionModel.PaymentInstrumentModel paymentInstrumentModel, @AssistantUserDataEventType int eventType) { if (mNativeAssistantCollectUserDataDelegate != 0) { AssistantCollectUserDataNativeDelegateJni.get().onCreditCardChanged(
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataSection.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataSection.java index 9f248ad5..8873782 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataSection.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataSection.java
@@ -16,10 +16,10 @@ import org.chromium.base.ApiCompatibilityUtils; import org.chromium.chrome.autofill_assistant.R; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel; import org.chromium.chrome.browser.autofill_assistant.AssistantTagsForTesting; import org.chromium.chrome.browser.autofill_assistant.AssistantTextUtils; import org.chromium.chrome.browser.autofill_assistant.LayoutUtils; -import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.OptionModel; import java.util.ArrayList; import java.util.List; @@ -30,7 +30,7 @@ * @param <T> The type of entry that a concrete instance of this class is created for, * such as {@link AssistantAutofillProfile}, {@link AssistantPaymentInstrument}, etc. */ -public abstract class AssistantCollectUserDataSection<T extends OptionModel> { +public abstract class AssistantCollectUserDataSection<T extends AssistantOptionModel> { interface Delegate<T> { void onUserDataChanged(T item, @AssistantUserDataEventType int type); }
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantContactDetailsSection.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantContactDetailsSection.java index 51f04d38..e9040b7 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantContactDetailsSection.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantContactDetailsSection.java
@@ -16,9 +16,8 @@ import org.chromium.base.Callback; import org.chromium.chrome.autofill_assistant.R; import org.chromium.chrome.browser.autofill_assistant.AssistantAutofillProfile; -import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.ContactModel; -import org.chromium.chrome.browser.payments.AutofillContact; -import org.chromium.chrome.browser.payments.ContactEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantContactEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.ContactModel; import java.util.ArrayList; import java.util.List; @@ -27,7 +26,8 @@ * The contact details section of the Autofill Assistant payment request. */ public class AssistantContactDetailsSection extends AssistantCollectUserDataSection<ContactModel> { - private ContactEditor mEditor; + @Nullable + private AssistantContactEditor mEditor; private boolean mIgnoreProfileChangeNotifications; private AssistantCollectUserDataModel.ContactDescriptionOptions mSummaryOptions; private AssistantCollectUserDataModel.ContactDescriptionOptions mFullOptions; @@ -41,14 +41,14 @@ context.getString(R.string.payments_add_contact)); } - public void setEditor(ContactEditor editor) { + public void setEditor(@Nullable AssistantContactEditor editor) { mEditor = editor; if (mEditor == null) { return; } for (ContactModel item : getItems()) { - addAutocompleteInformationToEditor(item.mOption); + mEditor.addContactInformationForAutocomplete(item.mOption); } } @@ -58,24 +58,16 @@ return; } - AutofillContact oldContact = oldItem == null - ? null - : AutofillUtilChrome.assistantAutofillProfileToAutofillContact( - oldItem.mOption, mContext, mEditor); - - Callback<AutofillContact> doneCallback = contact -> { - assert (contact != null && contact.isComplete() && contact.getProfile() != null); + Callback<ContactModel> doneCallback = editedItem -> { mIgnoreProfileChangeNotifications = true; - addOrUpdateItem( - new ContactModel(AutofillUtilChrome.autofillProfileToAssistantAutofillProfile( - contact.getProfile())), + addOrUpdateItem(editedItem, /* select= */ true, /* notify= */ true); mIgnoreProfileChangeNotifications = false; }; - Callback<AutofillContact> cancelCallback = contact -> {}; + Callback<ContactModel> cancelCallback = ignoredItem -> {}; - mEditor.edit(oldContact, doneCallback, cancelCallback); + mEditor.createOrEditItem(oldItem, doneCallback, cancelCallback); } @Override @@ -173,16 +165,10 @@ @Override protected void addOrUpdateItem(ContactModel model, boolean select, boolean notify) { super.addOrUpdateItem(model, select, notify); - addAutocompleteInformationToEditor(model.mOption); - } - private void addAutocompleteInformationToEditor(AssistantAutofillProfile contact) { - if (mEditor == null || contact == null) { - return; + if (mEditor != null) { + mEditor.addContactInformationForAutocomplete(model.mOption); } - mEditor.addEmailAddressIfValid(contact.getEmailAddress()); - mEditor.addPayerNameIfValid(contact.getFullName()); - mEditor.addPhoneNumberIfValid(contact.getPhoneNumber()); } /**
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantPaymentMethodSection.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantPaymentMethodSection.java index 1f09c5ff..a1d65278 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantPaymentMethodSection.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantPaymentMethodSection.java
@@ -17,14 +17,11 @@ import org.chromium.base.Callback; import org.chromium.chrome.autofill_assistant.R; -import org.chromium.chrome.browser.autofill.settings.CardEditor; import org.chromium.chrome.browser.autofill_assistant.AssistantAutofillCreditCard; import org.chromium.chrome.browser.autofill_assistant.AssistantAutofillProfile; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantPaymentInstrumentEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.PaymentInstrumentModel; import org.chromium.chrome.browser.autofill_assistant.AssistantPaymentInstrument; -import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.PaymentInstrumentModel; -import org.chromium.chrome.browser.payments.AutofillAddress; -import org.chromium.chrome.browser.payments.AutofillPaymentInstrument; -import org.chromium.content_public.browser.WebContents; import java.util.List; @@ -33,8 +30,8 @@ */ public class AssistantPaymentMethodSection extends AssistantCollectUserDataSection<PaymentInstrumentModel> { - private CardEditor mEditor; - private WebContents mWebContents; + @Nullable + private AssistantPaymentInstrumentEditor mEditor; private boolean mIgnorePaymentMethodsChangeNotifications; AssistantPaymentMethodSection(Context context, ViewGroup parent) { @@ -47,7 +44,7 @@ setTitle(context.getString(R.string.payments_method_of_payment_label)); } - public void setEditor(CardEditor editor) { + public void setEditor(@Nullable AssistantPaymentInstrumentEditor editor) { mEditor = editor; if (mEditor == null) { return; @@ -61,34 +58,23 @@ } } - public void setWebContents(WebContents webContents) { - mWebContents = webContents; - } - @Override protected void createOrEditItem(@Nullable PaymentInstrumentModel oldItem) { - if (mEditor == null || mWebContents == null) { + if (mEditor == null) { return; } - AutofillPaymentInstrument oldPaymentInstrument = oldItem == null - ? null - : AutofillUtilChrome.assistantPaymentInstrumentToAutofillPaymentInstrument( - oldItem.mOption, mWebContents); - Callback<AutofillPaymentInstrument> doneCallback = paymentInstrument -> { - assert (paymentInstrument != null && paymentInstrument.isComplete() - && paymentInstrument.getCard() != null); + Callback<PaymentInstrumentModel> doneCallback = editedItem -> { mIgnorePaymentMethodsChangeNotifications = true; - addOrUpdateItem(new PaymentInstrumentModel( - AutofillUtilChrome - .autofillPaymentInstrumentToAssistantPaymentInstrument( - paymentInstrument)), + addOrUpdateItem(editedItem, /* select= */ true, /* notify= */ true); mIgnorePaymentMethodsChangeNotifications = false; }; - Callback<AutofillPaymentInstrument> cancelCallback = paymentInstrument -> {}; - mEditor.edit(oldPaymentInstrument, doneCallback, cancelCallback); + + Callback<PaymentInstrumentModel> cancelCallback = ignoredItem -> {}; + + mEditor.createOrEditItem(oldItem, doneCallback, cancelCallback); } @Override @@ -219,16 +205,8 @@ } private void addAutocompleteInformationToEditor(AssistantAutofillProfile profile) { - if (mEditor == null) { - return; + if (mEditor != null) { + mEditor.addAddressInformationForAutocomplete(profile); } - // TODO(sandromaggi): Find a way to abstract this, such that we can remove the - // AutofillAddress. - AutofillAddress address = - AutofillUtilChrome.assistantAutofillProfileToAutofillAddress(profile, mContext); - if (address.getProfile().getLabel() == null) { - address.getProfile().setLabel(AutofillUtilChrome.getBillingAddressLabel(profile)); - } - mEditor.updateBillingAddressIfComplete(address); } } \ No newline at end of file
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java index 71495247..9e69a5e 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java
@@ -15,9 +15,9 @@ import org.chromium.base.Callback; import org.chromium.chrome.autofill_assistant.R; -import org.chromium.chrome.browser.autofill.settings.AddressEditor; -import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.AddressModel; -import org.chromium.chrome.browser.payments.AutofillAddress; +import org.chromium.chrome.browser.autofill_assistant.AssistantAutofillUtilChrome; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantAddressEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.AddressModel; import java.util.List; @@ -25,7 +25,8 @@ * The shipping address section of the Autofill Assistant payment request. */ public class AssistantShippingAddressSection extends AssistantCollectUserDataSection<AddressModel> { - private AddressEditor mEditor; + @Nullable + private AssistantAddressEditor mEditor; private boolean mIgnoreProfileChangeNotifications; AssistantShippingAddressSection(Context context, ViewGroup parent) { @@ -37,7 +38,7 @@ context.getString(R.string.payments_add_address)); } - public void setEditor(AddressEditor editor) { + public void setEditor(@Nullable AssistantAddressEditor editor) { mEditor = editor; } @@ -47,24 +48,16 @@ return; } - AutofillAddress oldAddress = oldItem == null - ? null - : AutofillUtilChrome.assistantAutofillProfileToAutofillAddress( - oldItem.mOption, mContext); - - Callback<AutofillAddress> doneCallback = address -> { - assert (address != null && address.isComplete() && address.getProfile() != null); + Callback<AddressModel> doneCallback = editedItem -> { mIgnoreProfileChangeNotifications = true; - addOrUpdateItem( - new AddressModel(AutofillUtilChrome.autofillProfileToAssistantAutofillProfile( - address.getProfile())), + addOrUpdateItem(editedItem, /* select= */ true, /* notify= */ true); mIgnoreProfileChangeNotifications = false; }; - Callback<AutofillAddress> cancelCallback = address -> {}; + Callback<AddressModel> cancelCallback = ignoredItem -> {}; - mEditor.edit(oldAddress, doneCallback, cancelCallback); + mEditor.createOrEditItem(oldItem, doneCallback, cancelCallback); } @Override @@ -77,8 +70,9 @@ hideIfEmpty(fullNameView); TextView fullAddressView = fullView.findViewById(R.id.full_address); - fullAddressView.setText( - AutofillUtilChrome.getShippingAddressLabel(model.mOption, /* withCountry= */ true)); + // TODO(b/211748133): Remove dependency to AutofillUtilChrome. + fullAddressView.setText(AssistantAutofillUtilChrome.getShippingAddressLabel( + model.mOption, /* withCountry= */ true)); hideIfEmpty(fullAddressView); TextView errorView = fullView.findViewById(R.id.incomplete_error); @@ -101,7 +95,8 @@ hideIfEmpty(fullNameView); TextView shortAddressView = summaryView.findViewById(R.id.short_address); - shortAddressView.setText(AutofillUtilChrome.getShippingAddressLabel( + // TODO(b/211748133): Remove dependency to AutofillUtilChrome. + shortAddressView.setText(AssistantAutofillUtilChrome.getShippingAddressLabel( model.mOption, /* withCountry= */ false)); hideIfEmpty(shortAddressView);
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java index 579b10a..c04ca223 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java
@@ -106,22 +106,21 @@ Map<String, AssistantValue> mAdditionalValues = new HashMap<>(); @Override - public void onContactInfoChanged( - @Nullable AssistantCollectUserDataModel.ContactModel contactModel, + public void onContactInfoChanged(@Nullable AssistantOptionModel.ContactModel contactModel, @AssistantUserDataEventType int eventType) { mContact = contactModel == null ? null : contactModel.mOption; } @Override public void onShippingAddressChanged( - @Nullable AssistantCollectUserDataModel.AddressModel addressModel, + @Nullable AssistantOptionModel.AddressModel addressModel, @AssistantUserDataEventType int eventType) { mShippingAddress = addressModel == null ? null : addressModel.mOption; } @Override - public void onPaymentMethodChanged(@Nullable AssistantCollectUserDataModel - .PaymentInstrumentModel paymentInstrumentModel, + public void onPaymentMethodChanged( + @Nullable AssistantOptionModel.PaymentInstrumentModel paymentInstrumentModel, @AssistantUserDataEventType int eventType) { mPaymentInstrument = paymentInstrumentModel == null ? null : paymentInstrumentModel.mOption;
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java index 4900d6a..2370583 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java
@@ -49,13 +49,13 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.chrome.autofill_assistant.R; import org.chromium.chrome.browser.autofill.PersonalDataManager; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.AddressModel; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.ContactModel; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.PaymentInstrumentModel; import org.chromium.chrome.browser.autofill_assistant.AutofillAssistantCollectUserDataTestHelper.ViewHolder; import org.chromium.chrome.browser.autofill_assistant.generic_ui.AssistantValue; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataCoordinator; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel; -import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.AddressModel; -import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.ContactModel; -import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.PaymentInstrumentModel; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantContactField; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantLoginChoice; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantTermsAndConditionsState; @@ -113,7 +113,9 @@ private AssistantCollectUserDataCoordinator createCollectUserDataCoordinator( AssistantCollectUserDataModel model) throws Exception { AssistantCollectUserDataCoordinator coordinator = TestThreadUtils.runOnUiThreadBlocking( - () -> new AssistantCollectUserDataCoordinator(mTestRule.getActivity(), model)); + () + -> new AssistantCollectUserDataCoordinator(mTestRule.getActivity(), model, + new AssistantStaticDependenciesChrome().createEditorFactory())); TestThreadUtils.runOnUiThreadBlocking( () @@ -136,8 +138,7 @@ assertThat(model.get(AssistantCollectUserDataModel.AVAILABLE_CONTACTS), empty()); assertThat(model.get(AssistantCollectUserDataModel.AVAILABLE_SHIPPING_ADDRESSES), empty()); assertThat(model.get(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS), empty()); - assertThat(model.get(AssistantCollectUserDataModel.SUPPORTED_BASIC_CARD_NETWORKS), - nullValue()); + assertThat(model.get(AssistantCollectUserDataModel.SUPPORTED_BASIC_CARD_NETWORKS), empty()); assertThat(model.get(AssistantCollectUserDataModel.EXPANDED_SECTION), nullValue()); assertThat(model.get(AssistantCollectUserDataModel.DELEGATE), nullValue()); assertThat(model.get(AssistantCollectUserDataModel.WEB_CONTENTS), nullValue()); @@ -489,66 +490,6 @@ onView(withId(R.id.editor_container)).check(matches(isDisplayed())); } - @Test - @MediumTest - public void testPaymentMethodsUpdatesFromWebContents() throws Exception { - AssistantCollectUserDataModel model = createCollectUserDataModel(); - AssistantCollectUserDataCoordinator coordinator = createCollectUserDataCoordinator(model); - AutofillAssistantCollectUserDataTestHelper - .ViewHolder viewHolder = TestThreadUtils.runOnUiThreadBlocking( - () -> new AutofillAssistantCollectUserDataTestHelper.ViewHolder(coordinator)); - - PersonalDataManager.AutofillProfile billingAddress = - mHelper.createDummyProfile("Jill Doe", "jill@gmail.com"); - String billingAddressId = mHelper.setProfile(billingAddress); - PersonalDataManager.CreditCard creditCard = mHelper.createDummyCreditCard(billingAddressId); - - TestThreadUtils.runOnUiThreadBlocking(() -> { - // WEB_CONTENTS are necessary for the creation of the editors. - model.set(AssistantCollectUserDataModel.WEB_CONTENTS, mTestRule.getWebContents()); - model.set(AssistantCollectUserDataModel.REQUEST_PAYMENT, true); - model.set(AssistantCollectUserDataModel.VISIBLE, true); - AssistantPaymentInstrument paymentInstrument = - AssistantCollectUserDataModel.createAssistantPaymentInstrument( - createDummyCreditCard(creditCard), createDummyAddress(billingAddress)); - model.set(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS, - Collections.singletonList(new PaymentInstrumentModel(paymentInstrument))); - model.set(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT, - new PaymentInstrumentModel(paymentInstrument)); - }); - - // Payment method section contains the new credit card, which should be pre-selected. - onView(allOf(withId(R.id.section_title_add_button), - isDescendantOfA(is(viewHolder.mPaymentSection)))) - .check(matches(not(isDisplayed()))); - assertThat(viewHolder.mPaymentMethodList.getItemCount(), is(1)); - onView(allOf(withId(R.id.credit_card_name), - isDescendantOfA(is(viewHolder.mPaymentMethodList.getItem(0))))) - .check(matches(withText("Jill Doe"))); - - // Detach WebContents. Section should be empty again. - TestThreadUtils.runOnUiThreadBlocking( - () -> { model.set(AssistantCollectUserDataModel.WEB_CONTENTS, null); }); - - onView(allOf(withId(R.id.section_title_add_button), - isDescendantOfA(is(viewHolder.mPaymentSection)))) - .check(matches(isDisplayed())); - assertThat(viewHolder.mPaymentMethodList.getItemCount(), is(0)); - - // Attach WebContents again. Section should be filled. - TestThreadUtils.runOnUiThreadBlocking(() -> { - model.set(AssistantCollectUserDataModel.WEB_CONTENTS, mTestRule.getWebContents()); - }); - - onView(allOf(withId(R.id.section_title_add_button), - isDescendantOfA(is(viewHolder.mPaymentSection)))) - .check(matches(not(isDisplayed()))); - assertThat(viewHolder.mPaymentMethodList.getItemCount(), is(1)); - onView(allOf(withId(R.id.credit_card_name), - isDescendantOfA(is(viewHolder.mPaymentMethodList.getItem(0))))) - .check(matches(withText("Jill Doe"))); - } - /** * Test assumptions about a payment request for a personal data manager with a complete profile * and payment method, i.e., all PR sections should be non-empty.
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java index 31fbacc1..d4aac60d1 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java
@@ -120,7 +120,8 @@ staticDependencies.getAccessibilityUtil(), staticDependencies.createInfoPageUtil(), staticDependencies.createProfileImageUtilOrNull( - getActivity(), R.dimen.autofill_assistant_profile_size)); + getActivity(), R.dimen.autofill_assistant_profile_size), + staticDependencies.createEditorFactory()); coordinator.show(); return coordinator; });
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAddressEditorAutofill.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAddressEditorAutofill.java new file mode 100644 index 0000000..91df573 --- /dev/null +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAddressEditorAutofill.java
@@ -0,0 +1,59 @@ +// Copyright 2022 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. + +package org.chromium.chrome.browser.autofill_assistant; + +import android.app.Activity; +import android.content.Context; + +import androidx.annotation.Nullable; + +import org.chromium.base.Callback; +import org.chromium.chrome.browser.autofill.prefeditor.EditorDialog; +import org.chromium.chrome.browser.autofill.settings.AddressEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantAddressEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.AddressModel; +import org.chromium.chrome.browser.payments.AutofillAddress; +import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.content_public.browser.WebContents; + +/** + * Editor for addresses in Chrome using Autofill as a base. + */ +public class AssistantAddressEditorAutofill implements AssistantAddressEditor { + private final AddressEditor mEditor; + private final Context mContext; + + public AssistantAddressEditorAutofill( + WebContents webContents, Activity activity, boolean shouldStoreChanges) { + mEditor = new AddressEditor(AddressEditor.Purpose.AUTOFILL_ASSISTANT, + /* saveToDisk= */ shouldStoreChanges); + mEditor.setEditorDialog(new EditorDialog(activity, + /* deleteRunnable= */ null, Profile.fromWebContents(webContents))); + mContext = activity; + } + + @Override + public void createOrEditItem(@Nullable AddressModel oldItem, + Callback<AddressModel> doneCallback, Callback<AddressModel> cancelCallback) { + @Nullable + AutofillAddress address = oldItem == null + ? null + : AssistantAutofillUtilChrome.assistantAutofillProfileToAutofillAddress( + oldItem.mOption, mContext); + + Callback<AutofillAddress> editorDoneCallback = editedAddress -> { + assert (editedAddress != null && editedAddress.isComplete() + && editedAddress.getProfile() != null); + doneCallback.onResult(new AddressModel( + AssistantAutofillUtilChrome.autofillProfileToAssistantAutofillProfile( + editedAddress.getProfile()))); + }; + + Callback<AutofillAddress> editorCancelCallback = + editedAddress -> cancelCallback.onResult(oldItem); + + mEditor.edit(address, editorDoneCallback, editorCancelCallback); + } +}
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AutofillUtilChrome.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAutofillUtilChrome.java similarity index 95% rename from chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AutofillUtilChrome.java rename to chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAutofillUtilChrome.java index 8e0e10e6..0347a52 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AutofillUtilChrome.java +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAutofillUtilChrome.java
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.chrome.browser.autofill_assistant.user_data; +package org.chromium.chrome.browser.autofill_assistant; import android.content.Context; @@ -11,9 +11,6 @@ import org.chromium.chrome.browser.autofill.PersonalDataManager; import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard; -import org.chromium.chrome.browser.autofill_assistant.AssistantAutofillCreditCard; -import org.chromium.chrome.browser.autofill_assistant.AssistantAutofillProfile; -import org.chromium.chrome.browser.autofill_assistant.AssistantPaymentInstrument; import org.chromium.chrome.browser.payments.AutofillAddress; import org.chromium.chrome.browser.payments.AutofillAddress.CompletenessCheckType; import org.chromium.chrome.browser.payments.AutofillContact; @@ -25,7 +22,7 @@ /** * Utility class for Chrome to handle Autofill / Assistant conversions. */ -public class AutofillUtilChrome { +public class AssistantAutofillUtilChrome { /** * Transform an {@link AssistantAutofillProfile} to an {@link AutofillProfile}. *
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantContactEditorAutofill.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantContactEditorAutofill.java new file mode 100644 index 0000000..0930623 --- /dev/null +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantContactEditorAutofill.java
@@ -0,0 +1,72 @@ +// Copyright 2022 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. + +package org.chromium.chrome.browser.autofill_assistant; + +import android.app.Activity; +import android.content.Context; + +import androidx.annotation.Nullable; + +import org.chromium.base.Callback; +import org.chromium.chrome.browser.autofill.prefeditor.EditorDialog; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantContactEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.ContactModel; +import org.chromium.chrome.browser.payments.AutofillContact; +import org.chromium.chrome.browser.payments.ContactEditor; +import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.content_public.browser.WebContents; + +/** + * Editor for contact information in Chrome using Autofill as a base. + */ +class AssistantContactEditorAutofill implements AssistantContactEditor { + private final ContactEditor mEditor; + private final Context mContext; + + public AssistantContactEditorAutofill(WebContents webContents, Activity activity, + boolean requestName, boolean requestPhone, boolean requestEmail, + boolean shouldStoreChanges) { + mEditor = new ContactEditor(requestName, requestPhone, requestEmail, + /* saveToDisk= */ shouldStoreChanges); + mEditor.setEditorDialog(new EditorDialog(activity, + /*deleteRunnable =*/null, Profile.fromWebContents(webContents))); + mContext = activity; + } + + @Override + public void createOrEditItem(@Nullable ContactModel oldItem, + Callback<ContactModel> doneCallback, Callback<ContactModel> cancelCallback) { + @Nullable + AutofillContact contact = oldItem == null + ? null + : AssistantAutofillUtilChrome.assistantAutofillProfileToAutofillContact( + oldItem.mOption, mContext, mEditor); + + Callback<AutofillContact> editorDoneCallback = editedContact -> { + assert (editedContact != null && editedContact.isComplete() + && editedContact.getProfile() != null); + doneCallback.onResult(new ContactModel( + AssistantAutofillUtilChrome.autofillProfileToAssistantAutofillProfile( + editedContact.getProfile()))); + }; + + Callback<AutofillContact> editorCancelCallback = + editedContact -> cancelCallback.onResult(oldItem); + + mEditor.edit(contact, editorDoneCallback, editorCancelCallback); + } + + /** + * Adds the contact's information to the editor such that it can be auto-completed while typing. + * + * @param contact The {@link AssistantAutofillProfile} to add information for. + */ + @Override + public void addContactInformationForAutocomplete(AssistantAutofillProfile contact) { + mEditor.addEmailAddressIfValid(contact.getEmailAddress()); + mEditor.addPayerNameIfValid(contact.getFullName()); + mEditor.addPhoneNumberIfValid(contact.getPhoneNumber()); + } +}
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditor.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditor.java new file mode 100644 index 0000000..66a6031 --- /dev/null +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditor.java
@@ -0,0 +1,60 @@ +// Copyright 2022 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. + +package org.chromium.chrome.browser.autofill_assistant; + +import androidx.annotation.Nullable; + +import org.chromium.base.Callback; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.AddressModel; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.ContactModel; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.PaymentInstrumentModel; + +/** + * Generic Editor interface. + * + * @param <T> The type of {@link AssistantOptionModel} this editor will operate on. + */ +public interface AssistantEditor<T extends AssistantOptionModel> { + /** + * Create or edit an item. If |oldItem| is null, a new item is being created, otherwise the + * provided item is edited. The |callback| is invoked with the new item after the editor is + * closed with saving the changes. + * + * @param oldItem The item to be edited, can be null in which case a new item is created. + * @param doneCallback Called after the editor is closed, assuming that the item has been + * successfully edited. + * @param cancelCallback Called after the editor is closed, assuming that the edit has been + * abandoned. + */ + void createOrEditItem( + @Nullable T oldItem, Callback<T> doneCallback, Callback<T> cancelCallback); + + /** + * Editor for {@link ContactModel}. + */ + interface AssistantContactEditor extends AssistantEditor<ContactModel> { + /** + * Adds information from the contact to the UI of the editor. + * @param contact The {@link AssistantAutofillProfile} to add information for. + */ + void addContactInformationForAutocomplete(AssistantAutofillProfile contact); + } + + /** + * Editor for {@link AddressModel}. + */ + interface AssistantAddressEditor extends AssistantEditor<AddressModel> {} + + /** + * Editor for {@link PaymentInstrumentModel}. + */ + interface AssistantPaymentInstrumentEditor extends AssistantEditor<PaymentInstrumentModel> { + /** + * Adds information from the address to the UI of the editor. + * @param address The {@link AssistantAutofillProfile} to add information for. + */ + void addAddressInformationForAutocomplete(AssistantAutofillProfile address); + } +}
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditorFactory.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditorFactory.java new file mode 100644 index 0000000..46eeaf4d --- /dev/null +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditorFactory.java
@@ -0,0 +1,30 @@ +// Copyright 2022 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. + +package org.chromium.chrome.browser.autofill_assistant; + +import android.app.Activity; + +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantAddressEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantContactEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantPaymentInstrumentEditor; +import org.chromium.content_public.browser.WebContents; + +import java.util.List; + +/** + * Factory for creating editors. Implementations might differ depending on where Autofill + * Assistant is running (e.g. WebLayer, Chrome). + */ +public interface AssistantEditorFactory { + AssistantContactEditor createContactEditor(WebContents webContents, Activity activity, + boolean requestName, boolean requestPhone, boolean requestEmail, + boolean shouldStoreChanges); + + AssistantAddressEditor createAddressEditor( + WebContents webContents, Activity activity, boolean shouldStoreChanges); + + AssistantPaymentInstrumentEditor createPaymentInstrumentEditor(WebContents webContents, + Activity activity, List<String> supportedCardNetworks, boolean shouldStoreChanges); +}
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditorFactoryChrome.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditorFactoryChrome.java new file mode 100644 index 0000000..e667afc --- /dev/null +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditorFactoryChrome.java
@@ -0,0 +1,40 @@ +// Copyright 2022 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. + +package org.chromium.chrome.browser.autofill_assistant; + +import android.app.Activity; + +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantAddressEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantContactEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantPaymentInstrumentEditor; +import org.chromium.content_public.browser.WebContents; + +import java.util.List; + +/** + * Factory to create editors within Chrome. + */ +public class AssistantEditorFactoryChrome implements AssistantEditorFactory { + @Override + public AssistantContactEditor createContactEditor(WebContents webContents, Activity activity, + boolean requestName, boolean requestPhone, boolean requestEmail, + boolean shouldStoreChanges) { + return new AssistantContactEditorAutofill( + webContents, activity, requestName, requestPhone, requestEmail, shouldStoreChanges); + } + + @Override + public AssistantAddressEditor createAddressEditor( + WebContents webContents, Activity activity, boolean shouldStoreChanges) { + return new AssistantAddressEditorAutofill(webContents, activity, shouldStoreChanges); + } + + @Override + public AssistantPaymentInstrumentEditor createPaymentInstrumentEditor(WebContents webContents, + Activity activity, List<String> supportedCardNetworks, boolean shouldStoreChanges) { + return new AssistantPaymentInstrumentEditorAutofill( + webContents, activity, supportedCardNetworks, shouldStoreChanges); + } +}
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantOptionModel.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantOptionModel.java new file mode 100644 index 0000000..b2cab6ad --- /dev/null +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantOptionModel.java
@@ -0,0 +1,76 @@ +// Copyright 2022 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. + +package org.chromium.chrome.browser.autofill_assistant; + +import java.util.ArrayList; +import java.util.List; + +/** + * Model wrapper for a data item to contain errors. + * + * @param <T> The type that an instance of this class is created for, such as + * {@link AssistantAutofillProfile}, {@link AssistantPaymentInstrument}, etc. + */ +public abstract class AssistantOptionModel<T> { + public T mOption; + public List<String> mErrors; + + public AssistantOptionModel(T option, List<String> errors) { + this.mOption = option; + this.mErrors = errors; + } + + public AssistantOptionModel(T option) { + this(option, new ArrayList<>()); + } + + public boolean isComplete() { + return mErrors.isEmpty(); + } + + /** Model wrapper for an {@link AssistantAutofillProfile}. */ + public static class ContactModel extends AssistantOptionModel<AssistantAutofillProfile> { + private final boolean mCanEdit; + + public ContactModel( + AssistantAutofillProfile contact, List<String> errors, boolean canEdit) { + super(contact, errors); + mCanEdit = canEdit; + } + + public ContactModel(AssistantAutofillProfile contact) { + super(contact); + mCanEdit = true; + } + + public boolean canEdit() { + return mCanEdit; + } + } + + /** Model wrapper for an {@link AssistantAutofillProfile}. */ + public static class AddressModel extends AssistantOptionModel<AssistantAutofillProfile> { + public AddressModel(AssistantAutofillProfile address, List<String> errors) { + super(address, errors); + } + + public AddressModel(AssistantAutofillProfile address) { + super(address); + } + } + + /** Model wrapper for an {@code AssistantPaymentInstrument}. */ + public static class PaymentInstrumentModel + extends AssistantOptionModel<AssistantPaymentInstrument> { + public PaymentInstrumentModel( + AssistantPaymentInstrument paymentInstrument, List<String> errors) { + super(paymentInstrument, errors); + } + + public PaymentInstrumentModel(AssistantPaymentInstrument paymentInstrument) { + super(paymentInstrument); + } + } +}
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantPaymentInstrumentEditorAutofill.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantPaymentInstrumentEditorAutofill.java new file mode 100644 index 0000000..3647fd1 --- /dev/null +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantPaymentInstrumentEditorAutofill.java
@@ -0,0 +1,149 @@ +// Copyright 2022 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. + +package org.chromium.chrome.browser.autofill_assistant; + +import android.app.Activity; +import android.content.Context; + +import androidx.annotation.Nullable; + +import org.chromium.base.Callback; +import org.chromium.chrome.browser.autofill.prefeditor.EditorDialog; +import org.chromium.chrome.browser.autofill.settings.AddressEditor; +import org.chromium.chrome.browser.autofill.settings.CardEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantEditor.AssistantPaymentInstrumentEditor; +import org.chromium.chrome.browser.autofill_assistant.AssistantOptionModel.PaymentInstrumentModel; +import org.chromium.chrome.browser.payments.AutofillAddress; +import org.chromium.chrome.browser.payments.AutofillPaymentInstrument; +import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.components.version_info.VersionInfo; +import org.chromium.content_public.browser.WebContents; +import org.chromium.payments.mojom.BasicCardNetwork; +import org.chromium.payments.mojom.PaymentMethodData; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Editor for credit cards in Chrome using Autofill as a base. + */ +public class AssistantPaymentInstrumentEditorAutofill implements AssistantPaymentInstrumentEditor { + private static final String BASIC_CARD = "basic-card"; + + private final WebContents mWebContents; + private final Context mContext; + private final CardEditor mEditor; + private final AddressEditor mAddressEditor; + + public AssistantPaymentInstrumentEditorAutofill(WebContents webContents, Activity activity, + List<String> supportedCardNetworks, boolean shouldStoreChanges) { + mWebContents = webContents; + mContext = activity; + + Profile profile = Profile.fromWebContents(webContents); + + mAddressEditor = new AddressEditor(AddressEditor.Purpose.AUTOFILL_ASSISTANT, + /* saveToDisk= */ shouldStoreChanges); + mAddressEditor.setEditorDialog(new EditorDialog(activity, + /* deleteRunnable= */ null, profile)); + + mEditor = new CardEditor(webContents, mAddressEditor, + /* includeOrgLabel= */ false, /* saveToDisk= */ shouldStoreChanges); + EditorDialog cardEditorDialog = new EditorDialog(activity, + /*deleteRunnable =*/null, profile); + if (VersionInfo.isBetaBuild() || VersionInfo.isStableBuild()) { + cardEditorDialog.disableScreenshots(); + } + mEditor.setEditorDialog(cardEditorDialog); + + mEditor.addAcceptedPaymentMethodIfRecognized( + getPaymentMethodDataFromNetworks(supportedCardNetworks)); + } + + private PaymentMethodData getPaymentMethodDataFromNetworks(List<String> supportedCardNetworks) { + // Only enable 'basic-card' payment method. + PaymentMethodData methodData = new PaymentMethodData(); + methodData.supportedMethod = BASIC_CARD; + + // Apply basic-card filter if specified + if (!supportedCardNetworks.isEmpty()) { + ArrayList<Integer> filteredNetworks = new ArrayList<>(); + Map<String, Integer> networks = getNetworkIdentifiers(); + for (String network : supportedCardNetworks) { + assert networks.containsKey(network); + if (networks.containsKey(network)) { + filteredNetworks.add(networks.get(network)); + } + } + + methodData.supportedNetworks = new int[filteredNetworks.size()]; + for (int i = 0; i < filteredNetworks.size(); ++i) { + methodData.supportedNetworks[i] = filteredNetworks.get(i); + } + } + + return methodData; + } + + private static Map<String, Integer> getNetworkIdentifiers() { + Map<String, Integer> networks = new HashMap<>(); + networks.put("amex", BasicCardNetwork.AMEX); + networks.put("diners", BasicCardNetwork.DINERS); + networks.put("discover", BasicCardNetwork.DISCOVER); + networks.put("jcb", BasicCardNetwork.JCB); + networks.put("mastercard", BasicCardNetwork.MASTERCARD); + networks.put("mir", BasicCardNetwork.MIR); + networks.put("unionpay", BasicCardNetwork.UNIONPAY); + networks.put("visa", BasicCardNetwork.VISA); + return networks; + } + + @Override + public void createOrEditItem(@Nullable PaymentInstrumentModel oldItem, + Callback<PaymentInstrumentModel> doneCallback, + Callback<PaymentInstrumentModel> cancelCallback) { + @Nullable + AutofillPaymentInstrument paymentInstrument = oldItem == null + ? null + : AssistantAutofillUtilChrome.assistantPaymentInstrumentToAutofillPaymentInstrument( + oldItem.mOption, mWebContents); + + Callback<AutofillPaymentInstrument> editorDoneCallback = editedPaymentInstrument -> { + assert (editedPaymentInstrument != null && editedPaymentInstrument.isComplete() + && editedPaymentInstrument.getCard() != null); + doneCallback.onResult(new PaymentInstrumentModel( + AssistantAutofillUtilChrome + .autofillPaymentInstrumentToAssistantPaymentInstrument( + editedPaymentInstrument))); + }; + + Callback<AutofillPaymentInstrument> editorCancelCallback = + editedPaymentInstrument -> cancelCallback.onResult(oldItem); + + mEditor.edit(paymentInstrument, editorDoneCallback, editorCancelCallback); + } + + /** + * Adds the address's information to the editor, such that it can be selected as a billing + * address for the card. + * + * @param address The {@link AssistantAutofillProfile} to add information for. + */ + @Override + public void addAddressInformationForAutocomplete(AssistantAutofillProfile address) { + mAddressEditor.addPhoneNumberIfValid(address.getPhoneNumber()); + + AutofillAddress autofillAddress = + AssistantAutofillUtilChrome.assistantAutofillProfileToAutofillAddress( + address, mContext); + if (autofillAddress.getProfile().getLabel() == null) { + autofillAddress.getProfile().setLabel( + AssistantAutofillUtilChrome.getBillingAddressLabel(address)); + } + mEditor.updateBillingAddressIfComplete(autofillAddress); + } +}
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantStaticDependencies.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantStaticDependencies.java index 2e7bb6d..f50d1da 100644 --- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantStaticDependencies.java +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantStaticDependencies.java
@@ -22,7 +22,7 @@ @JNINamespace("autofill_assistant") public interface AssistantStaticDependencies { @CalledByNative - long getNativePointer(); + long createNative(); /** * Create the Activity specific dependencies. @@ -54,4 +54,6 @@ @Nullable AssistantProfileImageUtil createProfileImageUtilOrNull( Context context, @DimenRes int imageSizeRedId); + + AssistantEditorFactory createEditorFactory(); }
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantStaticDependenciesChrome.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantStaticDependenciesChrome.java index 74d35e7..b011353 100644 --- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantStaticDependenciesChrome.java +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantStaticDependenciesChrome.java
@@ -31,11 +31,9 @@ private long mNativePointer; @Override - public long getNativePointer() { - if (mNativePointer == 0) { - mNativePointer = AssistantStaticDependenciesChromeJni.get().init(this); - } - return mNativePointer; + public long createNative() { + return AssistantStaticDependenciesChromeJni.get().init( + new AssistantStaticDependenciesChrome()); } @Override @@ -100,6 +98,11 @@ return new AssistantProfileImageUtilChrome(context, signedInAccountEmail, imageSizeRedId); } + @Override + public AssistantEditorFactory createEditorFactory() { + return new AssistantEditorFactoryChrome(); + } + @NativeMethods interface Natives { long init(AssistantStaticDependencies staticDependencies);
diff --git a/chrome/android/features/autofill_assistant/public/java_sources.gni b/chrome/android/features/autofill_assistant/public/java_sources.gni index e730039..9ef7fd0 100644 --- a/chrome/android/features/autofill_assistant/public/java_sources.gni +++ b/chrome/android/features/autofill_assistant/public/java_sources.gni
@@ -5,14 +5,20 @@ public_autofill_assistant_java_sources = [ "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAccessTokenUtil.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAccessTokenUtilChrome.java", + "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAddressEditorAutofill.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAutofillCreditCard.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAutofillProfile.java", + "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantAutofillUtilChrome.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantBrowserControls.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantBrowserControlsChrome.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantBrowserControlsFactory.java", + "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantContactEditorAutofill.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantDependencies.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantDependenciesChrome.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantDependencyUtilsChrome.java", + "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditor.java", + "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditorFactory.java", + "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantEditorFactoryChrome.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantFeatures.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantFeedbackUtil.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantFeedbackUtilChrome.java", @@ -23,7 +29,9 @@ "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantModuleInstallUi.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantModuleInstallUiProviderChrome.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingHelper.java", + "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantOptionModel.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantPaymentInstrument.java", + "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantPaymentInstrumentEditorAutofill.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantProfileImageUtil.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantProfileImageUtilChrome.java", "//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantSnackbar.java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadItem.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadItem.java index 0e2d4c3..f7a1705 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadItem.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadItem.java
@@ -164,7 +164,7 @@ offlineItem.totalSizeBytes = downloadInfo.getBytesTotalSize(); offlineItem.receivedBytes = downloadInfo.getBytesReceived(); offlineItem.isResumable = downloadInfo.isResumable(); - offlineItem.url = downloadInfo.getUrl() == null ? null : downloadInfo.getUrl().getSpec(); + offlineItem.url = downloadInfo.getUrl(); offlineItem.originalUrl = downloadInfo.getOriginalUrl(); offlineItem.isOffTheRecord = downloadInfo.isOffTheRecord(); offlineItem.otrProfileId = OTRProfileID.serialize(downloadInfo.getOTRProfileId());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java index dd965f7..c12d670e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java
@@ -7,10 +7,10 @@ import static org.chromium.components.webapk.lib.common.WebApkConstants.WEBAPK_PACKAGE_PREFIX; import android.content.Context; -import android.graphics.Bitmap; import android.os.Handler; import android.text.TextUtils; import android.text.format.DateUtils; +import android.util.Pair; import org.chromium.base.Callback; import org.chromium.base.CommandLine; @@ -19,6 +19,7 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.NativeMethods; import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.task.AsyncTask; import org.chromium.blink.mojom.DisplayMode; import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.browserservices.intents.BrowserServicesIntentDataProvider; @@ -313,7 +314,7 @@ scheduleUpdate(); }; String updateRequestPath = mStorage.createAndSetUpdateRequestFilePath(info); - storeWebApkUpdateRequestToFile(updateRequestPath, info, primaryIconUrl, splashIconUrl, + encodeIconsInBackground(updateRequestPath, info, primaryIconUrl, splashIconUrl, isManifestStale, appIdentityUpdateSupported, updateReasons, callback); } @@ -544,10 +545,32 @@ return null; } - protected void storeWebApkUpdateRequestToFile(String updateRequestPath, WebappInfo info, + // Encode the icons in a background process since encoding is expensive. + protected void encodeIconsInBackground(String updateRequestPath, WebappInfo info, String primaryIconUrl, String splashIconUrl, boolean isManifestStale, boolean isAppIdentityUpdateSupported, List<Integer> updateReasons, Callback<Boolean> callback) { + new AsyncTask<Pair<String, String>>() { + @Override + protected Pair<String, String> doInBackground() { + String primaryIconData = info.icon().encoded(); + String splashIconData = info.splashIcon().encoded(); + return Pair.create(primaryIconData, splashIconData); + } + + @Override + protected void onPostExecute(Pair<String, String> result) { + storeWebApkUpdateRequestToFile(updateRequestPath, info, primaryIconUrl, + result.first, splashIconUrl, result.second, isManifestStale, + isAppIdentityUpdateSupported, updateReasons, callback); + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + + protected void storeWebApkUpdateRequestToFile(String updateRequestPath, WebappInfo info, + String primaryIconUrl, String primaryIconData, String splashIconUrl, + String splashIconData, boolean isManifestStale, boolean isAppIdentityUpdateSupported, + List<Integer> updateReasons, Callback<Boolean> callback) { int versionCode = info.webApkVersionCode(); int size = info.iconUrlToMurmur2HashMap().size(); String[] iconUrls = new String[size]; @@ -594,8 +617,8 @@ WebApkUpdateManagerJni.get().storeWebApkUpdateRequestToFile(updateRequestPath, info.manifestStartUrl(), info.scopeUrl(), info.name(), info.shortName(), - primaryIconUrl, info.icon().bitmap(), info.isIconAdaptive(), splashIconUrl, - info.splashIcon().bitmap(), info.isSplashIconMaskable(), iconUrls, iconHashes, + primaryIconUrl, primaryIconData, info.isIconAdaptive(), splashIconUrl, + splashIconData, info.isSplashIconMaskable(), iconUrls, iconHashes, info.displayMode(), info.orientation(), info.toolbarColor(), info.backgroundColor(), shareTargetAction, shareTargetParamTitle, shareTargetParamText, shareTargetIsMethodPost, shareTargetIsEncTypeMultipart, shareTargetParamFileNames, @@ -608,8 +631,8 @@ interface Natives { public void storeWebApkUpdateRequestToFile(String updateRequestPath, String startUrl, String scope, String name, String shortName, String primaryIconUrl, - Bitmap primaryIcon, boolean isPrimaryIconMaskable, String splashIconUrl, - Bitmap splashIcon, boolean isSplashIconMaskable, String[] iconUrls, + String primaryIconData, boolean isPrimaryIconMaskable, String splashIconUrl, + String splashIconData, boolean isSplashIconMaskable, String[] iconUrls, String[] iconHashes, @DisplayMode.EnumType int displayMode, int orientation, long themeColor, long backgroundColor, String shareTargetAction, String shareTargetParamTitle, String shareTargetParamText,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadMessageUiControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadMessageUiControllerTest.java index ac10c242..9b36c2a5 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadMessageUiControllerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadMessageUiControllerTest.java
@@ -29,6 +29,7 @@ import org.chromium.components.offline_items_collection.OfflineItemSchedule; import org.chromium.components.offline_items_collection.OfflineItemState; import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.url.JUnitTestGURLs; import java.util.UUID; @@ -55,7 +56,7 @@ private static final String MESSAGE_TWO_DOWNLOAD_SCHEDULED = "2 downloads scheduled"; private static final String DESCRIPTION_DOWNLOADING = "See notification for download status"; - private static final String DESCRIPTION_DOWNLOAD_COMPLETE = "(0.01 KB) example.com"; + private static final String DESCRIPTION_DOWNLOAD_COMPLETE = "(0.01 KB) www.example.com"; private static final String DESCRIPTION_DOWNLOAD_SCHEDULED = "Download will start when on Wi-Fi"; @@ -128,7 +129,7 @@ private static void markItemComplete(OfflineItem item) { item.state = OfflineItemState.COMPLETE; item.title = TEST_FILE_NAME; - item.url = "https://example.com"; + item.url = JUnitTestGURLs.getGURL(JUnitTestGURLs.EXAMPLE_URL); item.receivedBytes = 10L; item.totalSizeBytes = 10L; }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/tile/TileGroupUnitTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/tile/TileGroupUnitTest.java index dd402c3e..eed3c9f 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/tile/TileGroupUnitTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/tile/TileGroupUnitTest.java
@@ -115,6 +115,7 @@ @Test @UiThreadTest @SmallTest + @FlakyTest(message = "https://crbug.com/1292469") public void testInitialiseWithTileList() { mMostVisitedSites.setTileSuggestions(URLS);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java index f89b7dcf..59b8e85 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
@@ -124,7 +124,7 @@ } @Override - protected void storeWebApkUpdateRequestToFile(String updateRequestPath, WebappInfo info, + protected void encodeIconsInBackground(String updateRequestPath, WebappInfo info, String primaryIconUrl, String splashIconUrl, boolean isManifestStale, boolean isAppIdentityUpdateSupported, List<Integer> updateReasons, Callback<Boolean> callback) {
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/DeferredStartupHandlerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/DeferredStartupHandlerTest.java index b660407..98c8906 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/DeferredStartupHandlerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/DeferredStartupHandlerTest.java
@@ -12,6 +12,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadow.api.Shadow; import org.chromium.base.test.util.CallbackHelper; @@ -22,6 +23,7 @@ */ @RunWith(LocalRobolectricTestRunner.class) @Config(manifest = Config.NONE, shadows = {ShadowIdleHandlerAwareMessageQueue.class}) +@LooperMode(LooperMode.Mode.LEGACY) public class DeferredStartupHandlerTest { private DeferredStartupHandler mDeferredStartupHandler; private ShadowIdleHandlerAwareMessageQueue mShadowMessageQueue;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateUnitTest.java index b548a01..2384c83 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateUnitTest.java
@@ -31,6 +31,7 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.chromium.base.ContextUtils; import org.chromium.base.FeatureList; @@ -91,6 +92,7 @@ * Unit tests for {@link AppMenuPropertiesDelegateImpl}. */ @RunWith(BaseRobolectricTestRunner.class) +@LooperMode(LooperMode.Mode.LEGACY) public class AppMenuPropertiesDelegateUnitTest { @Rule public TestRule mProcessor = new Features.JUnitProcessor(); @@ -448,7 +450,6 @@ public void testOverviewMenuItems_Phone() { setUpMocksForOverviewMenu(); when(mIncognitoTabModel.getCount()).thenReturn(0); - Assert.assertFalse(mAppMenuPropertiesDelegate.shouldShowPageMenu()); Assert.assertEquals( MenuGroup.OVERVIEW_MODE_MENU, mAppMenuPropertiesDelegate.getMenuGroup());
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/background_task_scheduler/NativeBackgroundTaskTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/background_task_scheduler/NativeBackgroundTaskTest.java index 8fe42ea4..97c8b9a 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/background_task_scheduler/NativeBackgroundTaskTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/background_task_scheduler/NativeBackgroundTaskTest.java
@@ -30,6 +30,7 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.chromium.base.ContextUtils; import org.chromium.base.library_loader.LibraryProcessType; @@ -54,6 +55,7 @@ /** Unit tests for {@link NativeBackgroundTask}. */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class NativeBackgroundTaskTest { private enum InitializerSetup { SUCCESS,
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/QualityEnforcerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/QualityEnforcerUnitTest.java index b1fa5e7a..6d083ea 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/QualityEnforcerUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/QualityEnforcerUnitTest.java
@@ -24,6 +24,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowPackageManager; import org.robolectric.shadows.ShadowToast; @@ -56,6 +57,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) @EnableFeatures({ChromeFeatureList.TRUSTED_WEB_ACTIVITY_QUALITY_ENFORCEMENT, ChromeFeatureList.TRUSTED_WEB_ACTIVITY_QUALITY_ENFORCEMENT_WARNING}) @DisableFeatures(ChromeFeatureList.TRUSTED_WEB_ACTIVITY_QUALITY_ENFORCEMENT_FORCED)
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/InstalledWebappGeolocationBridgeTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/InstalledWebappGeolocationBridgeTest.java index 0c9938a..b2f9621 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/InstalledWebappGeolocationBridgeTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/InstalledWebappGeolocationBridgeTest.java
@@ -27,6 +27,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.Feature; @@ -41,6 +42,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) @EnableFeatures(ChromeFeatureList.TRUSTED_WEB_ACTIVITY_LOCATION_DELEGATION) public class InstalledWebappGeolocationBridgeTest { private static final Origin ORIGIN = Origin.create("https://www.website.com");
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/LocationPermissionUpdaterTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/LocationPermissionUpdaterTest.java index 185f4c4..73b5714 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/LocationPermissionUpdaterTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/LocationPermissionUpdaterTest.java
@@ -25,6 +25,7 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowPackageManager; import org.chromium.base.test.BaseRobolectricTestRunner; @@ -43,6 +44,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) @EnableFeatures(ChromeFeatureList.TRUSTED_WEB_ACTIVITY_LOCATION_DELEGATION) public class LocationPermissionUpdaterTest { private static final Origin ORIGIN = Origin.create("https://www.website.com");
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/NotificationPermissionUpdaterTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/NotificationPermissionUpdaterTest.java index c7c690a..25e14da 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/NotificationPermissionUpdaterTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/permissiondelegation/NotificationPermissionUpdaterTest.java
@@ -28,6 +28,7 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowPackageManager; import org.chromium.base.test.BaseRobolectricTestRunner; @@ -42,6 +43,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class NotificationPermissionUpdaterTest { private static final Origin ORIGIN = Origin.create("https://www.website.com"); private static final String PACKAGE_NAME = "com.package.name";
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/childaccounts/ChildAccountServiceTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/childaccounts/ChildAccountServiceTest.java index 2fd73e8..71a6fa3b 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/childaccounts/ChildAccountServiceTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/childaccounts/ChildAccountServiceTest.java
@@ -25,6 +25,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import org.robolectric.annotation.LooperMode; import org.chromium.base.Callback; import org.chromium.base.test.BaseRobolectricTestRunner; @@ -41,6 +42,7 @@ * Unit tests for {@link ChildAccountService}. */ @RunWith(BaseRobolectricTestRunner.class) +@LooperMode(LooperMode.Mode.LEGACY) public class ChildAccountServiceTest { private static final Account CHILD_ACCOUNT1 = AccountUtils.createAccountFromName("child.account1@gmail.com"); @@ -117,4 +119,4 @@ mWindowAndroidMock, CHILD_ACCOUNT1.name, FAKE_NATIVE_CALLBACK); verify(mNativeMock).onReauthenticationFailed(FAKE_NATIVE_CALLBACK); } -} \ No newline at end of file +}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManagerImplTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManagerImplTest.java index 82b513fe..c9e208af 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManagerImplTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManagerImplTest.java
@@ -34,6 +34,7 @@ import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowLooper; import org.robolectric.shadows.ShadowSurfaceView; @@ -47,6 +48,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class CompositorSurfaceManagerImplTest { @Mock private CompositorSurfaceManager.SurfaceManagerCallbackTarget mCallback;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/download/home/FileDeletionQueueTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/download/home/FileDeletionQueueTest.java index d7ab79f4..fc39107a 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/download/home/FileDeletionQueueTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/download/home/FileDeletionQueueTest.java
@@ -18,6 +18,7 @@ import org.mockito.junit.MockitoRule; import org.robolectric.Robolectric; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowLooper; import org.chromium.base.Callback; @@ -30,6 +31,7 @@ /** Unit tests for the FileDeletionQueue class. */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class FileDeletionQueueTest { @Mock public Callback<String> mDeleter;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java index d885cfe1..89d59a87 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java
@@ -34,6 +34,7 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowLooper; import org.chromium.base.Callback; @@ -53,6 +54,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class ChromeFeedbackCollectorTest { @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java index b71f056..1536d85 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java
@@ -27,6 +27,7 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowLooper; import org.chromium.base.Callback; @@ -46,6 +47,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class FeedFeedbackCollectorTest { @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunAppRestrictionInfoTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunAppRestrictionInfoTest.java index a9a47133..f95e88c 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunAppRestrictionInfoTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunAppRestrictionInfoTest.java
@@ -21,6 +21,7 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowUserManager; import org.chromium.base.CommandLine; @@ -43,6 +44,7 @@ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE, shadows = {ShadowRecordHistogram.class, ShadowPostTask.class, ShadowUserManager.class}) +@LooperMode(LooperMode.Mode.LEGACY) public class FirstRunAppRestrictionInfoTest { private static final List<String> HISTOGRAM_NAMES = Arrays.asList("Enterprise.FirstRun.AppRestrictionLoadTime",
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencerTest.java index d28ed26..6e03b0a 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencerTest.java
@@ -26,6 +26,7 @@ import org.robolectric.Robolectric; import org.robolectric.android.controller.ActivityController; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.multidex.ShadowMultiDex; import org.chromium.base.metrics.UmaRecorder; @@ -48,6 +49,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE, shadows = {ShadowMultiDex.class}) +@LooperMode(LooperMode.Mode.LEGACY) public class FirstRunFlowSequencerTest { private static final String ADULT_ACCOUNT_NAME = "adult.account@gmail.com"; private static final String CHILD_ACCOUNT_NAME =
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/PolicyLoadListenerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/PolicyLoadListenerUnitTest.java index b150a41..d9bf6ba 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/PolicyLoadListenerUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/PolicyLoadListenerUnitTest.java
@@ -31,6 +31,8 @@ /** Unit tests for PolicyLoadListener. */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE, shadows = {ShadowProcess.class}) +// TODO(crbug.com/1210371): Change to use paused loop. See crbug for details. +@LooperMode(LooperMode.Mode.LEGACY) public class PolicyLoadListenerUnitTest { private static final String LOADED_POLICY_READY = "Policy service should be ready to read."; private static final String LOADED_NO_POLICY = "Policy should not exist."; @@ -170,8 +172,6 @@ } @Test - // TODO(crbug.com/1210371): Change to use paused loop. See crbug for details. - @LooperMode(LooperMode.Mode.LEGACY) public void testDestroyAfterStart_PolicyInitializedInterleaved() { Assert.assertNull(LOADING_NOT_FINISHED, mPolicyLoadListener.onAvailable(mListener));
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/TosDialogBehaviorSharedPrefInvalidatorUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/TosDialogBehaviorSharedPrefInvalidatorUnitTest.java index 533602b..d1fb7f6 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/TosDialogBehaviorSharedPrefInvalidatorUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/TosDialogBehaviorSharedPrefInvalidatorUnitTest.java
@@ -19,6 +19,7 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.chromium.base.Callback; import org.chromium.base.test.BaseRobolectricTestRunner; @@ -29,6 +30,7 @@ /** Unit test for {@link TosDialogBehaviorSharedPrefInvalidator}. */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class TosDialogBehaviorSharedPrefInvalidatorUnitTest { @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java index 200a9d9..98e4d97 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java
@@ -20,6 +20,7 @@ import org.robolectric.Robolectric; import org.robolectric.android.util.concurrent.RoboExecutorService; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.chromium.base.library_loader.LibraryLoader; import org.chromium.base.library_loader.LibraryProcessType; @@ -39,6 +40,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE, shadows = {ShadowAsyncTask.class}) +@LooperMode(LooperMode.Mode.LEGACY) public class AsyncInitTaskRunnerTest { private static final int THREAD_WAIT_TIME_MS = 1000;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/messages/ChromeMessageQueueMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/messages/ChromeMessageQueueMediatorTest.java index 37d4a95..fc74c47 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/messages/ChromeMessageQueueMediatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/messages/ChromeMessageQueueMediatorTest.java
@@ -19,6 +19,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.chromium.base.Callback; import org.chromium.base.supplier.ObservableSupplier; @@ -44,6 +45,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class ChromeMessageQueueMediatorTest { private static final int EXPECTED_TOKEN = 42;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/password_manager/settings/DialogManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/password_manager/settings/DialogManagerTest.java index 9283bb7c..70fc1aa2 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/password_manager/settings/DialogManagerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/password_manager/settings/DialogManagerTest.java
@@ -22,6 +22,7 @@ import org.mockito.junit.MockitoRule; import org.robolectric.Robolectric; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.chromium.base.test.BaseRobolectricTestRunner; @@ -33,6 +34,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class DialogManagerTest { @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/reengagement/ReengagementNotificationControllerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/reengagement/ReengagementNotificationControllerTest.java index 058e8b2a..5db94fd 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/reengagement/ReengagementNotificationControllerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/reengagement/ReengagementNotificationControllerTest.java
@@ -29,6 +29,7 @@ import org.mockito.junit.MockitoRule; import org.robolectric.Shadows; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowNotificationManager; import org.chromium.base.Callback; @@ -47,6 +48,7 @@ /** Unit tests for {@link ReengagementNotificationController}. */ @RunWith(BaseRobolectricTestRunner.class) @Config(shadows = {ShadowNotificationManager.class, ShadowRecordHistogram.class}) +@LooperMode(LooperMode.Mode.LEGACY) public class ReengagementNotificationControllerTest { @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); @@ -276,4 +278,4 @@ /* isDefaultSystem = */ true, /* hasDefault = */ true, browserCount, /* systemCount = */ 0); } -} \ No newline at end of file +}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/share/ShareRegistrationCoordinatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/share/ShareRegistrationCoordinatorTest.java index a315b66..471a1a5f 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/share/ShareRegistrationCoordinatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/share/ShareRegistrationCoordinatorTest.java
@@ -32,6 +32,7 @@ import org.mockito.junit.MockitoRule; import org.robolectric.Robolectric; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.chromium.base.supplier.Supplier; import org.chromium.base.test.BaseRobolectricTestRunner; @@ -53,6 +54,7 @@ /** Tests for ShareRegistrationCoordinator. */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class ShareRegistrationCoordinatorTest { @Rule public TestRule mProcessorRule = new Features.JUnitProcessor();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java index 00ae96a..74cc71a3 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java
@@ -23,6 +23,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.stubbing.Answer; +import org.robolectric.annotation.LooperMode; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.JniMocker; @@ -49,6 +50,7 @@ /** Tests for {@link SigninManagerImpl}. */ @RunWith(BaseRobolectricTestRunner.class) +@LooperMode(LooperMode.Mode.LEGACY) public class SigninManagerImplTest { private static final long NATIVE_SIGNIN_MANAGER = 10001L; private static final long NATIVE_IDENTITY_MANAGER = 10002L;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelperTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelperTest.java index 4191cd6..981934cf 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelperTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelperTest.java
@@ -15,6 +15,7 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.chromium.base.UserDataHost; import org.chromium.base.test.BaseRobolectricTestRunner; @@ -30,6 +31,7 @@ /** Unit tests for {@link TabBrowserControlsConstraintsHelper}. */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class TabBrowserControlsConstraintsHelperTest { private final UserDataHost mUserDataHost = new UserDataHost();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegateTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegateTest.java index 3623966..c00a0d4b 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegateTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegateTest.java
@@ -17,6 +17,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.LooperMode; import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.test.BaseRobolectricTestRunner; @@ -26,6 +27,7 @@ /** Unit tests for the TabViewAndroidDelegate. */ @RunWith(BaseRobolectricTestRunner.class) +@LooperMode(LooperMode.Mode.LEGACY) public class TabViewAndroidDelegateTest { private final ArgumentCaptor<TabObserver> mTabObserverCaptor = ArgumentCaptor.forClass(TabObserver.class);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/JourneyManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tasks/JourneyManagerTest.java index 1671289..4ba46323 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/JourneyManagerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/tasks/JourneyManagerTest.java
@@ -21,6 +21,7 @@ import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowLooper; import org.chromium.base.ContextUtils; @@ -47,6 +48,7 @@ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE, shadows = {ShadowRecordHistogram.class, BackgroundShadowAsyncTask.class}) +@LooperMode(LooperMode.Mode.LEGACY) public final class JourneyManagerTest { private static final int LAST_ENGAGEMENT_ELAPSED_MS = 5000; private static final int LAST_ENGAGEMENT_ELAPSED_S = 5;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/usage_stats/EventTrackerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/usage_stats/EventTrackerTest.java index 63bb4e4..feda46f 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/usage_stats/EventTrackerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/usage_stats/EventTrackerTest.java
@@ -19,6 +19,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.annotation.LooperMode; import org.chromium.base.Callback; import org.chromium.base.Promise; @@ -33,6 +34,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) +@LooperMode(LooperMode.Mode.LEGACY) public class EventTrackerTest { @Mock private UsageStatsBridge mBridge;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java index 39bcb993..6e6c0503 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java
@@ -148,8 +148,8 @@ @Override public void storeWebApkUpdateRequestToFile(String updateRequestPath, String startUrl, String scope, String name, String shortName, String primaryIconUrl, - Bitmap primaryIcon, boolean isPrimaryIconMaskable, String splashIconUrl, - Bitmap splashIcon, boolean isSplashIconMaskable, String[] iconUrls, + String primaryIconData, boolean isPrimaryIconMaskable, String splashIconUrl, + String splashIconData, boolean isSplashIconMaskable, String[] iconUrls, String[] iconHashes, @DisplayMode.EnumType int displayMode, int orientation, long themeColor, long backgroundColor, String shareTargetAction, String shareTargetParamTitle, String shareTargetParamText, @@ -231,7 +231,8 @@ @Override protected void storeWebApkUpdateRequestToFile(String updateRequestPath, WebappInfo info, - String primaryIconUrl, String splashIconUrl, boolean isManifestStale, + String primaryIconUrl, String primaryIconData, String splashIconUrl, + String splashIconData, boolean isManifestStale, boolean isAppIdentityUpdateSupported, List<Integer> updateReasons, Callback<Boolean> callback) { mStoreUpdateRequestCallback = callback;
diff --git a/chrome/app/chrome.cml b/chrome/app/chrome.cml index a4758471..fbf680c 100644 --- a/chrome/app/chrome.cml +++ b/chrome/app/chrome.cml
@@ -24,6 +24,7 @@ capabilities: [ { protocol: [ + "fuchsia.element.Manager", "fuchsia.ui.app.ViewProvider", ], }, @@ -72,6 +73,7 @@ expose: [ { protocol: [ + "fuchsia.element.Manager", "fuchsia.ui.app.ViewProvider", ], from: "self",
diff --git a/chrome/app/vector_icons/nearby_share.icon b/chrome/app/vector_icons/nearby_share.icon index 0902bc5..c4b5842 100644 --- a/chrome/app/vector_icons/nearby_share.icon +++ b/chrome/app/vector_icons/nearby_share.icon
@@ -3,7 +3,6 @@ // found in the LICENSE file. CANVAS_DIMENSIONS, 24, -PATH_COLOR_ARGB, 0xFF, 0x1A, 0x73, 0xE8, MOVE_TO, 2.72f, 8.87f, CUBIC_TO, 2.24f, 9.32f, 2.23f, 10.07f, 2.69f, 10.54f, LINE_TO, 3.89f, 11.78f,
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 5d5e1da..fbe42f07 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1803,6 +1803,8 @@ "universal_web_contents_observers.h", "update_client/chrome_update_query_params_delegate.cc", "update_client/chrome_update_query_params_delegate.h", + "url_param_filter/url_param_filterer.cc", + "url_param_filter/url_param_filterer.h", "usb/frame_usb_services.cc", "usb/frame_usb_services.h", "usb/usb_blocklist.cc", @@ -1912,6 +1914,7 @@ ":permissions_proto", ":resource_prefetch_predictor_proto", ":unexpire_flags", + ":url_param_filter_classification_proto", "//base", "//base:i18n", "//base/allocator:buildflags", @@ -1928,7 +1931,6 @@ "//chrome/app/vector_icons", "//chrome/browser/breadcrumbs", "//chrome/browser/browsing_data:constants", - "//chrome/browser/commerce:feature_list", "//chrome/browser/devtools", "//chrome/browser/feature_guide/notifications:public", "//chrome/browser/feature_guide/notifications/internal", @@ -2028,6 +2030,7 @@ "//components/certificate_transparency:proto", "//components/client_hints/browser", "//components/cloud_devices/common", + "//components/commerce/core:feature_list", "//components/component_updater", "//components/component_updater:crl_set_remover", "//components/component_updater/installer_policies", @@ -3365,7 +3368,6 @@ "//chrome/browser/attribution_reporting/android:jni_headers", "//chrome/browser/attribution_reporting/android/internal", "//chrome/browser/banners/android:jni_headers", - "//chrome/browser/commerce:feature_list", "//chrome/browser/commerce/merchant_viewer:merchant_signal_db", "//chrome/browser/commerce/merchant_viewer:merchant_signal_db_content_proto", "//chrome/browser/commerce/merchant_viewer:merchant_viewer_data_manager", @@ -3430,6 +3432,7 @@ "//components/browser_ui/util/android", "//components/cbor", "//components/cdm/browser", + "//components/commerce/core:feature_list", "//components/commerce/core:proto", "//components/component_updater/android:native_background_task_update_scheduler", "//components/content_capture/android", @@ -5902,6 +5905,8 @@ "first_run/upgrade_util_fuchsia.cc", "fuchsia/chrome_browser_main_parts_fuchsia.cc", "fuchsia/chrome_browser_main_parts_fuchsia.h", + "fuchsia/element_manager_impl.cc", + "fuchsia/element_manager_impl.h", "fuchsia/switches.cc", "fuchsia/switches.h", "fullscreen_fuchsia.cc", @@ -5920,7 +5925,6 @@ ] deps += [ - "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.element", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.app", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.composition", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.scenic", @@ -5929,6 +5933,8 @@ "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp", "//ui/platform_window", ] + + public_deps += [ "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.element" ] } if (is_posix) { @@ -7327,6 +7333,10 @@ sources = [ "permissions/crowd_deny.proto" ] } +proto_library("url_param_filter_classification_proto") { + sources = [ "url_param_filter/url_param_filter_classification.proto" ] +} + grit("resources") { source = "browser_resources.grd"
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index a7bb2e8c..87b12eb 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -36,7 +36,6 @@ #include "chrome/browser/apps/app_discovery_service/app_discovery_features.h" #include "chrome/browser/ash/android_sms/android_sms_switches.h" #include "chrome/browser/browser_features.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/feature_guide/notifications/feature_notification_guide_service.h" #include "chrome/browser/flag_descriptions.h" #include "chrome/browser/login_detection/login_detection_util.h" @@ -82,11 +81,11 @@ #include "components/browser_sync/browser_sync_switches.h" #include "components/browsing_data/core/features.h" #include "components/cloud_devices/common/cloud_devices_switches.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/component_updater/component_updater_command_line_config_policy.h" #include "components/component_updater/component_updater_switches.h" #include "components/content_settings/core/common/features.h" #include "components/contextual_search/core/browser/public.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" #include "components/dom_distiller/core/dom_distiller_features.h" #include "components/dom_distiller/core/dom_distiller_switches.h" #include "components/download/public/common/download_features.h" @@ -3713,10 +3712,6 @@ flag_descriptions::kEnableLoginDetectionDescription, kOsAll, FEATURE_VALUE_TYPE(login_detection::kLoginDetection)}, #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) - {"enable-save-data", flag_descriptions::kEnableSaveDataName, - flag_descriptions::kEnableSaveDataDescription, kOsCrOS | kOsLinux, - SINGLE_VALUE_TYPE( - data_reduction_proxy::switches::kEnableDataReductionProxy)}, {"enable-navigation-predictor", flag_descriptions::kEnableNavigationPredictorName, flag_descriptions::kEnableNavigationPredictorDescription, @@ -8015,17 +8010,6 @@ return true; #endif // BUILDFLAG(IS_CHROMEOS_LACROS) - // data-reduction-proxy-lo-fi and enable-data-reduction-proxy-lite-page - // are only available for Chromium builds and the Canary/Dev/Beta channels. - if ((!strcmp("data-reduction-proxy-lo-fi", entry.internal_name) || - !strcmp("enable-data-reduction-proxy-lite-page", entry.internal_name)) && - channel != version_info::Channel::BETA && - channel != version_info::Channel::DEV && - channel != version_info::Channel::CANARY && - channel != version_info::Channel::UNKNOWN) { - return true; - } - // enable-unsafe-webgpu is only available on Dev/Canary channels. if (!strcmp("enable-unsafe-webgpu", entry.internal_name) && channel != version_info::Channel::DEV &&
diff --git a/chrome/browser/android/autofill_assistant/dependencies.cc b/chrome/browser/android/autofill_assistant/dependencies.cc index 5d034d4..4f0d3eb 100644 --- a/chrome/browser/android/autofill_assistant/dependencies.cc +++ b/chrome/browser/android/autofill_assistant/dependencies.cc
@@ -26,9 +26,9 @@ std::unique_ptr<Dependencies> Dependencies::CreateFromJavaStaticDependencies( ScopedJavaGlobalRef<jobject> jstatic_dependencies) { - const jlong object_ptr = Java_AssistantStaticDependencies_getNativePointer( - AttachCurrentThread(), jstatic_dependencies); - return base::WrapUnique(reinterpret_cast<Dependencies*>(object_ptr)); + return base::WrapUnique(reinterpret_cast<Dependencies*>( + Java_AssistantStaticDependencies_createNative(AttachCurrentThread(), + jstatic_dependencies))); } Dependencies::Dependencies(JNIEnv* env,
diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browser/android/bookmarks/bookmark_bridge.cc index 9ec2e59..d0a025b 100644 --- a/chrome/browser/android/bookmarks/bookmark_bridge.cc +++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc
@@ -28,7 +28,6 @@ #include "chrome/browser/android/reading_list/reading_list_manager_factory.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h" #include "chrome/browser/power_bookmarks/power_bookmark_utils.h" @@ -45,6 +44,7 @@ #include "components/bookmarks/common/android/bookmark_type.h" #include "components/bookmarks/common/bookmark_pref_names.h" #include "components/bookmarks/managed/managed_bookmark_service.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/commerce/core/proto/price_tracking.pb.h" #include "components/dom_distiller/core/url_utils.h" #include "components/optimization_guide/proto/hints.pb.h"
diff --git a/chrome/browser/android/chrome_backup_agent.cc b/chrome/browser/android/chrome_backup_agent.cc index b400bb1..366d645 100644 --- a/chrome/browser/android/chrome_backup_agent.cc +++ b/chrome/browser/android/chrome_backup_agent.cc
@@ -11,14 +11,12 @@ #include "chrome/android/chrome_jni_headers/ChromeBackupAgentImpl_jni.h" #include "chrome/browser/android/chrome_backup_agent.h" #include "chrome/browser/profiles/profile_manager.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" #include "components/prefs/pref_service.h" #include "components/sync/base/pref_names.h" namespace { const char* backed_up_preferences_[] = { - data_reduction_proxy::prefs::kDataSaverEnabled, syncer::prefs::kSyncFirstSetupComplete, syncer::prefs::kSyncKeepEverythingSynced, syncer::prefs::kSyncAutofill,
diff --git a/chrome/browser/android/webapk/webapk_installer.cc b/chrome/browser/android/webapk/webapk_installer.cc index 06814db..071c9d2b 100644 --- a/chrome/browser/android/webapk/webapk_installer.cc +++ b/chrome/browser/android/webapk/webapk_installer.cc
@@ -183,9 +183,9 @@ // static void WebApkInstaller::BuildProto( const webapps::ShortcutInfo& shortcut_info, - const SkBitmap& primary_icon, + const std::string& primary_icon_data, bool is_primary_icon_maskable, - const SkBitmap& splash_icon, + const std::string& splash_icon_data, const std::string& package_name, const std::string& version, std::map<std::string, webapps::WebApkIconHasher::Icon> @@ -196,9 +196,10 @@ base::PostTaskAndReplyWithResult( GetBackgroundTaskRunner().get(), FROM_HERE, base::BindOnce(&webapps::BuildProtoInBackground, shortcut_info, - primary_icon, is_primary_icon_maskable, splash_icon, - package_name, version, std::move(icon_url_to_murmur2_hash), - is_manifest_stale, is_app_identity_update_supported, + primary_icon_data, is_primary_icon_maskable, + splash_icon_data, package_name, version, + std::move(icon_url_to_murmur2_hash), is_manifest_stale, + is_app_identity_update_supported, std::vector<webapps::WebApkUpdateReason>()), std::move(callback)); } @@ -207,9 +208,9 @@ void WebApkInstaller::StoreUpdateRequestToFile( const base::FilePath& update_request_path, const webapps::ShortcutInfo& shortcut_info, - const SkBitmap& primary_icon, + const std::string& primary_icon_data, bool is_primary_icon_maskable, - const SkBitmap& splash_icon, + const std::string& splash_icon_data, const std::string& package_name, const std::string& version, std::map<std::string, webapps::WebApkIconHasher::Icon> @@ -221,8 +222,8 @@ base::PostTaskAndReplyWithResult( GetBackgroundTaskRunner().get(), FROM_HERE, base::BindOnce(&webapps::StoreUpdateRequestToFileInBackground, - update_request_path, shortcut_info, primary_icon, - is_primary_icon_maskable, splash_icon, package_name, + update_request_path, shortcut_info, primary_icon_data, + is_primary_icon_maskable, splash_icon_data, package_name, version, std::move(icon_url_to_murmur2_hash), is_manifest_stale, is_app_identity_update_supported, std::move(update_reasons)), @@ -546,12 +547,13 @@ } )"); - // Using empty |splash_icon| here because in this code path (WebApk - // install), we are using the splash icon data from |hashes|. + // Using empty string for |primary_icon_data| and |splash_icon_data| here + // because in WebApk installs, we are using the icon data from |hashes|. BuildProto( - *install_shortcut_info_, install_primary_icon_, is_primary_icon_maskable_, - SkBitmap() /* splash_icon */, "" /* package_name */, "" /* version */, - std::move(*hashes), false /* is_manifest_stale */, + *install_shortcut_info_, std::string() /* primary_icon_data */, + is_primary_icon_maskable_, std::string() /* splash_icon_data */, + "" /* package_name */, "" /* version */, std::move(*hashes), + false /* is_manifest_stale */, false /* is_app_identity_update_supported */, base::BindOnce(&WebApkInstaller::SendRequest, weak_ptr_factory_.GetWeakPtr(), traffic_annotation));
diff --git a/chrome/browser/android/webapk/webapk_installer.h b/chrome/browser/android/webapk/webapk_installer.h index 32835410..14171911 100644 --- a/chrome/browser/android/webapk/webapk_installer.h +++ b/chrome/browser/android/webapk/webapk_installer.h
@@ -120,9 +120,9 @@ // or install request. Runs |callback| on the calling thread when complete. static void BuildProto( const webapps::ShortcutInfo& shortcut_info, - const SkBitmap& primary_icon, + const std::string& primary_icon_data, bool is_primary_icon_maskable, - const SkBitmap& splash_icon, + const std::string& splash_icon_data, const std::string& package_name, const std::string& version, std::map<std::string, webapps::WebApkIconHasher::Icon> @@ -137,9 +137,9 @@ static void StoreUpdateRequestToFile( const base::FilePath& update_request_path, const webapps::ShortcutInfo& shortcut_info, - const SkBitmap& primary_icon, + const std::string& primary_icon_data, bool is_primary_icon_maskable, - const SkBitmap& splash_icon, + const std::string& splash_icon_data, const std::string& package_name, const std::string& version, std::map<std::string, webapps::WebApkIconHasher::Icon>
diff --git a/chrome/browser/android/webapk/webapk_installer_unittest.cc b/chrome/browser/android/webapk/webapk_installer_unittest.cc index 4f3791e..df7faf3 100644 --- a/chrome/browser/android/webapk/webapk_installer_unittest.cc +++ b/chrome/browser/android/webapk/webapk_installer_unittest.cc
@@ -174,10 +174,9 @@ base::RunLoop run_loop; quit_closure_ = run_loop.QuitClosure(); WebApkInstaller::StoreUpdateRequestToFile( - update_request_path, webapps::ShortcutInfo((GURL())), SkBitmap(), false, - SkBitmap(), "", "", - std::map<std::string, webapps::WebApkIconHasher::Icon>(), false, false, - {webapps::WebApkUpdateReason::PRIMARY_ICON_HASH_DIFFERS}, + update_request_path, webapps::ShortcutInfo((GURL())), "", false, "", "", + "", std::map<std::string, webapps::WebApkIconHasher::Icon>(), false, + false, {webapps::WebApkUpdateReason::PRIMARY_ICON_HASH_DIFFERS}, base::BindOnce(&UpdateRequestStorer::OnComplete, base::Unretained(this))); run_loop.Run(); @@ -221,14 +220,19 @@ const GURL& splash_image_url, std::map<std::string, webapps::WebApkIconHasher::Icon> icon_url_to_murmur2_hash, + const std::string& primary_icon_data, + const std::string& splash_icon_data, bool is_manifest_stale, bool is_app_identity_update_supported, const std::vector<GURL>& best_shortcut_icon_urls) { webapps::ShortcutInfo info(GURL::EmptyGURL()); info.best_primary_icon_url = best_primary_icon_url; info.splash_image_url = splash_image_url; - info.icon_urls = {best_primary_icon_url.spec(), splash_image_url.spec(), - kUnusedIconPath}; + if (!best_primary_icon_url.is_empty()) + info.icon_urls.push_back(best_primary_icon_url.spec()); + if (!splash_image_url.is_empty()) + info.icon_urls.push_back(splash_image_url.spec()); + info.icon_urls.push_back(kUnusedIconPath); for (const GURL& shortcut_url : best_shortcut_icon_urls) { info.best_shortcut_icon_urls.push_back(shortcut_url); @@ -237,11 +241,9 @@ info.shortcut_items.back().icons.back().src = shortcut_url; } - SkBitmap primary_icon(gfx::test::CreateBitmap(144, 144)); - SkBitmap splash_icon(gfx::test::CreateBitmap(72, 72)); WebApkInstaller::BuildProto( - info, primary_icon, false /* is_primary_icon_maskable */, splash_icon, - "" /* package_name */, "" /* version */, + info, primary_icon_data, false /* is_primary_icon_maskable */, + splash_icon_data, "" /* package_name */, "" /* version */, std::move(icon_url_to_murmur2_hash), is_manifest_stale, is_app_identity_update_supported, base::BindOnce(&BuildProtoRunner::OnBuiltWebApkProto, @@ -556,35 +558,30 @@ icon_url_to_murmur2_hash[icon_url_1] = {"data1", "1"}; icon_url_to_murmur2_hash[icon_url_2] = {"data2", "2"}; + std::string primary_icon_data = "data3"; + std::string splash_icon_data = "data4"; std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner(); runner->BuildSync(GURL(), GURL(), std::move(icon_url_to_murmur2_hash), + primary_icon_data, splash_icon_data, true /* is_manifest_stale */, true /* is_app_identity_update_supported */, {}); webapk::WebApk* webapk_request = runner->GetWebApkRequest(); ASSERT_NE(nullptr, webapk_request); webapk::WebAppManifest manifest = webapk_request->manifest(); - ASSERT_EQ(5, manifest.icons_size()); + ASSERT_EQ(3, manifest.icons_size()); EXPECT_EQ("", manifest.icons(0).src()); EXPECT_FALSE(manifest.icons(0).has_hash()); - EXPECT_TRUE(manifest.icons(0).has_image_data()); + EXPECT_EQ(manifest.icons(0).image_data(), primary_icon_data); EXPECT_EQ("", manifest.icons(1).src()); EXPECT_FALSE(manifest.icons(1).has_hash()); - EXPECT_TRUE(manifest.icons(1).has_image_data()); + EXPECT_EQ(manifest.icons(1).image_data(), splash_icon_data); - EXPECT_EQ("", manifest.icons(2).src()); - EXPECT_EQ("", manifest.icons(2).hash()); - EXPECT_TRUE(manifest.icons(2).has_image_data()); - - EXPECT_EQ("", manifest.icons(3).src()); - EXPECT_EQ("", manifest.icons(3).hash()); - EXPECT_TRUE(manifest.icons(3).has_image_data()); - - EXPECT_EQ(kUnusedIconPath, manifest.icons(4).src()); - EXPECT_FALSE(manifest.icons(4).has_hash()); - EXPECT_FALSE(manifest.icons(4).has_image_data()); + EXPECT_EQ(kUnusedIconPath, manifest.icons(2).src()); + EXPECT_FALSE(manifest.icons(2).has_hash()); + EXPECT_FALSE(manifest.icons(2).has_image_data()); } // Tests a WebApk install or update request is built properly when the Chrome @@ -606,7 +603,8 @@ std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner(); runner->BuildSync(GURL(best_primary_icon_url), GURL(best_splash_icon_url), - icon_url_to_murmur2_hash, false /* is_manifest_stale*/, + icon_url_to_murmur2_hash, "" /* primary_icon_data */, + "" /* splash_icon_data */, false /* is_manifest_stale*/, false /* is_app_identity_update_supported */, {GURL(best_shortcut_icon_url)}); webapk::WebApk* webapk_request = runner->GetWebApkRequest(); @@ -617,19 +615,21 @@ // Check protobuf fields for kBestPrimaryIconUrl. EXPECT_EQ(best_primary_icon_url, manifest.icons(0).src()); - EXPECT_EQ(icon_url_to_murmur2_hash[best_primary_icon_url].hash, - manifest.icons(0).hash()); + EXPECT_EQ(manifest.icons(0).hash(), + icon_url_to_murmur2_hash[best_primary_icon_url].hash); + EXPECT_EQ(manifest.icons(0).image_data(), + icon_url_to_murmur2_hash[best_primary_icon_url].unsafe_data); EXPECT_THAT(manifest.icons(0).usages(), testing::ElementsAre(webapk::Image::PRIMARY_ICON)); - EXPECT_TRUE(manifest.icons(0).has_image_data()); // Check protobuf fields for kBestSplashIconUrl. EXPECT_EQ(best_splash_icon_url, manifest.icons(1).src()); - EXPECT_EQ(icon_url_to_murmur2_hash[best_splash_icon_url].hash, - manifest.icons(1).hash()); + EXPECT_EQ(manifest.icons(1).hash(), + icon_url_to_murmur2_hash[best_splash_icon_url].hash); + EXPECT_EQ(manifest.icons(1).image_data(), + icon_url_to_murmur2_hash[best_splash_icon_url].unsafe_data); EXPECT_THAT(manifest.icons(1).usages(), testing::ElementsAre(webapk::Image::SPLASH_ICON)); - EXPECT_TRUE(manifest.icons(1).has_image_data()); // Check protobuf fields for unused icon. EXPECT_EQ(kUnusedIconPath, manifest.icons(2).src()); @@ -659,7 +659,8 @@ std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner(); runner->BuildSync(GURL(best_icon_url), GURL(best_icon_url), - icon_url_to_murmur2_hash, false /* is_manifest_stale*/, + icon_url_to_murmur2_hash, "" /* primary_icon_data */, + "" /* splash_icon_data */, false /* is_manifest_stale*/, false /* is_app_identity_update_supported */, {GURL(best_icon_url)}); webapk::WebApk* webapk_request = runner->GetWebApkRequest(); @@ -670,20 +671,22 @@ // Check protobuf fields for icons. EXPECT_EQ(best_icon_url, manifest.icons(0).src()); - EXPECT_EQ(icon_url_to_murmur2_hash[best_icon_url].hash, - manifest.icons(0).hash()); + EXPECT_EQ(manifest.icons(0).hash(), + icon_url_to_murmur2_hash[best_icon_url].hash); + EXPECT_EQ(manifest.icons(0).image_data(), + icon_url_to_murmur2_hash[best_icon_url].unsafe_data); EXPECT_THAT(manifest.icons(0).usages(), testing::ElementsAre(webapk::Image::PRIMARY_ICON, webapk::Image::SPLASH_ICON)); - EXPECT_TRUE(manifest.icons(0).has_image_data()); EXPECT_EQ(best_icon_url, manifest.icons(1).src()); - EXPECT_EQ(icon_url_to_murmur2_hash[best_icon_url].hash, - manifest.icons(1).hash()); + EXPECT_EQ(manifest.icons(1).hash(), + icon_url_to_murmur2_hash[best_icon_url].hash); + EXPECT_EQ(manifest.icons(1).image_data(), + icon_url_to_murmur2_hash[best_icon_url].unsafe_data); EXPECT_THAT(manifest.icons(1).usages(), testing::ElementsAre(webapk::Image::PRIMARY_ICON, webapk::Image::SPLASH_ICON)); - EXPECT_TRUE(manifest.icons(1).has_image_data()); // Check protobuf fields for unused icon. EXPECT_EQ(kUnusedIconPath, manifest.icons(2).src()); @@ -712,7 +715,8 @@ std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner(); runner->BuildSync( - GURL(), GURL(), icon_url_to_murmur2_hash, false /* is_manifest_stale*/, + GURL(), GURL(), icon_url_to_murmur2_hash, "" /* primary_icon_data */, + "" /* splash_icon_data */, false /* is_manifest_stale*/, false /* is_app_identity_update_supported */, {GURL(best_shortcut_icon_url1), GURL(best_shortcut_icon_url2)}); webapk::WebApk* webapk_request = runner->GetWebApkRequest(); @@ -747,7 +751,8 @@ std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner(); runner->BuildSync( - GURL(), GURL(), icon_url_to_murmur2_hash, false /* is_manifest_stale*/, + GURL(), GURL(), icon_url_to_murmur2_hash, "" /* primary_icon_data */, + "" /* splash_icon_data */, false /* is_manifest_stale*/, false /* is_app_identity_update_supported */, {GURL(best_shortcut_icon_url), GURL(best_shortcut_icon_url)}); webapk::WebApk* webapk_request = runner->GetWebApkRequest(); @@ -782,7 +787,8 @@ std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner(); runner->BuildSync(GURL(icon_url_1), GURL(best_icon_url), - icon_url_to_murmur2_hash, false /* is_manifest_stale*/, + icon_url_to_murmur2_hash, "" /* primary_icon_data */, + "" /* splash_icon_data */, false /* is_manifest_stale*/, true /* is_app_identity_update_supported */, {GURL(best_icon_url)}); webapk::WebApk* webapk_request = runner->GetWebApkRequest(); @@ -794,19 +800,21 @@ // Check primary icon fields. EXPECT_EQ(icon_url_1, manifest.icons(0).src()); - EXPECT_EQ(icon_url_to_murmur2_hash[icon_url_1].hash, - manifest.icons(0).hash()); + EXPECT_EQ(manifest.icons(0).hash(), + icon_url_to_murmur2_hash[icon_url_1].hash); + EXPECT_EQ(manifest.icons(0).image_data(), + icon_url_to_murmur2_hash[icon_url_1].unsafe_data); EXPECT_THAT(manifest.icons(0).usages(), testing::ElementsAre(webapk::Image::PRIMARY_ICON)); - EXPECT_TRUE(manifest.icons(0).has_image_data()); // Check splash icon fields EXPECT_EQ(best_icon_url, manifest.icons(1).src()); - EXPECT_EQ(icon_url_to_murmur2_hash[best_icon_url].hash, - manifest.icons(1).hash()); + EXPECT_EQ(manifest.icons(1).hash(), + icon_url_to_murmur2_hash[best_icon_url].hash); + EXPECT_EQ(manifest.icons(1).image_data(), + icon_url_to_murmur2_hash[best_icon_url].unsafe_data); EXPECT_THAT(manifest.icons(1).usages(), testing::ElementsAre(webapk::Image::SPLASH_ICON)); - EXPECT_TRUE(manifest.icons(1).has_image_data()); // Check protobuf fields for unused icon. EXPECT_EQ(kUnusedIconPath, manifest.icons(2).src());
diff --git a/chrome/browser/android/webapk/webapk_update_manager.cc b/chrome/browser/android/webapk/webapk_update_manager.cc index cef42d0..cbbdf44 100644 --- a/chrome/browser/android/webapk/webapk_update_manager.cc +++ b/chrome/browser/android/webapk/webapk_update_manager.cc
@@ -25,9 +25,7 @@ #include "components/webapps/browser/android/shortcut_info.h" #include "content/public/browser/browser_thread.h" #include "third_party/blink/public/mojom/manifest/manifest.mojom.h" -#include "third_party/skia/include/core/SkBitmap.h" #include "ui/android/color_utils_android.h" -#include "ui/gfx/android/java_bitmap.h" #include "url/gurl.h" using base::android::JavaParamRef; @@ -57,10 +55,10 @@ const JavaParamRef<jstring>& java_name, const JavaParamRef<jstring>& java_short_name, const JavaParamRef<jstring>& java_primary_icon_url, - const JavaParamRef<jobject>& java_primary_icon_bitmap, + const JavaParamRef<jstring>& java_primary_icon_data, jboolean java_is_primary_icon_maskable, const JavaParamRef<jstring>& java_splash_icon_url, - const JavaParamRef<jobject>& java_splash_icon_bitmap, + const JavaParamRef<jstring>& java_splash_icon_data, jboolean java_is_splash_icon_maskable, const JavaParamRef<jobjectArray>& java_icon_urls, const JavaParamRef<jobjectArray>& java_icon_hashes, @@ -158,18 +156,10 @@ webapps::WebApkIconHasher::Icon{/* data= */ "", icon_hashes[i]}; } - gfx::JavaBitmap java_primary_icon_bitmap_lock(java_primary_icon_bitmap); - SkBitmap primary_icon = - gfx::CreateSkBitmapFromJavaBitmap(java_primary_icon_bitmap_lock); - primary_icon.setImmutable(); - - SkBitmap splash_icon; - if (!java_splash_icon_bitmap.is_null()) { - gfx::JavaBitmap java_splash_icon_bitmap_lock(java_splash_icon_bitmap); - splash_icon = - gfx::CreateSkBitmapFromJavaBitmap(java_splash_icon_bitmap_lock); - splash_icon.setImmutable(); - } + std::string primary_icon_data = + ConvertJavaStringToUTF8(env, java_primary_icon_data); + std::string splash_icon_data = + ConvertJavaStringToUTF8(env, java_splash_icon_data); std::string webapk_package; ConvertJavaStringToUTF8(env, java_webapk_package, &webapk_package); @@ -217,8 +207,8 @@ static_cast<webapps::WebApkUpdateReason>(update_reason)); WebApkInstaller::StoreUpdateRequestToFile( - base::FilePath(update_request_path), info, primary_icon, - java_is_primary_icon_maskable, splash_icon, webapk_package, + base::FilePath(update_request_path), info, primary_icon_data, + java_is_primary_icon_maskable, splash_icon_data, webapk_package, base::NumberToString(java_webapk_version), std::move(icon_url_to_murmur2_hash), java_is_manifest_stale, java_is_app_identity_update_supported, std::move(update_reasons),
diff --git a/chrome/browser/apps/app_service/intent_util.cc b/chrome/browser/apps/app_service/intent_util.cc index dd039aa1..0291ee1 100644 --- a/chrome/browser/apps/app_service/intent_util.cc +++ b/chrome/browser/apps/app_service/intent_util.cc
@@ -17,7 +17,6 @@ #include "build/build_config.h" #include "chrome/browser/apps/app_service/file_utils.h" #include "chrome/browser/ui/extensions/application_launch.h" -#include "chrome/browser/web_applications/web_app.h" #include "components/services/app_service/public/cpp/file_handler.h" #include "components/services/app_service/public/cpp/file_handler_info.h" #include "components/services/app_service/public/cpp/intent_filter_util.h" @@ -113,13 +112,8 @@ } std::vector<apps::mojom::IntentFilterPtr> CreateWebAppShareIntentFilters( - const web_app::WebApp& web_app) { - if (!web_app.share_target().has_value()) { - return {}; - } - + const apps::ShareTarget& share_target) { std::vector<apps::mojom::IntentFilterPtr> filters; - const apps::ShareTarget& share_target = web_app.share_target().value(); if (!share_target.params.text.empty()) { // The share target accepts navigator.share() calls with text. @@ -149,9 +143,9 @@ } std::vector<apps::mojom::IntentFilterPtr> CreateWebAppFileHandlerIntentFilters( - const web_app::WebApp& web_app) { + const apps::FileHandlers& file_handlers) { std::vector<apps::mojom::IntentFilterPtr> filters; - for (const apps::FileHandler& handler : web_app.file_handlers()) { + for (const apps::FileHandler& handler : file_handlers) { std::vector<std::string> mime_types; std::vector<std::string> file_extensions; std::string action_url = handler.action.spec(); @@ -170,14 +164,7 @@ return filters; } -bool IsNoteTakingWebApp(const web_app::WebApp& web_app) { - return web_app.note_taking_new_note_url().is_valid(); -} - -apps::mojom::IntentFilterPtr CreateNoteTakingIntentFilter( - const web_app::WebApp& web_app) { - DCHECK(IsNoteTakingWebApp(web_app)); - +apps::mojom::IntentFilterPtr CreateNoteTakingIntentFilter() { auto intent_filter = apps::mojom::IntentFilter::New(); AddSingleValueCondition(apps::mojom::ConditionType::kAction, kIntentActionCreateNote, @@ -314,21 +301,33 @@ } std::vector<apps::mojom::IntentFilterPtr> CreateWebAppIntentFilters( - const web_app::WebApp& web_app, - const GURL& scope) { + const web_app::AppId& app_id, + bool is_note_taking_web_app, + const GURL& app_scope, + const apps::ShareTarget* app_share_target, + const apps::FileHandlers* enabled_file_handlers) { std::vector<apps::mojom::IntentFilterPtr> filters; - if (!scope.is_empty()) - filters.push_back(CreateIntentFilterForUrlScope(scope)); - base::Extend(filters, CreateWebAppShareIntentFilters(web_app)); - base::Extend(filters, CreateWebAppFileHandlerIntentFilters(web_app)); + if (!app_scope.is_empty()) { + filters.push_back(CreateIntentFilterForUrlScope(app_scope)); + } - if (IsNoteTakingWebApp(web_app)) - filters.push_back(CreateNoteTakingIntentFilter(web_app)); + if (app_share_target) { + base::Extend(filters, CreateWebAppShareIntentFilters(*app_share_target)); + } + + if (enabled_file_handlers) { + base::Extend(filters, + CreateWebAppFileHandlerIntentFilters(*enabled_file_handlers)); + } + + if (is_note_taking_web_app) { + filters.push_back(CreateNoteTakingIntentFilter()); + } #if BUILDFLAG(IS_CHROMEOS_ASH) if (ash::features::IsProjectorEnabled() && - web_app.app_id() == ash::kChromeUITrustedProjectorSwaAppId) { + app_id == ash::kChromeUITrustedProjectorSwaAppId) { filters.push_back(CreateIntentFilterForUrlScope( GURL(ash::kChromeUIUntrustedProjectorPwaUrl))); }
diff --git a/chrome/browser/apps/app_service/intent_util.h b/chrome/browser/apps/app_service/intent_util.h index 5169a2e..d6d1a82e 100644 --- a/chrome/browser/apps/app_service/intent_util.h +++ b/chrome/browser/apps/app_service/intent_util.h
@@ -12,6 +12,8 @@ #include "build/build_config.h" #include "build/buildflag.h" #include "build/chromeos_buildflags.h" +#include "chrome/browser/web_applications/web_app_id.h" +#include "components/services/app_service/public/cpp/file_handler.h" #include "components/services/app_service/public/mojom/types.mojom-forward.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -28,6 +30,10 @@ } #endif +namespace apps { +struct ShareTarget; +} + class GURL; class Profile; @@ -57,8 +63,11 @@ // The |scope| is needed because currently the correct app scope is not // provided through WebApp API for shortcuts. std::vector<apps::mojom::IntentFilterPtr> CreateWebAppIntentFilters( - const web_app::WebApp& web_app, - const GURL& scope); + const web_app::AppId& app_id, + bool is_note_taking_web_app, + const GURL& app_scope, + const apps::ShareTarget* app_share_target, + const apps::FileHandlers* enabled_file_handlers); // Create intent filters for a Chrome app (extension-based) e.g. for // file_handlers.
diff --git a/chrome/browser/apps/app_service/intent_util_browsertest.cc b/chrome/browser/apps/app_service/intent_util_browsertest.cc index 661a5a95..1413f5d5 100644 --- a/chrome/browser/apps/app_service/intent_util_browsertest.cc +++ b/chrome/browser/apps/app_service/intent_util_browsertest.cc
@@ -138,14 +138,14 @@ std::vector<IntentFilterPtr> filters; { - const web_app::WebAppRegistrar& registrar = - web_app::WebAppProvider::GetForTest(browser()->profile())->registrar(); + auto& provider = *web_app::WebAppProvider::GetForTest(browser()->profile()); const web_app::AppId app_id = web_app::InstallWebAppFromManifest(browser(), app_url); - const web_app::WebApp* web_app = registrar.GetAppById(app_id); - GURL scope = registrar.GetAppScope(app_id); - ASSERT_TRUE(web_app); - filters = CreateWebAppIntentFilters(*web_app, scope); + filters = CreateWebAppIntentFilters( + app_id, /*is_note_taking_web_app*/ false, + provider.registrar().GetAppScope(app_id), + provider.registrar().GetAppShareTarget(app_id), + provider.os_integration_manager().GetEnabledFileHandlers(app_id)); } ASSERT_EQ(filters.size(), 3U); @@ -172,14 +172,14 @@ std::vector<IntentFilterPtr> filters; { - const web_app::WebAppRegistrar& registrar = - web_app::WebAppProvider::GetForTest(browser()->profile())->registrar(); + auto& provider = *web_app::WebAppProvider::GetForTest(browser()->profile()); const web_app::AppId app_id = web_app::InstallWebAppFromManifest(browser(), app_url); - const web_app::WebApp* web_app = registrar.GetAppById(app_id); - GURL scope = registrar.GetAppScope(app_id); - ASSERT_TRUE(web_app); - filters = CreateWebAppIntentFilters(*web_app, scope); + filters = CreateWebAppIntentFilters( + app_id, /*is_note_taking_web_app*/ false, + provider.registrar().GetAppScope(app_id), + provider.registrar().GetAppShareTarget(app_id), + provider.os_integration_manager().GetEnabledFileHandlers(app_id)); } ASSERT_EQ(filters.size(), 2U); @@ -203,14 +203,14 @@ std::vector<IntentFilterPtr> filters; { - const web_app::WebAppRegistrar& registrar = - web_app::WebAppProvider::GetForTest(browser()->profile())->registrar(); + auto& provider = *web_app::WebAppProvider::GetForTest(browser()->profile()); const web_app::AppId app_id = web_app::InstallWebAppFromManifest(browser(), app_url); - const web_app::WebApp* web_app = registrar.GetAppById(app_id); - GURL scope = registrar.GetAppScope(app_id); - ASSERT_TRUE(web_app); - filters = CreateWebAppIntentFilters(*web_app, scope); + filters = CreateWebAppIntentFilters( + app_id, /*is_note_taking_web_app*/ false, + provider.registrar().GetAppScope(app_id), + provider.registrar().GetAppShareTarget(app_id), + provider.os_integration_manager().GetEnabledFileHandlers(app_id)); } ASSERT_EQ(filters.size(), 2U);
diff --git a/chrome/browser/apps/app_service/intent_util_unittest.cc b/chrome/browser/apps/app_service/intent_util_unittest.cc index afdd9b24..0001e84f 100644 --- a/chrome/browser/apps/app_service/intent_util_unittest.cc +++ b/chrome/browser/apps/app_service/intent_util_unittest.cc
@@ -182,8 +182,9 @@ GURL scope = web_app->start_url().GetWithoutFilename(); web_app->SetScope(scope); - std::vector<IntentFilterPtr> filters = - apps_util::CreateWebAppIntentFilters(*web_app.get(), scope); + std::vector<IntentFilterPtr> filters = apps_util::CreateWebAppIntentFilters( + web_app->app_id(), /*is_note_taking_web_app*/ false, scope, + /*app_share_target*/ nullptr, /*enabled_file_handlers*/ nullptr); ASSERT_EQ(filters.size(), 1); IntentFilterPtr& filter = filters[0]; @@ -251,8 +252,9 @@ file_handlers.push_back(std::move(file_handler)); web_app->SetFileHandlers(file_handlers); - std::vector<IntentFilterPtr> filters = - apps_util::CreateWebAppIntentFilters(*web_app.get(), scope); + std::vector<IntentFilterPtr> filters = apps_util::CreateWebAppIntentFilters( + web_app->app_id(), /*is_note_taking_web_app*/ false, scope, + /*app_share_target*/ nullptr, &file_handlers); ASSERT_EQ(filters.size(), 2); // 1st filter is URL filter. @@ -285,8 +287,9 @@ GURL new_note_url = scope.Resolve("/new_note.html"); web_app->SetNoteTakingNewNoteUrl(new_note_url); - std::vector<IntentFilterPtr> filters = - apps_util::CreateWebAppIntentFilters(*web_app.get(), scope); + std::vector<IntentFilterPtr> filters = apps_util::CreateWebAppIntentFilters( + web_app->app_id(), /*is_note_taking_web_app*/ true, scope, + /*app_share_target*/ nullptr, /*enabled_file_handlers*/ nullptr); ASSERT_EQ(filters.size(), 2);
diff --git a/chrome/browser/ash/crosapi/BUILD.gn b/chrome/browser/ash/crosapi/BUILD.gn index fcc6c04..0f23c795 100644 --- a/chrome/browser/ash/crosapi/BUILD.gn +++ b/chrome/browser/ash/crosapi/BUILD.gn
@@ -108,6 +108,8 @@ "lacros_availability_policy_observer.h", "local_printer_ash.cc", "local_printer_ash.h", + "login_ash.cc", + "login_ash.h", "login_state_ash.cc", "login_state_ash.h", "message_center_ash.cc",
diff --git a/chrome/browser/ash/crosapi/browser_manager.cc b/chrome/browser/ash/crosapi/browser_manager.cc index 95c00f7..c81f4c02 100644 --- a/chrome/browser/ash/crosapi/browser_manager.cc +++ b/chrome/browser/ash/crosapi/browser_manager.cc
@@ -147,19 +147,6 @@ "lacros_cannot_launch_notification_id"; constexpr char kLacrosLauncherNotifierID[] = "lacros_launcher"; -// To be sure the lacros is running with neutral priority -class ThreadPriorityDelegate : public base::LaunchOptions::PreExecDelegate { - public: - void RunAsyncSafe() override { - // TODO(crbug.com/1289736): Currently, this is causing some deadlock issue. - // It looks like inside the function, we seem to call async unsafe API. - // For the mitigation, disabling this temporarily. - // We should revisit here, and see the impact of performance. - // base::PlatformThread::SetCurrentThreadPriority( - // base::ThreadPriority::NORMAL); - } -}; - base::FilePath LacrosLogPath() { return browser_util::GetUserDataDir().Append("lacros.log"); } @@ -305,10 +292,14 @@ : public base::LaunchOptions::PreExecDelegate { public: void RunAsyncSafe() override { + // TODO(crbug.com/1289736): Currently, this is causing some deadlock issue. + // It looks like inside the function, we seem to call async unsafe API. + // For the mitigation, disabling this temporarily. + // We should revisit here, and see the impact of performance. // SetCurrentThreadPriority() needs file I/O on /proc and /sys. - base::ScopedAllowBlocking allow_blocking; - base::PlatformThread::SetCurrentThreadPriority( - base::ThreadPriority::NORMAL); + // base::ScopedAllowBlocking allow_blocking; + // base::PlatformThread::SetCurrentThreadPriority( + // base::ThreadPriority::NORMAL); } };
diff --git a/chrome/browser/ash/crosapi/browser_util.cc b/chrome/browser/ash/crosapi/browser_util.cc index b4def30..73f0afbe 100644 --- a/chrome/browser/ash/crosapi/browser_util.cc +++ b/chrome/browser/ash/crosapi/browser_util.cc
@@ -253,7 +253,7 @@ } static_assert( - crosapi::mojom::Crosapi::Version_ == 62, + crosapi::mojom::Crosapi::Version_ == 63, "if you add a new crosapi, please add it to kInterfaceVersionEntries"); } // namespace
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.cc b/chrome/browser/ash/crosapi/crosapi_ash.cc index e510fe5c..5d2c555 100644 --- a/chrome/browser/ash/crosapi/crosapi_ash.cc +++ b/chrome/browser/ash/crosapi/crosapi_ash.cc
@@ -46,6 +46,7 @@ #include "chrome/browser/ash/crosapi/keystore_service_ash.h" #include "chrome/browser/ash/crosapi/kiosk_session_service_ash.h" #include "chrome/browser/ash/crosapi/local_printer_ash.h" +#include "chrome/browser/ash/crosapi/login_ash.h" #include "chrome/browser/ash/crosapi/login_state_ash.h" #include "chrome/browser/ash/crosapi/message_center_ash.h" #include "chrome/browser/ash/crosapi/metrics_reporting_ash.h" @@ -152,6 +153,7 @@ keystore_service_ash_(std::make_unique<KeystoreServiceAsh>()), kiosk_session_service_ash_(std::make_unique<KioskSessionServiceAsh>()), local_printer_ash_(std::make_unique<LocalPrinterAsh>()), + login_ash_(std::make_unique<LoginAsh>()), login_state_ash_(std::make_unique<LoginStateAsh>()), message_center_ash_(std::make_unique<MessageCenterAsh>()), metrics_reporting_ash_(std::make_unique<MetricsReportingAsh>( @@ -341,6 +343,11 @@ local_printer_ash_->BindReceiver(std::move(receiver)); } +void CrosapiAsh::BindLogin( + mojo::PendingReceiver<crosapi::mojom::Login> receiver) { + login_ash_->BindReceiver(std::move(receiver)); +} + void CrosapiAsh::BindLoginState( mojo::PendingReceiver<crosapi::mojom::LoginState> receiver) { login_state_ash_->BindReceiver(std::move(receiver));
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.h b/chrome/browser/ash/crosapi/crosapi_ash.h index b1bfa052..a96ab0f 100644 --- a/chrome/browser/ash/crosapi/crosapi_ash.h +++ b/chrome/browser/ash/crosapi/crosapi_ash.h
@@ -49,6 +49,7 @@ class KeystoreServiceAsh; class KioskSessionServiceAsh; class LocalPrinterAsh; +class LoginAsh; class LoginStateAsh; class MessageCenterAsh; class MetricsReportingAsh; @@ -154,6 +155,7 @@ mojo::PendingReceiver<mojom::KioskSessionService> receiver) override; void BindLocalPrinter( mojo::PendingReceiver<mojom::LocalPrinter> receiver) override; + void BindLogin(mojo::PendingReceiver<mojom::Login> receiver) override; void BindLoginState( mojo::PendingReceiver<mojom::LoginState> receiver) override; void BindMessageCenter( @@ -266,6 +268,8 @@ return keystore_service_ash_.get(); } + LoginAsh* login_ash() { return login_ash_.get(); } + LoginStateAsh* login_state_ash() { return login_state_ash_.get(); } StructuredMetricsServiceAsh* structured_metrics_service_ash() { @@ -305,6 +309,7 @@ std::unique_ptr<KeystoreServiceAsh> keystore_service_ash_; std::unique_ptr<KioskSessionServiceAsh> kiosk_session_service_ash_; std::unique_ptr<LocalPrinterAsh> local_printer_ash_; + std::unique_ptr<LoginAsh> login_ash_; std::unique_ptr<LoginStateAsh> login_state_ash_; std::unique_ptr<MessageCenterAsh> message_center_ash_; std::unique_ptr<MetricsReportingAsh> metrics_reporting_ash_;
diff --git a/chrome/browser/ash/crosapi/crosapi_util.cc b/chrome/browser/ash/crosapi/crosapi_util.cc index 2b2873a4..184628d 100644 --- a/chrome/browser/ash/crosapi/crosapi_util.cc +++ b/chrome/browser/ash/crosapi/crosapi_util.cc
@@ -54,6 +54,7 @@ #include "chromeos/crosapi/mojom/kiosk_session_service.mojom.h" #include "chromeos/crosapi/mojom/launcher_search.mojom.h" #include "chromeos/crosapi/mojom/local_printer.mojom.h" +#include "chromeos/crosapi/mojom/login.mojom.h" #include "chromeos/crosapi/mojom/login_state.mojom.h" #include "chromeos/crosapi/mojom/message_center.mojom.h" #include "chromeos/crosapi/mojom/metrics_reporting.mojom.h" @@ -182,6 +183,7 @@ MakeInterfaceVersionEntry<crosapi::mojom::KeystoreService>(), MakeInterfaceVersionEntry<crosapi::mojom::KioskSessionService>(), MakeInterfaceVersionEntry<crosapi::mojom::LocalPrinter>(), + MakeInterfaceVersionEntry<crosapi::mojom::Login>(), MakeInterfaceVersionEntry<crosapi::mojom::LoginState>(), MakeInterfaceVersionEntry< chromeos::machine_learning::mojom::MachineLearningService>(),
diff --git a/chrome/browser/ash/crosapi/login_ash.cc b/chrome/browser/ash/crosapi/login_ash.cc new file mode 100644 index 0000000..6f3a7b6e --- /dev/null +++ b/chrome/browser/ash/crosapi/login_ash.cc
@@ -0,0 +1,246 @@ +// Copyright 2021 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/ash/crosapi/login_ash.h" + +#include "ash/components/login/auth/user_context.h" +#include "chrome/browser/ash/login/existing_user_controller.h" +#include "chrome/browser/ash/profiles/profile_helper.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/extensions/login_screen/login/errors.h" +#include "chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.h" +#include "chrome/browser/chromeos/extensions/login_screen/login/shared_session_handler.h" +#include "chrome/browser/lifetime/application_lifetime.h" +#include "chrome/common/pref_names.h" +#include "chromeos/crosapi/mojom/login.mojom.h" +#include "components/session_manager/core/session_manager.h" +#include "components/user_manager/user.h" +#include "components/user_manager/user_manager.h" +#include "components/user_manager/user_type.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "third_party/abseil-cpp/absl/types/optional.h" +#include "ui/base/user_activity/user_activity_detector.h" + +namespace crosapi { + +LoginAsh::LoginAsh() = default; +LoginAsh::~LoginAsh() = default; + +void LoginAsh::BindReceiver(mojo::PendingReceiver<mojom::Login> receiver) { + receivers_.Add(this, std::move(receiver)); +} + +void LoginAsh::LaunchManagedGuestSession( + const absl::optional<std::string>& password, + LaunchManagedGuestSessionCallback callback) { + ui::UserActivityDetector::Get()->HandleExternalUserActivity(); + + if (session_manager::SessionManager::Get()->session_state() != + session_manager::SessionState::LOGIN_PRIMARY) { + std::move(callback).Run( + extensions::login_api_errors::kAlreadyActiveSession); + return; + } + + auto* existing_user_controller = + ash::ExistingUserController::current_controller(); + if (existing_user_controller->IsSigninInProgress()) { + std::move(callback).Run( + extensions::login_api_errors::kAnotherLoginAttemptInProgress); + return; + } + + user_manager::UserManager* user_manager = user_manager::UserManager::Get(); + for (const user_manager::User* user : user_manager->GetUsers()) { + if (!user || user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) + continue; + ash::UserContext context(user_manager::USER_TYPE_PUBLIC_ACCOUNT, + user->GetAccountId()); + if (password) { + context.SetKey(chromeos::Key(*password)); + context.SetCanLockManagedGuestSession(true); + } + + existing_user_controller->Login(context, ash::SigninSpecifics()); + std::move(callback).Run(absl::nullopt); + return; + } + std::move(callback).Run( + extensions::login_api_errors::kNoManagedGuestSessionAccounts); +} + +void LoginAsh::ExitCurrentSession( + const absl::optional<std::string>& data_for_next_login_attempt, + ExitCurrentSessionCallback callback) { + PrefService* local_state = g_browser_process->local_state(); + DCHECK(local_state); + + if (data_for_next_login_attempt) { + local_state->SetString(prefs::kLoginExtensionApiDataForNextLoginAttempt, + *data_for_next_login_attempt); + } else { + local_state->ClearPref(prefs::kLoginExtensionApiDataForNextLoginAttempt); + } + + chrome::AttemptUserExit(); + std::move(callback).Run(absl::nullopt); +} + +void LoginAsh::FetchDataForNextLoginAttempt( + FetchDataForNextLoginAttemptCallback callback) { + PrefService* local_state = g_browser_process->local_state(); + DCHECK(local_state); + std::string data_for_next_login_attempt = + local_state->GetString(prefs::kLoginExtensionApiDataForNextLoginAttempt); + local_state->ClearPref(prefs::kLoginExtensionApiDataForNextLoginAttempt); + + std::move(callback).Run(data_for_next_login_attempt); +} + +void LoginAsh::LockManagedGuestSession( + LockManagedGuestSessionCallback callback) { + ui::UserActivityDetector::Get()->HandleExternalUserActivity(); + + const user_manager::UserManager* user_manager = + user_manager::UserManager::Get(); + const user_manager::User* active_user = user_manager->GetActiveUser(); + if (!active_user || + active_user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT || + !user_manager->CanCurrentUserLock()) { + std::move(callback).Run( + extensions::login_api_errors::kNoLockableManagedGuestSession); + return; + } + + if (session_manager::SessionManager::Get()->session_state() != + session_manager::SessionState::ACTIVE) { + std::move(callback).Run(extensions::login_api_errors::kSessionIsNotActive); + return; + } + + chromeos::LoginApiLockHandler::Get()->RequestLockScreen(); + std::move(callback).Run(absl::nullopt); +} + +void LoginAsh::UnlockManagedGuestSession( + const std::string& password, + UnlockManagedGuestSessionCallback callback) { + ui::UserActivityDetector::Get()->HandleExternalUserActivity(); + + const user_manager::UserManager* user_manager = + user_manager::UserManager::Get(); + const user_manager::User* active_user = user_manager->GetActiveUser(); + if (!active_user || + active_user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT || + !user_manager->CanCurrentUserLock()) { + std::move(callback).Run( + extensions::login_api_errors::kNoUnlockableManagedGuestSession); + return; + } + + if (session_manager::SessionManager::Get()->session_state() != + session_manager::SessionState::LOCKED) { + std::move(callback).Run(extensions::login_api_errors::kSessionIsNotLocked); + return; + } + + chromeos::LoginApiLockHandler* handler = chromeos::LoginApiLockHandler::Get(); + if (handler->IsUnlockInProgress()) { + std::move(callback).Run( + extensions::login_api_errors::kAnotherUnlockAttemptInProgress); + return; + } + + ash::UserContext context(user_manager::USER_TYPE_PUBLIC_ACCOUNT, + active_user->GetAccountId()); + context.SetKey(chromeos::Key(password)); + handler->Authenticate( + context, base::BindOnce(&LoginAsh::OnScreenLockerAuthenticate, + weak_factory_.GetWeakPtr(), std::move(callback))); +} + +void LoginAsh::LaunchSharedManagedGuestSession( + const std::string& password, + LaunchSharedManagedGuestSessionCallback callback) { + ui::UserActivityDetector::Get()->HandleExternalUserActivity(); + + absl::optional<std::string> error = + chromeos::SharedSessionHandler::Get()->LaunchSharedManagedGuestSession( + password); + if (error) { + std::move(callback).Run(error); + return; + } + + std::move(callback).Run(absl::nullopt); +} + +void LoginAsh::EnterSharedSession(const std::string& password, + EnterSharedSessionCallback callback) { + ui::UserActivityDetector::Get()->HandleExternalUserActivity(); + + chromeos::SharedSessionHandler::Get()->EnterSharedSession( + password, + base::BindOnce(&LoginAsh::OnOptionalErrorCallbackComplete, + weak_factory_.GetWeakPtr(), std::move(callback))); +} + +void LoginAsh::UnlockSharedSession(const std::string& password, + UnlockSharedSessionCallback callback) { + ui::UserActivityDetector::Get()->HandleExternalUserActivity(); + + const user_manager::UserManager* user_manager = + user_manager::UserManager::Get(); + const user_manager::User* active_user = user_manager->GetActiveUser(); + if (!active_user || + active_user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT || + !user_manager->CanCurrentUserLock()) { + std::move(callback).Run( + extensions::login_api_errors::kNoUnlockableManagedGuestSession); + return; + } + + chromeos::SharedSessionHandler::Get()->UnlockSharedSession( + password, + base::BindOnce(&LoginAsh::OnOptionalErrorCallbackComplete, + weak_factory_.GetWeakPtr(), std::move(callback))); +} + +void LoginAsh::EndSharedSession(EndSharedSessionCallback callback) { + chromeos::SharedSessionHandler::Get()->EndSharedSession( + base::BindOnce(&LoginAsh::OnOptionalErrorCallbackComplete, + weak_factory_.GetWeakPtr(), std::move(callback))); +} + +void LoginAsh::SetDataForNextLoginAttempt( + const std::string& data_for_next_login_attempt, + SetDataForNextLoginAttemptCallback callback) { + PrefService* local_state = g_browser_process->local_state(); + DCHECK(local_state); + local_state->SetString(prefs::kLoginExtensionApiDataForNextLoginAttempt, + data_for_next_login_attempt); + + std::move(callback).Run(); +} + +void LoginAsh::OnScreenLockerAuthenticate( + base::OnceCallback<void(const absl::optional<std::string>&)> callback, + bool success) { + if (!success) { + std::move(callback).Run( + extensions::login_api_errors::kAuthenticationFailed); + return; + } + + std::move(callback).Run(absl::nullopt); +} + +void LoginAsh::OnOptionalErrorCallbackComplete( + base::OnceCallback<void(const absl::optional<std::string>&)> callback, + absl::optional<std::string> error) { + std::move(callback).Run(error); +} + +} // namespace crosapi
diff --git a/chrome/browser/ash/crosapi/login_ash.h b/chrome/browser/ash/crosapi/login_ash.h new file mode 100644 index 0000000..add7289 --- /dev/null +++ b/chrome/browser/ash/crosapi/login_ash.h
@@ -0,0 +1,66 @@ +// Copyright 2021 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_ASH_CROSAPI_LOGIN_ASH_H_ +#define CHROME_BROWSER_ASH_CROSAPI_LOGIN_ASH_H_ + +#include "base/memory/weak_ptr.h" +#include "base/scoped_observation.h" +#include "chromeos/crosapi/mojom/login.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver_set.h" + +namespace crosapi { + +// The ash-chrome implementation of the Login crosapi interface. +class LoginAsh : public mojom::Login { + public: + LoginAsh(); + LoginAsh(const LoginAsh&) = delete; + LoginAsh& operator=(const LoginAsh&) = delete; + ~LoginAsh() override; + + void BindReceiver(mojo::PendingReceiver<mojom::Login> receiver); + + // crosapi::mojom::Login: + void LaunchManagedGuestSession( + const absl::optional<std::string>& password, + LaunchManagedGuestSessionCallback callback) override; + void ExitCurrentSession( + const absl::optional<std::string>& data_for_next_login_attempt, + ExitCurrentSessionCallback callback) override; + void FetchDataForNextLoginAttempt( + FetchDataForNextLoginAttemptCallback callback) override; + void LockManagedGuestSession( + LockManagedGuestSessionCallback callback) override; + void UnlockManagedGuestSession( + const std::string& password, + UnlockManagedGuestSessionCallback callback) override; + void LaunchSharedManagedGuestSession( + const std::string& password, + LaunchSharedManagedGuestSessionCallback callback) override; + void EnterSharedSession(const std::string& password, + EnterSharedSessionCallback callback) override; + void UnlockSharedSession(const std::string& password, + UnlockSharedSessionCallback callback) override; + void EndSharedSession(EndSharedSessionCallback callback) override; + void SetDataForNextLoginAttempt( + const std::string& data_for_next_login_attempt, + SetDataForNextLoginAttemptCallback callback) override; + + private: + void OnScreenLockerAuthenticate( + base::OnceCallback<void(const absl::optional<std::string>&)> callback, + bool success); + void OnOptionalErrorCallbackComplete( + base::OnceCallback<void(const absl::optional<std::string>&)> callback, + absl::optional<std::string> error); + + mojo::ReceiverSet<mojom::Login> receivers_; + base::WeakPtrFactory<LoginAsh> weak_factory_{this}; +}; + +} // namespace crosapi + +#endif // CHROME_BROWSER_ASH_CROSAPI_LOGIN_ASH_H_
diff --git a/chrome/browser/ash/login/challenge_response_auth_keys_loader.cc b/chrome/browser/ash/login/challenge_response_auth_keys_loader.cc index 9515f6d..8909ab6 100644 --- a/chrome/browser/ash/login/challenge_response_auth_keys_loader.cc +++ b/chrome/browser/ash/login/challenge_response_auth_keys_loader.cc
@@ -23,6 +23,7 @@ #include "chrome/browser/ash/certificate_provider/certificate_provider_service.h" #include "chrome/browser/ash/certificate_provider/certificate_provider_service_factory.h" #include "chrome/browser/ash/profiles/profile_helper.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile.h" #include "components/account_id/account_id.h" #include "components/prefs/pref_service.h" @@ -84,7 +85,8 @@ std::vector<std::string>* spki_items, base::flat_set<std::string>* extension_ids) { const base::Value known_user_value = - user_manager::known_user::GetChallengeResponseKeys(account_id); + user_manager::KnownUser(g_browser_process->local_state()) + .GetChallengeResponseKeys(account_id); std::vector<DeserializedChallengeResponseKey> deserialized_challenge_response_keys; DeserializeChallengeResponseKeyFromKnownUser(
diff --git a/chrome/browser/ash/login/challenge_response_auth_keys_loader_browsertest.cc b/chrome/browser/ash/login/challenge_response_auth_keys_loader_browsertest.cc index 7145c94c..e66de3f 100644 --- a/chrome/browser/ash/login/challenge_response_auth_keys_loader_browsertest.cc +++ b/chrome/browser/ash/login/challenge_response_auth_keys_loader_browsertest.cc
@@ -17,6 +17,7 @@ #include "chrome/browser/ash/login/test/device_state_mixin.h" #include "chrome/browser/ash/login/test/oobe_base_test.h" #include "chrome/browser/ash/profiles/profile_helper.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/policy/extension_force_install_mixin.h" #include "chrome/browser/profiles/profile.h" #include "components/account_id/account_id.h" @@ -66,7 +67,8 @@ GetProfile(), &device_state_mixin_); // Register the ChallengeResponseKey for the user. - user_manager::known_user::SaveKnownUser(account_id_); + user_manager::KnownUser(g_browser_process->local_state()) + .SaveKnownUser(account_id_); } void TearDownOnMainThread() override { @@ -85,8 +87,9 @@ challenge_response_keys.push_back(challenge_response_key); base::Value challenge_response_keys_value = SerializeChallengeResponseKeysForKnownUser(challenge_response_keys); - user_manager::known_user::SetChallengeResponseKeys( - account_id_, std::move(challenge_response_keys_value)); + user_manager::KnownUser(g_browser_process->local_state()) + .SetChallengeResponseKeys(account_id_, + std::move(challenge_response_keys_value)); } void OnAvailableKeysLoaded(
diff --git a/chrome/browser/ash/login/login_manager_test.cc b/chrome/browser/ash/login/login_manager_test.cc index b2ef8043..13fe741 100644 --- a/chrome/browser/ash/login/login_manager_test.cc +++ b/chrome/browser/ash/login/login_manager_test.cc
@@ -68,7 +68,8 @@ if (!base::Contains(users_pref->GetList(), email_value)) users_pref->Append(std::move(email_value)); if (user_manager::UserManager::IsInitialized()) { - user_manager::known_user::SaveKnownUser(account_id); + user_manager::KnownUser(g_browser_process->local_state()) + .SaveKnownUser(account_id); user_manager::UserManager::Get()->SaveUserOAuthStatus( account_id, user_manager::User::OAUTH2_TOKEN_STATUS_VALID); }
diff --git a/chrome/browser/ash/login/security_token_login_browsertest.cc b/chrome/browser/ash/login/security_token_login_browsertest.cc index c95bdd13..d8dfec7d 100644 --- a/chrome/browser/ash/login/security_token_login_browsertest.cc +++ b/chrome/browser/ash/login/security_token_login_browsertest.cc
@@ -52,9 +52,7 @@ #include "components/policy/core/browser/browser_policy_connector.h" #include "components/policy/core/common/mock_configuration_policy_provider.h" #include "components/session_manager/session_manager_types.h" -#include "components/user_manager/fake_user_manager.h" #include "components/user_manager/known_user.h" -#include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/user_manager.h" #include "content/public/test/browser_test.h" #include "extensions/common/features/simple_feature.h" @@ -331,13 +329,6 @@ private: void RegisterChallengeResponseKey() { - // The global user manager is not created until after the Local State is - // initialized, but in order for the user_manager::known_user:: methods to - // work we create a temporary instance of the user manager here. - auto user_manager = std::make_unique<user_manager::FakeUserManager>(); - user_manager->set_local_state(g_browser_process->local_state()); - user_manager::ScopedUserManager scoper(std::move(user_manager)); - ChallengeResponseKey challenge_response_key; challenge_response_key.set_public_key_spki_der( TestCertificateProviderExtension::GetCertificateSpki()); @@ -346,9 +337,9 @@ base::Value challenge_response_keys_value = SerializeChallengeResponseKeysForKnownUser({challenge_response_key}); - user_manager::known_user::SetChallengeResponseKeys( - GetChallengeResponseAccountId(), - std::move(challenge_response_keys_value)); + user_manager::KnownUser(g_browser_process->local_state()) + .SetChallengeResponseKeys(GetChallengeResponseAccountId(), + std::move(challenge_response_keys_value)); } // Bypass "signin_screen" feature only enabled for allowlisted extensions.
diff --git a/chrome/browser/ash/login/security_token_session_controller.cc b/chrome/browser/ash/login/security_token_session_controller.cc index 3510d59..dfa02fc 100644 --- a/chrome/browser/ash/login/security_token_session_controller.cc +++ b/chrome/browser/ash/login/security_token_session_controller.cc
@@ -117,13 +117,14 @@ // Loads the persistently stored information about the challenge-response keys // that can be used for authenticating the user. void LoadStoredChallengeResponseSpkiKeysForUser( + PrefService* local_state, const AccountId& account_id, base::flat_map<std::string, std::vector<std::string>>* extension_to_spkis, base::flat_set<std::string>* extension_ids) { // TODO(crbug.com/1164373) This approach does not work for ephemeral users. // Instead, only get the certificate that was actually used on the last login. const base::Value known_user_value = - user_manager::known_user::GetChallengeResponseKeys(account_id); + user_manager::KnownUser(local_state).GetChallengeResponseKeys(account_id); std::vector<DeserializedChallengeResponseKey> deserialized_challenge_response_keys; DeserializeChallengeResponseKeyFromKnownUser( @@ -172,7 +173,8 @@ certificate_provider_ = certificate_provider_service_->CreateCertificateProvider(); LoadStoredChallengeResponseSpkiKeysForUser( - user_->GetAccountId(), &extension_to_spkis_, &observed_extensions_); + local_state_, user_->GetAccountId(), &extension_to_spkis_, + &observed_extensions_); UpdateNotificationPref(); behavior_ = GetBehaviorFromPref(); pref_change_registrar_.Init(profile_prefs_); @@ -202,7 +204,8 @@ extension_to_spkis_.clear(); observed_extensions_.clear(); LoadStoredChallengeResponseSpkiKeysForUser( - user_->GetAccountId(), &extension_to_spkis_, &observed_extensions_); + local_state_, user_->GetAccountId(), &extension_to_spkis_, + &observed_extensions_); } void SecurityTokenSessionController::OnCertificatesUpdated(
diff --git a/chrome/browser/ash/login/session/user_session_manager.cc b/chrome/browser/ash/login/session/user_session_manager.cc index 46cf7d6..cd98d96 100644 --- a/chrome/browser/ash/login/session/user_session_manager.cc +++ b/chrome/browser/ash/login/session/user_session_manager.cc
@@ -395,10 +395,10 @@ // authentication, persistently in the known_user database for future // authentication attempts. void PersistChallengeResponseKeys(const UserContext& user_context) { - user_manager::known_user::SetChallengeResponseKeys( - user_context.GetAccountId(), - SerializeChallengeResponseKeysForKnownUser( - user_context.GetChallengeResponseKeys())); + user_manager::KnownUser(g_browser_process->local_state()) + .SetChallengeResponseKeys(user_context.GetAccountId(), + SerializeChallengeResponseKeysForKnownUser( + user_context.GetChallengeResponseKeys())); } // Returns true if the user is new, or if the user was already present on the
diff --git a/chrome/browser/ash/login/ui/login_display_host_webui.cc b/chrome/browser/ash/login/ui/login_display_host_webui.cc index a52121ff..b3a1008a 100644 --- a/chrome/browser/ash/login/ui/login_display_host_webui.cc +++ b/chrome/browser/ash/login/ui/login_display_host_webui.cc
@@ -98,8 +98,6 @@ #include "ui/base/ime/ash/input_method_manager.h" #include "ui/base/ime/ash/input_method_util.h" #include "ui/base/resource/resource_bundle.h" -#include "ui/compositor/compositor.h" -#include "ui/compositor/compositor_observer.h" #include "ui/compositor/layer.h" #include "ui/compositor/layer_animation_observer.h" #include "ui/compositor/scoped_layer_animation_settings.h" @@ -365,44 +363,6 @@ client->SetKeyboardConfig(config); } -// Workaround for graphical glitches with animated user avatars due to a race -// between GPU process cleanup for the closing WebContents versus compositor -// draw of new animation frames. https://crbug.com/759148 -class CloseAfterCommit : public ui::CompositorObserver, - public views::WidgetObserver { - public: - explicit CloseAfterCommit(views::Widget* widget) : widget_(widget) { - widget->GetCompositor()->AddObserver(this); - widget_->AddObserver(this); - } - - CloseAfterCommit(const CloseAfterCommit&) = delete; - CloseAfterCommit& operator=(const CloseAfterCommit&) = delete; - - ~CloseAfterCommit() override { - widget_->RemoveObserver(this); - widget_->GetCompositor()->RemoveObserver(this); - CHECK(!IsInObserverList()); - } - - // ui::CompositorObserver: - void OnCompositingDidCommit(ui::Compositor* compositor) override { - DCHECK_EQ(widget_->GetCompositor(), compositor); - LOG(WARNING) << "Close login widget"; - widget_->Close(); - } - - // views::WidgetObserver: - void OnWidgetDestroying(views::Widget* widget) override { - DCHECK_EQ(widget, widget_); - LOG(WARNING) << "Login widget destroying"; - delete this; - } - - private: - views::Widget* const widget_; -}; - // Returns true if we have default audio device. bool CanPlayStartupSound() { AudioDevice device; @@ -959,10 +919,7 @@ } if (login_window_) { - login_window_->Hide(); - // This CompositorObserver becomes "owned" by login_window_ after - // construction and will delete itself once login_window_ is destroyed. - new CloseAfterCommit(login_window_); + login_window_->CloseWithReason(views::Widget::ClosedReason::kUnspecified); login_window_->RemoveRemovalsObserver(this); login_window_->RemoveObserver(this); login_window_ = nullptr;
diff --git a/chrome/browser/ash/policy/affiliation/affiliation_test_helper.cc b/chrome/browser/ash/policy/affiliation/affiliation_test_helper.cc index 7757f8b4..c8921a4c 100644 --- a/chrome/browser/ash/policy/affiliation/affiliation_test_helper.cc +++ b/chrome/browser/ash/policy/affiliation/affiliation_test_helper.cc
@@ -173,8 +173,8 @@ if (!base::Contains(users_pref->GetList(), email_value)) users_pref->Append(std::move(email_value)); - if (user_manager::UserManager::IsInitialized()) - user_manager::known_user::SaveKnownUser(account_id); + user_manager::KnownUser(g_browser_process->local_state()) + .SaveKnownUser(account_id); ash::StartupUtils::MarkOobeCompleted(); }
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc index 33cda648..52e9301 100644 --- a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc +++ b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc
@@ -74,7 +74,7 @@ // static const base::Feature MetricReportingManager::kEnableNetworkTelemetryReporting{ - "EnableNetworkTelemetryReporting", base::FEATURE_DISABLED_BY_DEFAULT}; + "EnableNetworkTelemetryReporting", base::FEATURE_ENABLED_BY_DEFAULT}; bool MetricReportingManager::Delegate::IsAffiliated(Profile* profile) { const user_manager::User* const user =
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc index f7091e85..4f75ce80 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -33,8 +33,6 @@ #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/crash_upload_list/crash_upload_list.h" #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" #include "chrome/browser/domain_reliability/service_factory.h" #include "chrome/browser/downgrade/user_data_downgrade.h" #include "chrome/browser/download/download_prefs.h" @@ -92,8 +90,6 @@ #include "components/content_settings/core/common/content_settings_pattern.h" #include "components/crash/core/app/crashpad.h" #include "components/custom_handlers/protocol_handler_registry.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "components/device_event_log/device_event_log.h" #include "components/heavy_ad_intervention/heavy_ad_blocklist.h" #include "components/heavy_ad_intervention/heavy_ad_service.h"
diff --git a/chrome/browser/cart/cart_discount_fetcher.cc b/chrome/browser/cart/cart_discount_fetcher.cc index 2e3a51a..505b5322 100644 --- a/chrome/browser/cart/cart_discount_fetcher.cc +++ b/chrome/browser/cart/cart_discount_fetcher.cc
@@ -13,11 +13,11 @@ #include "chrome/browser/cart/cart_db.h" #include "chrome/browser/cart/cart_db_content.pb.h" #include "chrome/browser/cart/cart_discount_metric_collector.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/coupons/coupon_db_content.pb.h" #include "chrome/browser/endpoint_fetcher/endpoint_fetcher.h" #include "chrome/browser/profiles/profile.h" #include "chrome/grit/generated_resources.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/search/ntp_features.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/public/cpp/cross_thread_pending_shared_url_loader_factory.h"
diff --git a/chrome/browser/cart/cart_features.cc b/chrome/browser/cart/cart_features.cc index 067785b..fd40c95 100644 --- a/chrome/browser/cart/cart_features.cc +++ b/chrome/browser/cart/cart_features.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/cart/cart_features.h" #include "base/no_destructor.h" -#include "chrome/browser/commerce/commerce_feature_list.h" +#include "components/commerce/core/commerce_feature_list.h" #include "third_party/re2/src/re2/re2.h" namespace cart_features {
diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_service.cc index 4c74929..d4c559a 100644 --- a/chrome/browser/cart/cart_service.cc +++ b/chrome/browser/cart/cart_service.cc
@@ -12,7 +12,6 @@ #include "chrome/browser/cart/cart_db_content.pb.h" #include "chrome/browser/cart/cart_discount_metric_collector.h" #include "chrome/browser/cart/cart_features.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/coupons/coupon_service_factory.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" @@ -23,6 +22,7 @@ #include "chrome/grit/browser_resources.h" #include "chrome/grit/generated_resources.h" #include "components/autofill/core/browser/data_model/autofill_offer_data.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/optimization_guide/proto/hints.pb.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h"
diff --git a/chrome/browser/cart/cart_service_unittest.cc b/chrome/browser/cart/cart_service_unittest.cc index 825d973..9eb3ffb8 100644 --- a/chrome/browser/cart/cart_service_unittest.cc +++ b/chrome/browser/cart/cart_service_unittest.cc
@@ -10,7 +10,6 @@ #include "chrome/browser/cart/cart_discount_metric_collector.h" #include "chrome/browser/cart/cart_service_factory.h" #include "chrome/browser/cart/fetch_discount_worker.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/coupons/coupon_service.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/persisted_state_db/profile_proto_db.h" @@ -18,6 +17,7 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_profile.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/search/ntp_features.h"
diff --git a/chrome/browser/cart/discount_url_loader.cc b/chrome/browser/cart/discount_url_loader.cc index e331331a..1b267ff 100644 --- a/chrome/browser/cart/discount_url_loader.cc +++ b/chrome/browser/cart/discount_url_loader.cc
@@ -38,7 +38,8 @@ cart_service_->GetDiscountURL( contents->GetVisibleURL(), base::BindOnce(&DiscountURLLoader::NavigateToDiscountURL, - weak_ptr_factory_.GetWeakPtr(), contents)); + weak_ptr_factory_.GetWeakPtr(), + contents->GetWeakPtr())); } last_interacted_url_.reset(); } @@ -52,8 +53,12 @@ browser->tab_strip_model()->RemoveObserver(this); } -void DiscountURLLoader::NavigateToDiscountURL(content::WebContents* contents, - const GURL& discount_url) { +void DiscountURLLoader::NavigateToDiscountURL( + base::WeakPtr<content::WebContents> contents, + const GURL& discount_url) { + if (!contents) { + return; + } contents->GetController().LoadURL(discount_url, content::Referrer(), ui::PAGE_TRANSITION_FIRST, std::string()); }
diff --git a/chrome/browser/cart/discount_url_loader.h b/chrome/browser/cart/discount_url_loader.h index 2ae2a01d..1f8c488 100644 --- a/chrome/browser/cart/discount_url_loader.h +++ b/chrome/browser/cart/discount_url_loader.h
@@ -39,7 +39,7 @@ void OnBrowserRemoved(Browser* browser) override; private: - void NavigateToDiscountURL(content::WebContents* contents, + void NavigateToDiscountURL(base::WeakPtr<content::WebContents> contents, const GURL& discount_url); absl::optional<GURL> last_interacted_url_; raw_ptr<CartService> cart_service_;
diff --git a/chrome/browser/cart/fetch_discount_worker.cc b/chrome/browser/cart/fetch_discount_worker.cc index 30bde5f..e5f6bc89 100644 --- a/chrome/browser/cart/fetch_discount_worker.cc +++ b/chrome/browser/cart/fetch_discount_worker.cc
@@ -10,8 +10,8 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/cart/cart_discount_fetcher.h" #include "chrome/browser/cart/cart_features.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/coupons/coupon_db_content.pb.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/search/ntp_features.h" #include "components/signin/public/identity_manager/access_token_info.h" #include "components/variations/variations.mojom.h"
diff --git a/chrome/browser/cart/fetch_discount_worker_browsertest.cc b/chrome/browser/cart/fetch_discount_worker_browsertest.cc index 4002cf4..b3d8653 100644 --- a/chrome/browser/cart/fetch_discount_worker_browsertest.cc +++ b/chrome/browser/cart/fetch_discount_worker_browsertest.cc
@@ -10,10 +10,10 @@ #include "base/test/test_timeouts.h" #include "chrome/browser/cart/cart_db_content.pb.h" #include "chrome/browser/cart/cart_service.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/persisted_state_db/profile_proto_db.h" #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" #include "chrome/common/pref_names.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/optimization_guide/core/optimization_guide_features.h" #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/cart/fetch_discount_worker_unittest.cc b/chrome/browser/cart/fetch_discount_worker_unittest.cc index fa00b26..8dfc9f0 100644 --- a/chrome/browser/cart/fetch_discount_worker_unittest.cc +++ b/chrome/browser/cart/fetch_discount_worker_unittest.cc
@@ -8,7 +8,6 @@ #include "base/test/task_environment.h" #include "chrome/browser/cart/cart_discount_fetcher.h" #include "chrome/browser/cart/cart_service_factory.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/coupons/coupon_service.h" #include "chrome/browser/commerce/coupons/coupon_service_factory.h" #include "chrome/browser/endpoint_fetcher/endpoint_fetcher.h" @@ -16,6 +15,7 @@ #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_profile.h" #include "components/autofill/core/browser/data_model/autofill_offer_data.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/prefs/pref_service.h" #include "components/search/ntp_features.h" #include "components/signin/public/identity_manager/identity_test_environment.h"
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index 2f2a897..7e6ca1cb 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc
@@ -474,28 +474,6 @@ GoogleUpdateSettings::SetLastRunTime(); } -bool ProcessSingletonNotificationCallback( - const base::CommandLine& command_line, - const base::FilePath& current_directory) { - // Drop the request if the browser process is already shutting down. - // Note that we're going to post an async task below. Even if the browser - // process isn't shutting down right now, it could be by the time the task - // starts running. So, an additional check needs to happen when it starts. - // But regardless of any future check, there is no reason to post the task - // now if we know we're already shutting down. - if (!g_browser_process || g_browser_process->IsShuttingDown()) - return false; - - // In order to handle this request on Windows, there is platform specific - // code in browser_finder.cc that requires making outbound COM calls to - // cross-apartment shell objects (via IVirtualDesktopManager). That is not - // allowed within a SendMessage handler, which this function is a part of. - // So, we post a task to asynchronously finish the command line processing. - return base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&ProcessSingletonNotificationCallbackImpl, - command_line, current_directory)); -} - bool ShouldInstallSodaDuringPostProfileInit( const base::CommandLine& command_line) { #if BUILDFLAG(IS_CHROMEOS_ASH) @@ -966,7 +944,8 @@ #if !BUILDFLAG(IS_ANDROID) process_singleton_ = std::make_unique<ChromeProcessSingleton>( user_data_dir_, - base::BindRepeating(&ProcessSingletonNotificationCallback)); + base::BindRepeating( + &ChromeBrowserMainParts::ProcessSingletonNotificationCallback)); // Cache first run state early. first_run::IsChromeFirstRun(); @@ -1990,4 +1969,28 @@ DCHECK(GetMainRunLoopInstance()); return std::move(GetMainRunLoopInstance()); } + +// static +bool ChromeBrowserMainParts::ProcessSingletonNotificationCallback( + const base::CommandLine& command_line, + const base::FilePath& current_directory) { + // Drop the request if the browser process is already shutting down. + // Note that we're going to post an async task below. Even if the browser + // process isn't shutting down right now, it could be by the time the task + // starts running. So, an additional check needs to happen when it starts. + // But regardless of any future check, there is no reason to post the task + // now if we know we're already shutting down. + if (!g_browser_process || g_browser_process->IsShuttingDown()) + return false; + + // In order to handle this request on Windows, there is platform specific + // code in browser_finder.cc that requires making outbound COM calls to + // cross-apartment shell objects (via IVirtualDesktopManager). That is not + // allowed within a SendMessage handler, which this function is a part of. + // So, we post a task to asynchronously finish the command line processing. + return base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(&ProcessSingletonNotificationCallbackImpl, + command_line, current_directory)); +} + #endif
diff --git a/chrome/browser/chrome_browser_main.h b/chrome/browser/chrome_browser_main.h index d7063be..bfb3509 100644 --- a/chrome/browser/chrome_browser_main.h +++ b/chrome/browser/chrome_browser_main.h
@@ -57,6 +57,15 @@ // by InProcessBrowserTests to allow them to run until the BrowserProcess is // ready for the browser to exit. static std::unique_ptr<base::RunLoop> TakeRunLoopForTest(); + + // Handles notifications from other processes. The function receives the + // command line and directory with which the other Chrome process was + // launched. Return true if the command line will be handled within the + // current browser instance or false if the remote process should handle it + // (i.e., because the current process is shutting down). + static bool ProcessSingletonNotificationCallback( + const base::CommandLine& command_line, + const base::FilePath& current_directory); #endif protected:
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index d38a68e..41a0659 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1336,6 +1336,8 @@ registry->RegisterIntegerPref( prefs::kForceMajorVersionToMinorPositionInUserAgent, embedder_support::ForceMajorVersionToMinorPosition::kDefault); + registry->RegisterBooleanPref( + policy::policy_prefs::kWindowPlacementAlwaysAllowed, false); } // static @@ -2551,8 +2553,7 @@ Profile* profile = Profile::FromBrowserContext(browser_context); return profile && data_reduction_proxy::DataReductionProxySettings:: - IsDataSaverEnabledByUser(profile->IsOffTheRecord(), - profile->GetPrefs()); + IsDataSaverEnabledByUser(profile->IsOffTheRecord()); } void ChromeContentBrowserClient::UpdateRendererPreferencesForWorker( @@ -3637,6 +3638,9 @@ prefs->GetBoolean(prefs::kWebXRImmersiveArEnabled); #endif + web_prefs->window_placement_always_allowed = + prefs->GetBoolean(policy::policy_prefs::kWindowPlacementAlwaysAllowed); + for (ChromeContentBrowserClientParts* parts : extra_parts_) parts->OverrideWebkitPrefs(web_contents, web_prefs); }
diff --git a/chrome/browser/chrome_content_browser_client_receiver_bindings.cc b/chrome/browser/chrome_content_browser_client_receiver_bindings.cc index 42b1f58..7c99f751 100644 --- a/chrome/browser/chrome_content_browser_client_receiver_bindings.cc +++ b/chrome/browser/chrome_content_browser_client_receiver_bindings.cc
@@ -15,8 +15,6 @@ #include "chrome/browser/chrome_browser_interface_binders.h" #include "chrome/browser/chrome_content_browser_client_parts.h" #include "chrome/browser/content_settings/content_settings_manager_delegate.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" #include "chrome/browser/headless/headless_mode_util.h" #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" #include "chrome/browser/net/net_error_tab_helper.h" @@ -30,7 +28,6 @@ #include "components/autofill_assistant/content/browser/content_autofill_assistant_driver.h" #include "components/autofill_assistant/content/common/autofill_assistant_driver.mojom.h" #include "components/content_capture/browser/onscreen_content_provider.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h" #include "components/metrics/call_stack_profile_collector.h" #include "components/offline_pages/buildflags/buildflags.h" #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 06a505b6..f99f4a4 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -3503,10 +3503,12 @@ "extensions/login_screen/login/cleanup/open_windows_cleanup_handler.h", "extensions/login_screen/login/cleanup/print_jobs_cleanup_handler.cc", "extensions/login_screen/login/cleanup/print_jobs_cleanup_handler.h", - "extensions/login_screen/login/login_api.cc", - "extensions/login_screen/login/login_api.h", + "extensions/login_screen/login/errors.cc", + "extensions/login_screen/login/errors.h", "extensions/login_screen/login/login_api_lock_handler.cc", "extensions/login_screen/login/login_api_lock_handler.h", + "extensions/login_screen/login/prefs.cc", + "extensions/login_screen/login/prefs.h", "extensions/login_screen/login/shared_session_handler.cc", "extensions/login_screen/login/shared_session_handler.h", "extensions/login_screen/login_screen_storage/login_screen_storage_api.cc",
diff --git a/chrome/browser/chromeos/extensions/login_screen/BUILD.gn b/chrome/browser/chromeos/extensions/login_screen/BUILD.gn index b14a54c..1a5b485 100644 --- a/chrome/browser/chromeos/extensions/login_screen/BUILD.gn +++ b/chrome/browser/chromeos/extensions/login_screen/BUILD.gn
@@ -10,6 +10,8 @@ source_set("login_screen") { sources = [ + "login/login_api.cc", + "login/login_api.h", "login_state/login_state_api.cc", "login_state/login_state_api.h", "login_state/session_state_changed_event_dispatcher.cc", @@ -36,6 +38,7 @@ } } +# TODO(jityao, b/215502706): Move tests back into chrome/test/BUILD.gn. source_set("browser_tests") { testonly = true defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/errors.cc b/chrome/browser/chromeos/extensions/login_screen/login/errors.cc new file mode 100644 index 0000000..5472ae70 --- /dev/null +++ b/chrome/browser/chromeos/extensions/login_screen/login/errors.cc
@@ -0,0 +1,41 @@ +// Copyright 2021 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/extensions/login_screen/login/errors.h" + +namespace extensions { + +namespace login_api_errors { + +const char kAlreadyActiveSession[] = "There is already an active session"; +const char kLoginScreenIsNotActive[] = "Login screen is not active"; +const char kAnotherLoginAttemptInProgress[] = + "Another login attempt is in progress"; +const char kNoManagedGuestSessionAccounts[] = + "No managed guest session accounts"; +const char kNoLockableManagedGuestSession[] = + "There is no lockable Managed Guest Session"; +const char kSessionIsNotActive[] = "Session is not active"; +const char kNoUnlockableManagedGuestSession[] = + "There is no unlockable Managed Guest Session"; +const char kSessionIsNotLocked[] = "Session is not locked"; +const char kAnotherUnlockAttemptInProgress[] = + "Another unlock attempt is in progress"; +const char kSharedMGSAlreadyLaunched[] = + "Shared Managed Guest Session has already been launched"; +const char kAuthenticationFailed[] = "Authentication failed"; +const char kNoSharedMGSFound[] = "No shared Managed Guest Session found"; +const char kSharedSessionIsNotActive[] = "Shared session is not active"; +const char kSharedSessionAlreadyLaunched[] = + "Another shared session has already been launched"; +const char kScryptFailure[] = "Scrypt failed"; +const char kCleanupInProgress[] = "Cleanup is already in progress"; +const char kUnlockFailure[] = "Managed Guest Session unlock failed"; +const char kDeviceRestrictedManagedGuestSessionNotEnabled[] = + "DeviceRestrictedManagedGuestSessionEnabled policy is not enabled for " + "shared kiosk mode"; + +} // namespace login_api_errors + +} // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/errors.h b/chrome/browser/chromeos/extensions/login_screen/login/errors.h new file mode 100644 index 0000000..dfc92f8 --- /dev/null +++ b/chrome/browser/chromeos/extensions/login_screen/login/errors.h
@@ -0,0 +1,35 @@ +// Copyright 2021 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_EXTENSIONS_LOGIN_SCREEN_LOGIN_ERRORS_H_ +#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_ERRORS_H_ + +namespace extensions { + +namespace login_api_errors { + +extern const char kAlreadyActiveSession[]; +extern const char kLoginScreenIsNotActive[]; +extern const char kAnotherLoginAttemptInProgress[]; +extern const char kNoManagedGuestSessionAccounts[]; +extern const char kNoLockableManagedGuestSession[]; +extern const char kSessionIsNotActive[]; +extern const char kNoUnlockableManagedGuestSession[]; +extern const char kSessionIsNotLocked[]; +extern const char kAnotherUnlockAttemptInProgress[]; +extern const char kAuthenticationFailed[]; +extern const char kSharedMGSAlreadyLaunched[]; +extern const char kNoSharedMGSFound[]; +extern const char kSharedSessionIsNotActive[]; +extern const char kSharedSessionAlreadyLaunched[]; +extern const char kScryptFailure[]; +extern const char kCleanupInProgress[]; +extern const char kUnlockFailure[]; +extern const char kDeviceRestrictedManagedGuestSessionNotEnabled[]; + +} // namespace login_api_errors + +} // namespace extensions + +#endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_ERRORS_H_
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_api.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_api.cc index aa4017f..dc4e359c 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login/login_api.cc +++ b/chrome/browser/chromeos/extensions/login_screen/login/login_api.cc
@@ -6,70 +6,78 @@ #include <memory> #include <string> +#include <utility> -#include "ash/components/login/auth/key.h" -#include "ash/components/login/auth/user_context.h" #include "base/bind.h" #include "base/logging.h" #include "base/values.h" -#include "chrome/browser/ash/login/existing_user_controller.h" -#include "chrome/browser/ash/login/signin_specifics.h" -#include "chrome/browser/ash/profiles/profile_helper.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.h" -#include "chrome/browser/chromeos/extensions/login_screen/login/shared_session_handler.h" -#include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/common/extensions/api/login.h" -#include "chrome/common/pref_names.h" -#include "components/prefs/pref_service.h" -#include "components/session_manager/core/session_manager.h" -#include "components/user_manager/user.h" -#include "components/user_manager/user_manager.h" -#include "components/user_manager/user_type.h" -#include "ui/base/user_activity/user_activity_detector.h" +#include "third_party/abseil-cpp/absl/types/optional.h" + +#if BUILDFLAG(IS_CHROMEOS_LACROS) +#include "chromeos/lacros/lacros_service.h" +#else +#include "chrome/browser/ash/crosapi/crosapi_ash.h" +#include "chrome/browser/ash/crosapi/crosapi_manager.h" +#include "chrome/browser/ash/crosapi/login_ash.h" +#endif namespace extensions { -namespace login_api { +namespace { -void RegisterLocalStatePrefs(PrefRegistrySimple* registry) { - registry->RegisterStringPref(prefs::kLoginExtensionApiDataForNextLoginAttempt, - ""); +crosapi::mojom::Login* GetLoginApi() { +#if BUILDFLAG(IS_CHROMEOS_LACROS) + return chromeos::LacrosService::Get() + ->GetRemote<crosapi::mojom::Login>() + .get(); +#else + return crosapi::CrosapiManager::Get()->crosapi_ash()->login_ash(); +#endif } -} // namespace login_api +#if BUILDFLAG(IS_CHROMEOS_LACROS) +// Performs common crosapi validation. These errors are not caused by the +// extension so they are considered recoverable. Returns an error message on +// error, or nullopt on success. +absl::optional<std::string> ValidateCrosapi() { + if (!chromeos::LacrosService::Get()->IsAvailable<crosapi::mojom::Login>()) { + return "Unsupported by ash"; + } + return absl::nullopt; +} -namespace login_api_errors { +const char kCannotBeCalledFromLacros[] = "API cannot be called from Lacros"; -const char kAlreadyActiveSession[] = "There is already an active session"; -const char kLoginScreenIsNotActive[] = "Login screen is not active"; -const char kAnotherLoginAttemptInProgress[] = - "Another login attempt is in progress"; -const char kNoManagedGuestSessionAccounts[] = - "No managed guest session accounts"; -const char kNoLockableManagedGuestSession[] = - "There is no lockable Managed Guest Session"; -const char kSessionIsNotActive[] = "Session is not active"; -const char kNoUnlockableManagedGuestSession[] = - "There is no unlockable Managed Guest Session"; -const char kSessionIsNotLocked[] = "Session is not locked"; -const char kAnotherUnlockAttemptInProgress[] = - "Another unlock attempt is in progress"; -const char kSharedMGSAlreadyLaunched[] = - "Shared Managed Guest Session has already been launched"; -const char kAuthenticationFailed[] = "Authentication failed"; -const char kNoSharedMGSFound[] = "No shared Managed Guest Session found"; -const char kSharedSessionIsNotActive[] = "Shared session is not active"; -const char kSharedSessionAlreadyLaunched[] = - "Another shared session has already been launched"; -const char kScryptFailure[] = "Scrypt failed"; -const char kCleanupInProgress[] = "Cleanup is already in progress"; -const char kUnlockFailure[] = "Managed Guest Session unlock failed"; -const char kDeviceRestrictedManagedGuestSessionNotEnabled[] = - "DeviceRestrictedManagedGuestSessionEnabled policy is not enabled for " - "shared kiosk mode"; +#endif // BUILDFLAG(IS_CHROMEOS_LACROS) -} // namespace login_api_errors +} // namespace + +ExtensionFunctionWithOptionalErrorResult:: + ~ExtensionFunctionWithOptionalErrorResult() = default; + +void ExtensionFunctionWithOptionalErrorResult::OnResult( + const absl::optional<std::string>& error) { + if (error) { + Respond(Error(*error)); + return; + } + + return Respond(NoArguments()); +} + +ExtensionFunctionWithStringResult::~ExtensionFunctionWithStringResult() = + default; + +void ExtensionFunctionWithStringResult::OnResult(const std::string& result) { + Respond(OneArgument(base::Value(result))); +} + +ExtensionFunctionWithVoidResult::~ExtensionFunctionWithVoidResult() = default; + +void ExtensionFunctionWithVoidResult::OnResult() { + Respond(NoArguments()); +} LoginLaunchManagedGuestSessionFunction:: LoginLaunchManagedGuestSessionFunction() = default; @@ -78,59 +86,50 @@ ExtensionFunction::ResponseAction LoginLaunchManagedGuestSessionFunction::Run() { - ui::UserActivityDetector::Get()->HandleExternalUserActivity(); - +#if BUILDFLAG(IS_CHROMEOS_LACROS) + return RespondNow(Error(kCannotBeCalledFromLacros)); +#else auto parameters = api::login::LaunchManagedGuestSession::Params::Create(args()); EXTENSION_FUNCTION_VALIDATE(parameters); - if (session_manager::SessionManager::Get()->session_state() != - session_manager::SessionState::LOGIN_PRIMARY) { - return RespondNow(Error(login_api_errors::kAlreadyActiveSession)); - } + auto callback = + base::BindOnce(&LoginLaunchManagedGuestSessionFunction::OnResult, this); - auto* existing_user_controller = - ash::ExistingUserController::current_controller(); - if (existing_user_controller->IsSigninInProgress()) { - return RespondNow(Error(login_api_errors::kAnotherLoginAttemptInProgress)); + absl::optional<std::string> password; + if (parameters->password) { + password = std::move(*parameters->password); } - - user_manager::UserManager* user_manager = user_manager::UserManager::Get(); - for (const user_manager::User* user : user_manager->GetUsers()) { - if (!user || user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) - continue; - ash::UserContext context(user_manager::USER_TYPE_PUBLIC_ACCOUNT, - user->GetAccountId()); - if (parameters->password) { - context.SetKey(ash::Key(*parameters->password)); - context.SetCanLockManagedGuestSession(true); - } - - existing_user_controller->Login(context, ash::SigninSpecifics()); - return RespondNow(NoArguments()); - } - return RespondNow(Error(login_api_errors::kNoManagedGuestSessionAccounts)); + GetLoginApi()->LaunchManagedGuestSession(password, std::move(callback)); + return did_respond() ? AlreadyResponded() : RespondLater(); +#endif } LoginExitCurrentSessionFunction::LoginExitCurrentSessionFunction() = default; LoginExitCurrentSessionFunction::~LoginExitCurrentSessionFunction() = default; ExtensionFunction::ResponseAction LoginExitCurrentSessionFunction::Run() { +#if BUILDFLAG(IS_CHROMEOS_LACROS) + absl::optional<std::string> error = ValidateCrosapi(); + if (error.has_value()) { + return RespondNow(Error(error.value())); + } +#endif + auto parameters = api::login::ExitCurrentSession::Params::Create(args()); EXTENSION_FUNCTION_VALIDATE(parameters); - PrefService* local_state = g_browser_process->local_state(); - DCHECK(local_state); + auto callback = + base::BindOnce(&LoginExitCurrentSessionFunction::OnResult, this); + absl::optional<std::string> data_for_next_login_attempt; if (parameters->data_for_next_login_attempt) { - local_state->SetString(prefs::kLoginExtensionApiDataForNextLoginAttempt, - *parameters->data_for_next_login_attempt); - } else { - local_state->ClearPref(prefs::kLoginExtensionApiDataForNextLoginAttempt); + data_for_next_login_attempt = + std::move(*parameters->data_for_next_login_attempt); } - - chrome::AttemptUserExit(); - return RespondNow(NoArguments()); + GetLoginApi()->ExitCurrentSession(data_for_next_login_attempt, + std::move(callback)); + return did_respond() ? AlreadyResponded() : RespondLater(); } LoginFetchDataForNextLoginAttemptFunction:: @@ -140,13 +139,18 @@ ExtensionFunction::ResponseAction LoginFetchDataForNextLoginAttemptFunction::Run() { - PrefService* local_state = g_browser_process->local_state(); - DCHECK(local_state); - std::string data_for_next_login_attempt = - local_state->GetString(prefs::kLoginExtensionApiDataForNextLoginAttempt); - local_state->ClearPref(prefs::kLoginExtensionApiDataForNextLoginAttempt); +#if BUILDFLAG(IS_CHROMEOS_LACROS) + absl::optional<std::string> error = ValidateCrosapi(); + if (error.has_value()) { + return RespondNow(Error(error.value())); + } +#endif - return RespondNow(OneArgument(base::Value(data_for_next_login_attempt))); + auto callback = base::BindOnce( + &LoginFetchDataForNextLoginAttemptFunction::OnResult, this); + + GetLoginApi()->FetchDataForNextLoginAttempt(std::move(callback)); + return did_respond() ? AlreadyResponded() : RespondLater(); } LoginLockManagedGuestSessionFunction::LoginLockManagedGuestSessionFunction() = @@ -155,24 +159,18 @@ default; ExtensionFunction::ResponseAction LoginLockManagedGuestSessionFunction::Run() { - ui::UserActivityDetector::Get()->HandleExternalUserActivity(); - - const user_manager::UserManager* user_manager = - user_manager::UserManager::Get(); - const user_manager::User* active_user = user_manager->GetActiveUser(); - if (!active_user || - active_user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT || - !user_manager->CanCurrentUserLock()) { - return RespondNow(Error(login_api_errors::kNoLockableManagedGuestSession)); +#if BUILDFLAG(IS_CHROMEOS_LACROS) + absl::optional<std::string> error = ValidateCrosapi(); + if (error.has_value()) { + return RespondNow(Error(error.value())); } +#endif - if (session_manager::SessionManager::Get()->session_state() != - session_manager::SessionState::ACTIVE) { - return RespondNow(Error(login_api_errors::kSessionIsNotActive)); - } + auto callback = + base::BindOnce(&LoginLockManagedGuestSessionFunction::OnResult, this); - chromeos::LoginApiLockHandler::Get()->RequestLockScreen(); - return RespondNow(NoArguments()); + GetLoginApi()->LockManagedGuestSession(std::move(callback)); + return did_respond() ? AlreadyResponded() : RespondLater(); } LoginUnlockManagedGuestSessionFunction:: @@ -182,51 +180,20 @@ ExtensionFunction::ResponseAction LoginUnlockManagedGuestSessionFunction::Run() { - ui::UserActivityDetector::Get()->HandleExternalUserActivity(); - +#if BUILDFLAG(IS_CHROMEOS_LACROS) + return RespondNow(Error(kCannotBeCalledFromLacros)); +#else auto parameters = api::login::UnlockManagedGuestSession::Params::Create(args()); EXTENSION_FUNCTION_VALIDATE(parameters); - const user_manager::UserManager* user_manager = - user_manager::UserManager::Get(); - const user_manager::User* active_user = user_manager->GetActiveUser(); - if (!active_user || - active_user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT || - !user_manager->CanCurrentUserLock()) { - return RespondNow( - Error(login_api_errors::kNoUnlockableManagedGuestSession)); - } + auto callback = + base::BindOnce(&LoginUnlockManagedGuestSessionFunction::OnResult, this); - if (session_manager::SessionManager::Get()->session_state() != - session_manager::SessionState::LOCKED) { - return RespondNow(Error(login_api_errors::kSessionIsNotLocked)); - } - - chromeos::LoginApiLockHandler* handler = chromeos::LoginApiLockHandler::Get(); - if (handler->IsUnlockInProgress()) { - return RespondNow(Error(login_api_errors::kAnotherUnlockAttemptInProgress)); - } - - ash::UserContext context(user_manager::USER_TYPE_PUBLIC_ACCOUNT, - active_user->GetAccountId()); - context.SetKey(ash::Key(parameters->password)); - handler->Authenticate( - context, - base::BindOnce( - &LoginUnlockManagedGuestSessionFunction::OnAuthenticationComplete, - this)); + GetLoginApi()->UnlockManagedGuestSession(parameters->password, + std::move(callback)); return did_respond() ? AlreadyResponded() : RespondLater(); -} - -void LoginUnlockManagedGuestSessionFunction::OnAuthenticationComplete( - bool success) { - if (!success) { - Respond(Error(login_api_errors::kAuthenticationFailed)); - return; - } - - Respond(NoArguments()); +#endif } LoginLaunchSharedManagedGuestSessionFunction:: @@ -236,104 +203,73 @@ ExtensionFunction::ResponseAction LoginLaunchSharedManagedGuestSessionFunction::Run() { - ui::UserActivityDetector::Get()->HandleExternalUserActivity(); - +#if BUILDFLAG(IS_CHROMEOS_LACROS) + return RespondNow(Error(kCannotBeCalledFromLacros)); +#else auto parameters = api::login::LaunchSharedManagedGuestSession::Params::Create(args()); EXTENSION_FUNCTION_VALIDATE(parameters); - absl::optional<std::string> error = - chromeos::SharedSessionHandler::Get()->LaunchSharedManagedGuestSession( - parameters->password); - if (error) { - return RespondNow(Error(*error)); - } + auto callback = base::BindOnce( + &LoginLaunchSharedManagedGuestSessionFunction::OnResult, this); - return RespondNow(NoArguments()); + GetLoginApi()->LaunchSharedManagedGuestSession(parameters->password, + std::move(callback)); + return did_respond() ? AlreadyResponded() : RespondLater(); +#endif } LoginEnterSharedSessionFunction::LoginEnterSharedSessionFunction() = default; LoginEnterSharedSessionFunction::~LoginEnterSharedSessionFunction() = default; ExtensionFunction::ResponseAction LoginEnterSharedSessionFunction::Run() { - ui::UserActivityDetector::Get()->HandleExternalUserActivity(); - +#if BUILDFLAG(IS_CHROMEOS_LACROS) + return RespondNow(Error(kCannotBeCalledFromLacros)); +#else auto parameters = api::login::EnterSharedSession::Params::Create(args()); EXTENSION_FUNCTION_VALIDATE(parameters); - chromeos::SharedSessionHandler::Get()->EnterSharedSession( - parameters->password, - base::BindOnce( - &LoginEnterSharedSessionFunction::OnEnterSharedSessionComplete, - this)); + auto callback = + base::BindOnce(&LoginEnterSharedSessionFunction::OnResult, this); + GetLoginApi()->EnterSharedSession(parameters->password, std::move(callback)); return did_respond() ? AlreadyResponded() : RespondLater(); -} - -void LoginEnterSharedSessionFunction::OnEnterSharedSessionComplete( - absl::optional<std::string> error) { - if (error) { - Respond(Error(*error)); - return; - } - - Respond(NoArguments()); +#endif } LoginUnlockSharedSessionFunction::LoginUnlockSharedSessionFunction() = default; LoginUnlockSharedSessionFunction::~LoginUnlockSharedSessionFunction() = default; ExtensionFunction::ResponseAction LoginUnlockSharedSessionFunction::Run() { - ui::UserActivityDetector::Get()->HandleExternalUserActivity(); - - auto parameters = api::login::UnlockSharedSession::Params::Create(args()); +#if BUILDFLAG(IS_CHROMEOS_LACROS) + return RespondNow(Error(kCannotBeCalledFromLacros)); +#else + auto parameters = api::login::EnterSharedSession::Params::Create(args()); EXTENSION_FUNCTION_VALIDATE(parameters); - const user_manager::UserManager* user_manager = - user_manager::UserManager::Get(); - const user_manager::User* active_user = user_manager->GetActiveUser(); - if (!active_user || !user_manager->CanCurrentUserLock()) { - return RespondNow( - Error(login_api_errors::kNoUnlockableManagedGuestSession)); - } + auto callback = + base::BindOnce(&LoginUnlockSharedSessionFunction::OnResult, this); - chromeos::SharedSessionHandler::Get()->UnlockSharedSession( - parameters->password, - base::BindOnce( - &LoginUnlockSharedSessionFunction::OnUnlockSharedSessionComplete, - this)); - + GetLoginApi()->UnlockSharedSession(parameters->password, std::move(callback)); return did_respond() ? AlreadyResponded() : RespondLater(); -} - -void LoginUnlockSharedSessionFunction::OnUnlockSharedSessionComplete( - absl::optional<std::string> error) { - if (error) { - Respond(Error(*error)); - return; - } - - Respond(NoArguments()); +#endif } LoginEndSharedSessionFunction::LoginEndSharedSessionFunction() = default; LoginEndSharedSessionFunction::~LoginEndSharedSessionFunction() = default; ExtensionFunction::ResponseAction LoginEndSharedSessionFunction::Run() { - chromeos::SharedSessionHandler::Get()->EndSharedSession(base::BindOnce( - &LoginEndSharedSessionFunction::OnEndSharedSessionComplete, this)); +#if BUILDFLAG(IS_CHROMEOS_LACROS) + // TODO(jityao, b:217155485): Enable for Lacros after cleanup handlers are + // added. + return RespondNow(Error(kCannotBeCalledFromLacros)); +#else + auto callback = + base::BindOnce(&LoginEndSharedSessionFunction::OnResult, this); + GetLoginApi()->EndSharedSession(std::move(callback)); return did_respond() ? AlreadyResponded() : RespondLater(); -} - -void LoginEndSharedSessionFunction::OnEndSharedSessionComplete( - absl::optional<std::string> error) { - if (error) { - Respond(Error(*error)); - return; - } - - Respond(NoArguments()); +#endif } LoginSetDataForNextLoginAttemptFunction:: @@ -343,16 +279,23 @@ ExtensionFunction::ResponseAction LoginSetDataForNextLoginAttemptFunction::Run() { +#if BUILDFLAG(IS_CHROMEOS_LACROS) + absl::optional<std::string> error = ValidateCrosapi(); + if (error.has_value()) { + return RespondNow(Error(error.value())); + } +#endif + auto parameters = api::login::SetDataForNextLoginAttempt::Params::Create(args()); EXTENSION_FUNCTION_VALIDATE(parameters); - PrefService* local_state = g_browser_process->local_state(); - DCHECK(local_state); - local_state->SetString(prefs::kLoginExtensionApiDataForNextLoginAttempt, - parameters->data_for_next_login_attempt); + auto callback = + base::BindOnce(&LoginSetDataForNextLoginAttemptFunction::OnResult, this); - return RespondNow(NoArguments()); + GetLoginApi()->SetDataForNextLoginAttempt( + parameters->data_for_next_login_attempt, std::move(callback)); + return did_respond() ? AlreadyResponded() : RespondLater(); } } // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_api.h b/chrome/browser/chromeos/extensions/login_screen/login/login_api.h index 9263ac30..7e8e31b 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login/login_api.h +++ b/chrome/browser/chromeos/extensions/login_screen/login/login_api.h
@@ -5,41 +5,35 @@ #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_LOGIN_API_H_ #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_LOGIN_API_H_ -#include "components/prefs/pref_registry_simple.h" +#include "chromeos/crosapi/mojom/login.mojom.h" #include "extensions/browser/extension_function.h" +#include "third_party/abseil-cpp/absl/types/optional.h" namespace extensions { -namespace login_api { +class ExtensionFunctionWithOptionalErrorResult : public ExtensionFunction { + protected: + ~ExtensionFunctionWithOptionalErrorResult() override; -void RegisterLocalStatePrefs(PrefRegistrySimple* registry); + void OnResult(const absl::optional<std::string>& error); +}; -} // namespace login_api +class ExtensionFunctionWithStringResult : public ExtensionFunction { + protected: + ~ExtensionFunctionWithStringResult() override; -namespace login_api_errors { + void OnResult(const std::string& result); +}; -extern const char kAlreadyActiveSession[]; -extern const char kLoginScreenIsNotActive[]; -extern const char kAnotherLoginAttemptInProgress[]; -extern const char kNoManagedGuestSessionAccounts[]; -extern const char kNoLockableManagedGuestSession[]; -extern const char kSessionIsNotActive[]; -extern const char kNoUnlockableManagedGuestSession[]; -extern const char kSessionIsNotLocked[]; -extern const char kAnotherUnlockAttemptInProgress[]; -extern const char kAuthenticationFailed[]; -extern const char kSharedMGSAlreadyLaunched[]; -extern const char kNoSharedMGSFound[]; -extern const char kSharedSessionIsNotActive[]; -extern const char kSharedSessionAlreadyLaunched[]; -extern const char kScryptFailure[]; -extern const char kCleanupInProgress[]; -extern const char kUnlockFailure[]; -extern const char kDeviceRestrictedManagedGuestSessionNotEnabled[]; +class ExtensionFunctionWithVoidResult : public ExtensionFunction { + protected: + ~ExtensionFunctionWithVoidResult() override; -} // namespace login_api_errors + void OnResult(); +}; -class LoginLaunchManagedGuestSessionFunction : public ExtensionFunction { +class LoginLaunchManagedGuestSessionFunction + : public ExtensionFunctionWithOptionalErrorResult { public: LoginLaunchManagedGuestSessionFunction(); @@ -59,7 +53,8 @@ ResponseAction Run() override; }; -class LoginExitCurrentSessionFunction : public ExtensionFunction { +class LoginExitCurrentSessionFunction + : public ExtensionFunctionWithOptionalErrorResult { public: LoginExitCurrentSessionFunction(); @@ -79,7 +74,8 @@ ResponseAction Run() override; }; -class LoginFetchDataForNextLoginAttemptFunction : public ExtensionFunction { +class LoginFetchDataForNextLoginAttemptFunction + : public ExtensionFunctionWithStringResult { public: LoginFetchDataForNextLoginAttemptFunction(); @@ -99,7 +95,8 @@ ResponseAction Run() override; }; -class LoginLockManagedGuestSessionFunction : public ExtensionFunction { +class LoginLockManagedGuestSessionFunction + : public ExtensionFunctionWithOptionalErrorResult { public: LoginLockManagedGuestSessionFunction(); @@ -119,7 +116,8 @@ ResponseAction Run() override; }; -class LoginUnlockManagedGuestSessionFunction : public ExtensionFunction { +class LoginUnlockManagedGuestSessionFunction + : public ExtensionFunctionWithOptionalErrorResult { public: LoginUnlockManagedGuestSessionFunction(); @@ -137,12 +135,10 @@ // ExtensionFunction: ResponseAction Run() override; - - private: - void OnAuthenticationComplete(bool success); }; -class LoginLaunchSharedManagedGuestSessionFunction : public ExtensionFunction { +class LoginLaunchSharedManagedGuestSessionFunction + : public ExtensionFunctionWithOptionalErrorResult { public: LoginLaunchSharedManagedGuestSessionFunction(); @@ -162,7 +158,8 @@ ResponseAction Run() override; }; -class LoginEnterSharedSessionFunction : public ExtensionFunction { +class LoginEnterSharedSessionFunction + : public ExtensionFunctionWithOptionalErrorResult { public: LoginEnterSharedSessionFunction(); @@ -180,12 +177,10 @@ // ExtensionFunction: ResponseAction Run() override; - - private: - void OnEnterSharedSessionComplete(absl::optional<std::string> error); }; -class LoginUnlockSharedSessionFunction : public ExtensionFunction { +class LoginUnlockSharedSessionFunction + : public ExtensionFunctionWithOptionalErrorResult { public: LoginUnlockSharedSessionFunction(); @@ -203,12 +198,10 @@ // ExtensionFunction: ResponseAction Run() override; - - private: - void OnUnlockSharedSessionComplete(absl::optional<std::string> error); }; -class LoginEndSharedSessionFunction : public ExtensionFunction { +class LoginEndSharedSessionFunction + : public ExtensionFunctionWithOptionalErrorResult { public: LoginEndSharedSessionFunction(); @@ -224,12 +217,10 @@ // ExtensionFunction: ResponseAction Run() override; - - private: - void OnEndSharedSessionComplete(absl::optional<std::string> error); }; -class LoginSetDataForNextLoginAttemptFunction : public ExtensionFunction { +class LoginSetDataForNextLoginAttemptFunction + : public ExtensionFunctionWithVoidResult { public: LoginSetDataForNextLoginAttemptFunction();
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_api_unittest.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_api_unittest.cc index a2302bc..313e477 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login/login_api_unittest.cc +++ b/chrome/browser/chromeos/extensions/login_screen/login/login_api_unittest.cc
@@ -26,6 +26,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager.h" #include "chrome/browser/chromeos/extensions/login_screen/login/cleanup/mock_cleanup_handler.h" +#include "chrome/browser/chromeos/extensions/login_screen/login/errors.h" #include "chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.h" #include "chrome/browser/chromeos/extensions/login_screen/login/shared_session_handler.h" #include "chrome/browser/extensions/extension_api_unittest.h"
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/prefs.cc b/chrome/browser/chromeos/extensions/login_screen/login/prefs.cc new file mode 100644 index 0000000..ed52585 --- /dev/null +++ b/chrome/browser/chromeos/extensions/login_screen/login/prefs.cc
@@ -0,0 +1,22 @@ +// Copyright 2021 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/extensions/login_screen/login/errors.h" + +#include "chrome/common/pref_names.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/pref_service.h" + +namespace extensions { + +namespace login_api { + +void RegisterLocalStatePrefs(PrefRegistrySimple* registry) { + registry->RegisterStringPref(prefs::kLoginExtensionApiDataForNextLoginAttempt, + ""); +} + +} // namespace login_api + +} // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/prefs.h b/chrome/browser/chromeos/extensions/login_screen/login/prefs.h new file mode 100644 index 0000000..04bf25d3e --- /dev/null +++ b/chrome/browser/chromeos/extensions/login_screen/login/prefs.h
@@ -0,0 +1,20 @@ +// Copyright 2021 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_EXTENSIONS_LOGIN_SCREEN_LOGIN_PREFS_H_ +#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_PREFS_H_ + +class PrefRegistrySimple; + +namespace extensions { + +namespace login_api { + +void RegisterLocalStatePrefs(PrefRegistrySimple* registry); + +} // namespace login_api + +} // namespace extensions + +#endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_PREFS_H_
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/shared_session_handler.cc b/chrome/browser/chromeos/extensions/login_screen/login/shared_session_handler.cc index e7375e6e..1333e882 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login/shared_session_handler.cc +++ b/chrome/browser/chromeos/extensions/login_screen/login/shared_session_handler.cc
@@ -10,10 +10,11 @@ #include "ash/components/settings/cros_settings_names.h" #include "base/bind.h" #include "base/no_destructor.h" +#include "base/strings/string_number_conversions.h" #include "chrome/browser/ash/login/existing_user_controller.h" #include "chrome/browser/ash/settings/cros_settings.h" #include "chrome/browser/chromeos/extensions/login_screen/login/cleanup/cleanup_manager.h" -#include "chrome/browser/chromeos/extensions/login_screen/login/login_api.h" +#include "chrome/browser/chromeos/extensions/login_screen/login/errors.h" #include "chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.h" #include "chrome/browser/ui/ash/session_controller_client_impl.h" #include "components/session_manager/core/session_manager.h"
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc index e3cbf2be..d843c85 100644 --- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc +++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc
@@ -67,6 +67,11 @@ } DCHECK_EQ(media_id.type, content::DesktopMediaID::Type::TYPE_WINDOW); aura::Window* window = content::DesktopMediaID::GetNativeWindowById(media_id); + // TODO(crbug.com/1293023): Should not normally happen when |window_id| will + // be correctly set. + if (media_id.window_id == 0 || !window) { + return nullptr; + } result->window_id = lacros_window_utility::GetRootWindowUniqueId(window); return result; } @@ -107,9 +112,15 @@ return; } + crosapi::mojom::ScreenShareAreaPtr area = ConvertToScreenShareArea(media_id); + if (!area) { + LOG(WARNING) << "DLP can't identify screen shared area"; + std::move(callback).Run(true); + return; + } + lacros_service->GetRemote<crosapi::mojom::Dlp>()->CheckScreenShareRestriction( - ConvertToScreenShareArea(media_id), application_title, - std::move(callback)); + std::move(area), application_title, std::move(callback)); } void DlpContentManagerLacros::OnScreenCaptureStarted( @@ -123,12 +134,19 @@ AddScreenShare(label, media_id, application_title, stop_callback, state_change_callback); } else { + crosapi::mojom::ScreenShareAreaPtr area = + ConvertToScreenShareArea(media_id); + if (!area) { + LOG(WARNING) << "DLP can't identify screen shared area"; + continue; + } + chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get(); auto delegate = std::make_unique<ScreenShareStateChangeDelegate>( label, media_id, state_change_callback, stop_callback); if (lacros_service->IsAvailable<crosapi::mojom::Dlp>()) { lacros_service->GetRemote<crosapi::mojom::Dlp>()->OnScreenShareStarted( - label, ConvertToScreenShareArea(media_id), application_title, + label, std::move(area), application_title, delegate->BindDelegate()); running_remote_screen_shares_.push_back(std::move(delegate)); } @@ -143,10 +161,17 @@ if (media_id.type == content::DesktopMediaID::Type::TYPE_WEB_CONTENTS) { RemoveScreenShare(label, media_id); } else { + crosapi::mojom::ScreenShareAreaPtr area = + ConvertToScreenShareArea(media_id); + if (!area) { + LOG(WARNING) << "DLP can't identify screen shared area"; + return; + } chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get(); + if (lacros_service->IsAvailable<crosapi::mojom::Dlp>()) { lacros_service->GetRemote<crosapi::mojom::Dlp>()->OnScreenShareStopped( - label, ConvertToScreenShareArea(media_id)); + label, std::move(area)); } base::EraseIf( running_remote_screen_shares_,
diff --git a/chrome/browser/commerce/BUILD.gn b/chrome/browser/commerce/BUILD.gn deleted file mode 100644 index 8912d4c..0000000 --- a/chrome/browser/commerce/BUILD.gn +++ /dev/null
@@ -1,20 +0,0 @@ -# Copyright 2021 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. - -if (is_android) { - import("//build/config/android/rules.gni") -} - -source_set("feature_list") { - sources = [ - "commerce_feature_list.cc", - "commerce_feature_list.h", - ] - - deps = [ - "//base", - "//third_party/re2:re2", - "//url:url", - ] -}
diff --git a/chrome/browser/commerce/coupons/coupon_service.cc b/chrome/browser/commerce/coupons/coupon_service.cc index 99dd3981..e384d57f 100644 --- a/chrome/browser/commerce/coupons/coupon_service.cc +++ b/chrome/browser/commerce/coupons/coupon_service.cc
@@ -4,8 +4,8 @@ #include "chrome/browser/commerce/coupons/coupon_service.h" #include "chrome/browser/cart/cart_features.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/coupons/coupon_db_content.pb.h" +#include "components/commerce/core/commerce_feature_list.h" namespace {
diff --git a/chrome/browser/commerce/coupons/coupon_service_unittest.cc b/chrome/browser/commerce/coupons/coupon_service_unittest.cc index 822480a..14523ab 100644 --- a/chrome/browser/commerce/coupons/coupon_service_unittest.cc +++ b/chrome/browser/commerce/coupons/coupon_service_unittest.cc
@@ -5,12 +5,12 @@ #include "chrome/browser/commerce/coupons/coupon_service.h" #include "base/memory/raw_ptr.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/coupons/coupon_db_content.pb.h" #include "chrome/browser/commerce/coupons/coupon_service_factory.h" #include "chrome/browser/persisted_state_db/profile_proto_db.h" #include "chrome/browser/persisted_state_db/profile_proto_db_factory.h" #include "chrome/test/base/testing_profile.h" +#include "components/commerce/core/commerce_feature_list.h" #include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/commerce/merchant_viewer/BUILD.gn b/chrome/browser/commerce/merchant_viewer/BUILD.gn index a380808..1ad5c20a 100644 --- a/chrome/browser/commerce/merchant_viewer/BUILD.gn +++ b/chrome/browser/commerce/merchant_viewer/BUILD.gn
@@ -41,10 +41,10 @@ ":merchant_signal_db", ":merchant_signal_db_content_proto", "//base:base", - "//chrome/browser/commerce:feature_list", "//chrome/browser/persisted_state_db:persisted_state_db", "//chrome/browser/profiles", "//chrome/browser/profiles:profile", + "//components/commerce/core:feature_list", "//components/keyed_service/content", "//components/leveldb_proto", "//content/public/browser:browser",
diff --git a/chrome/browser/commerce/merchant_viewer/merchant_viewer_data_manager.cc b/chrome/browser/commerce/merchant_viewer/merchant_viewer_data_manager.cc index bb39710..5290e29 100644 --- a/chrome/browser/commerce/merchant_viewer/merchant_viewer_data_manager.cc +++ b/chrome/browser/commerce/merchant_viewer/merchant_viewer_data_manager.cc
@@ -9,9 +9,9 @@ #include "base/metrics/field_trial_params.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros_local.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/persisted_state_db/profile_proto_db.h" #include "chrome/browser/persisted_state_db/profile_proto_db_factory.h" +#include "components/commerce/core/commerce_feature_list.h" #include "content/public/browser/android/browser_context_handle.h" MerchantViewerDataManager::MerchantViewerDataManager(
diff --git a/chrome/browser/commerce/merchant_viewer/merchant_viewer_data_manager_unittest.cc b/chrome/browser/commerce/merchant_viewer/merchant_viewer_data_manager_unittest.cc index fac6d5e1..b49b337 100644 --- a/chrome/browser/commerce/merchant_viewer/merchant_viewer_data_manager_unittest.cc +++ b/chrome/browser/commerce/merchant_viewer/merchant_viewer_data_manager_unittest.cc
@@ -9,11 +9,11 @@ #include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros_local.h" #include "base/test/metrics/histogram_tester.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/merchant_viewer/merchant_viewer_data_manager_factory.h" #include "chrome/browser/persisted_state_db/profile_proto_db.h" #include "chrome/browser/persisted_state_db/profile_proto_db_factory.h" #include "chrome/test/base/testing_profile.h" +#include "components/commerce/core/commerce_feature_list.h" #include "content/public/browser/android/browser_context_handle.h" #include "content/public/test/browser_task_environment.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc index 0ba1d3d4..2346cf83 100644 --- a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc +++ b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc
@@ -27,8 +27,6 @@ #include "chrome/common/channel_info.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/pref_names.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" #include "components/embedder_support/user_agent_utils.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" @@ -75,155 +73,22 @@ sql::Database::Delete(optout_database_file); } -// Assume that any proxy host ending with this suffix is a Data Reduction Proxy. -const char kDataReductionProxyDefaultHostSuffix[] = ".googlezip.net"; - -// Searches |proxy_list| for any Data Reduction Proxies, even if they don't -// match a currently configured Data Reduction Proxy. -bool ContainsDataReductionProxyDefaultHostSuffix( - const net::ProxyList& proxy_list) { - for (const net::ProxyServer& proxy : proxy_list.GetAll()) { - if (proxy.is_valid() && !proxy.is_direct() && - base::EndsWith(proxy.host_port_pair().host(), - kDataReductionProxyDefaultHostSuffix, - base::CompareCase::SENSITIVE)) { - return true; - } - } - return false; -} - -// Searches |proxy_rules| for any Data Reduction Proxies, even if they don't -// match a currently configured Data Reduction Proxy. -bool ContainsDataReductionProxyDefaultHostSuffix( - const net::ProxyConfig::ProxyRules& proxy_rules) { - return ContainsDataReductionProxyDefaultHostSuffix( - proxy_rules.proxies_for_http) || - ContainsDataReductionProxyDefaultHostSuffix( - proxy_rules.proxies_for_https); -} - -// Extract the embedded PAC script from the given |pac_url|, and store the -// extracted script in |pac_script|. Returns true if extraction was successful, -// otherwise returns false. |pac_script| must not be NULL. -bool GetEmbeddedPacScript(base::StringPiece pac_url, std::string* pac_script) { - DCHECK(pac_script); - static const char kPacURLPrefix[] = - "data:application/x-ns-proxy-autoconfig;base64,"; - return base::StartsWith(pac_url, kPacURLPrefix, - base::CompareCase::SENSITIVE) && - base::Base64Decode(pac_url.substr(base::size(kPacURLPrefix) - 1), - pac_script); -} - } // namespace -// The Data Reduction Proxy has been turned into a "best effort" proxy, -// meaning it is used only if the effective proxy configuration resolves to -// DIRECT for a URL. It no longer can be a ProxyConfig in the proxy preference -// hierarchy. This method removes the Data Reduction Proxy configuration from -// prefs, if present. |proxy_pref_name| is the name of the proxy pref. -void DataReductionProxyChromeSettings::MigrateDataReductionProxyOffProxyPrefs( - PrefService* prefs) { - ProxyPrefMigrationResult proxy_pref_status = - MigrateDataReductionProxyOffProxyPrefsHelper(prefs); - UMA_HISTOGRAM_ENUMERATION("DataReductionProxy.ProxyPrefMigrationResult", - proxy_pref_status, - DataReductionProxyChromeSettings::PROXY_PREF_MAX); -} - -DataReductionProxyChromeSettings::ProxyPrefMigrationResult -DataReductionProxyChromeSettings::MigrateDataReductionProxyOffProxyPrefsHelper( - PrefService* prefs) { - base::DictionaryValue* dict = (base::DictionaryValue*)prefs->GetUserPrefValue( - proxy_config::prefs::kProxy); - if (!dict) - return PROXY_PREF_NOT_CLEARED; - - // Clear empty "proxy" dictionary created by a bug. See http://crbug/448172. - if (dict->DictEmpty()) { - prefs->ClearPref(proxy_config::prefs::kProxy); - return PROXY_PREF_CLEARED_EMPTY; - } - - std::string mode; - if (!dict->GetString("mode", &mode)) - return PROXY_PREF_NOT_CLEARED; - // Clear "system" proxy entry since this is the default. This entry was - // created by bug (http://crbug/448172). - if (ProxyModeToString(ProxyPrefs::MODE_SYSTEM) == mode) { - prefs->ClearPref(proxy_config::prefs::kProxy); - return PROXY_PREF_CLEARED_MODE_SYSTEM; - } - - // From M36 to M40, the DRP was configured using MODE_FIXED_SERVERS in the - // proxy pref. - if (ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS) == mode) { - std::string proxy_server; - if (!dict->GetString("server", &proxy_server)) - return PROXY_PREF_NOT_CLEARED; - net::ProxyConfig::ProxyRules proxy_rules; - proxy_rules.ParseFromString(proxy_server); - // Clear the proxy pref if it matches a currently configured Data Reduction - // Proxy, or if the proxy host ends with ".googlezip.net", in order to - // ensure that any DRP in the pref is cleared even if the DRP configuration - // was changed. See http://crbug.com/476610. - ProxyPrefMigrationResult rv; - if (ContainsDataReductionProxyDefaultHostSuffix(proxy_rules)) - rv = PROXY_PREF_CLEARED_GOOGLEZIP; - else - return PROXY_PREF_NOT_CLEARED; - - prefs->ClearPref(proxy_config::prefs::kProxy); - return rv; - } - - // Before M35, the DRP was configured using a PAC script base64 encoded into a - // PAC url. - if (ProxyModeToString(ProxyPrefs::MODE_PAC_SCRIPT) == mode) { - std::string pac_url; - std::string pac_script; - if (!dict->GetString("pac_url", &pac_url) || - !GetEmbeddedPacScript(pac_url, &pac_script)) { - return PROXY_PREF_NOT_CLEARED; - } - - // In M35 and earlier, the way of specifying the DRP in a PAC script would - // always include the port number after the host even if the port number - // could be implied, so searching for ".googlezip.net:" in the PAC script - // indicates whether there's a proxy in that PAC script with a host of the - // form "*.googlezip.net". - if (pac_script.find(".googlezip.net:") == std::string::npos) - return PROXY_PREF_NOT_CLEARED; - - prefs->ClearPref(proxy_config::prefs::kProxy); - return PROXY_PREF_CLEARED_PAC_GOOGLEZIP; - } - - return PROXY_PREF_NOT_CLEARED; -} - DataReductionProxyChromeSettings::DataReductionProxyChromeSettings( bool is_off_the_record_profile) : data_reduction_proxy::DataReductionProxySettings( - is_off_the_record_profile), - profile_(nullptr) { + is_off_the_record_profile) { DCHECK(!is_off_the_record_profile); } DataReductionProxyChromeSettings::~DataReductionProxyChromeSettings() {} -void DataReductionProxyChromeSettings::Shutdown() { - data_reduction_proxy::DataReductionProxyService* service = - data_reduction_proxy_service(); - if (service) - service->Shutdown(); -} +void DataReductionProxyChromeSettings::Shutdown() {} void DataReductionProxyChromeSettings::InitDataReductionProxySettings( Profile* profile, const scoped_refptr<base::SequencedTaskRunner>& db_task_runner) { - profile_ = profile; DCHECK_CURRENTLY_ON(content::BrowserThread::UI); // Delete Previews OptOut database file. @@ -244,28 +109,6 @@ FROM_HERE, base::BindOnce(DeleteHostDataUseDatabaseOnDBThread, profile_path.Append(kHostDataUseDBName))); - PrefService* profile_prefs = profile->GetPrefs(); - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory = - profile->GetDefaultStoragePartition() - ->GetURLLoaderFactoryForBrowserProcess(); - std::unique_ptr<data_reduction_proxy::DataReductionProxyService> service = - std::make_unique<data_reduction_proxy::DataReductionProxyService>( - this, profile_prefs); data_reduction_proxy::DataReductionProxySettings:: - InitDataReductionProxySettings(profile_prefs, std::move(service)); - - data_reduction_proxy::DataReductionProxySettings:: - SetCallbackToRegisterSyntheticFieldTrial(base::BindRepeating( - [](base::StringPiece trial_name, base::StringPiece group_name) { - return ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial( - trial_name, group_name, - variations::SyntheticTrialAnnotationMode::kNextLog); - })); - // In M35 and earlier, the Data Reduction Proxy enabled/disabled setting was - // stored in prefs, so this setting needs to be migrated to the new way of - // storing the setting. Removing this migration code would cause users - // upgrading from M35 and earlier with the Data Reduction Proxy enabled to be - // unable to browse non-SSL sites for the most part (see - // http://crbug.com/476610). - MigrateDataReductionProxyOffProxyPrefs(profile_prefs); + InitDataReductionProxySettings(); }
diff --git a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h index 10d9e18..0f6a766 100644 --- a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h +++ b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h
@@ -9,35 +9,18 @@ #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "components/keyed_service/core/keyed_service.h" -class PrefService; class Profile; namespace base { class SequencedTaskRunner; } // namespace base -class PrefService; - // Data reduction proxy settings class suitable for use with a Chrome browser. // It is keyed to a browser context. class DataReductionProxyChromeSettings : public data_reduction_proxy::DataReductionProxySettings, public KeyedService { public: - // Enum values that can be reported for the - // DataReductionProxy.ProxyPrefMigrationResult histogram. These values must be - // kept in sync with their counterparts in histograms.xml. Visible here for - // testing purposes. - enum ProxyPrefMigrationResult { - PROXY_PREF_NOT_CLEARED = 0, - PROXY_PREF_CLEARED_EMPTY, - PROXY_PREF_CLEARED_MODE_SYSTEM, - PROXY_PREF_CLEARED_DRP, - PROXY_PREF_CLEARED_GOOGLEZIP, - PROXY_PREF_CLEARED_PAC_GOOGLEZIP, - PROXY_PREF_MAX - }; - // Constructs a settings object. Construction and destruction must happen on // the UI thread. explicit DataReductionProxyChromeSettings(bool is_off_the_record_profile); @@ -57,19 +40,6 @@ void InitDataReductionProxySettings( Profile* profile, const scoped_refptr<base::SequencedTaskRunner>& db_task_runner); - - // Public for testing. - void MigrateDataReductionProxyOffProxyPrefs(PrefService* prefs); - - private: - // Helper method for migrating the Data Reduction Proxy away from using the - // proxy pref. Returns the ProxyPrefMigrationResult value indicating the - // migration action taken. - ProxyPrefMigrationResult MigrateDataReductionProxyOffProxyPrefsHelper( - PrefService* prefs); - - // Null before InitDataReductionProxySettings is called. - raw_ptr<Profile> profile_; }; #endif // CHROME_BROWSER_DATA_REDUCTION_PROXY_DATA_REDUCTION_PROXY_CHROME_SETTINGS_H_
diff --git a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_unittest.cc b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_unittest.cc deleted file mode 100644 index 8ad9ae7e..0000000 --- a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_unittest.cc +++ /dev/null
@@ -1,326 +0,0 @@ -// 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. - -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" - -#include <memory> -#include <string> - -#include "base/memory/raw_ptr.h" -#include "base/test/metrics/histogram_tester.h" -#include "chrome/test/base/chrome_render_view_host_test_harness.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h" -#include "components/prefs/pref_registry_simple.h" -#include "components/prefs/testing_pref_service.h" -#include "components/proxy_config/proxy_config_pref_names.h" -#include "content/public/test/mock_navigation_handle.h" -#include "net/http/http_util.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace { -using testing::_; -using testing::Return; - -constexpr char kProxyPac[] = "PROXY proxy.net"; -} // namespace - -class DataReductionProxyChromeSettingsTest - : public ChromeRenderViewHostTestHarness { - public: - void SetUp() override { - ChromeRenderViewHostTestHarness::SetUp(); - auto settings = std::make_unique<DataReductionProxyChromeSettings>(false); - drp_chrome_settings_ = settings.get(); - test_context_ = - data_reduction_proxy::DataReductionProxyTestContext::Builder() - .WithMockConfig() - .WithSettings(std::move(settings)) - .Build(); - net::ProxyList proxies; - proxies.SetFromPacString(kProxyPac); - dict_ = std::make_unique<base::DictionaryValue>(); - - PrefRegistrySimple* registry = test_context_->pref_service()->registry(); - registry->RegisterDictionaryPref(proxy_config::prefs::kProxy); - } - - void TearDown() override { - // Make sure |test_context_| is destroyed before message loop is destroyed. - test_context_.reset(); - ChromeRenderViewHostTestHarness::TearDown(); - } - - raw_ptr<DataReductionProxyChromeSettings> drp_chrome_settings_; - std::unique_ptr<base::DictionaryValue> dict_; - std::unique_ptr<data_reduction_proxy::DataReductionProxyTestContext> - test_context_; -}; - -TEST_F(DataReductionProxyChromeSettingsTest, MigrateNonexistentProxyPref) { - base::HistogramTester histogram_tester; - drp_chrome_settings_->MigrateDataReductionProxyOffProxyPrefs( - test_context_->pref_service()); - - EXPECT_EQ(NULL, test_context_->pref_service()->GetUserPref( - proxy_config::prefs::kProxy)); - histogram_tester.ExpectUniqueSample( - "DataReductionProxy.ProxyPrefMigrationResult", - DataReductionProxyChromeSettings::PROXY_PREF_NOT_CLEARED, 1); -} - -TEST_F(DataReductionProxyChromeSettingsTest, MigrateBadlyFormedProxyPref) { - const struct { - // NULL indicates that mode is unset. - const char* proxy_mode_string; - // NULL indicates that server is unset. - const char* proxy_server_string; - } test_cases[] = { - // The pref should not be cleared if mode is unset. - {nullptr, "http=compress.googlezip.net"}, - // The pref should not be cleared for modes other than "fixed_servers" and - // "pac_script". - {"auto_detect", "http=compress.googlezip.net"}, - // The pref should not be cleared when the server field is unset. - {"fixed_servers", nullptr}, - }; - - for (const auto& test : test_cases) { - base::HistogramTester histogram_tester; - dict_ = std::make_unique<base::DictionaryValue>(); - if (test.proxy_mode_string) - dict_->SetString("mode", test.proxy_mode_string); - if (test.proxy_server_string) - dict_->SetString("server", test.proxy_server_string); - test_context_->pref_service()->Set(proxy_config::prefs::kProxy, - *dict_.get()); - - drp_chrome_settings_->MigrateDataReductionProxyOffProxyPrefs( - test_context_->pref_service()); - - const base::DictionaryValue* final_value; - test_context_->pref_service() - ->GetUserPref(proxy_config::prefs::kProxy) - ->GetAsDictionary(&final_value); - EXPECT_NE(nullptr, final_value); - EXPECT_TRUE(dict_->Equals(final_value)); - - histogram_tester.ExpectUniqueSample( - "DataReductionProxy.ProxyPrefMigrationResult", - DataReductionProxyChromeSettings::PROXY_PREF_NOT_CLEARED, 1); - } -} - -TEST_F(DataReductionProxyChromeSettingsTest, MigrateEmptyProxy) { - base::HistogramTester histogram_tester; - test_context_->pref_service()->Set(proxy_config::prefs::kProxy, *dict_.get()); - drp_chrome_settings_->MigrateDataReductionProxyOffProxyPrefs( - test_context_->pref_service()); - - EXPECT_EQ(NULL, test_context_->pref_service()->GetUserPref( - proxy_config::prefs::kProxy)); - histogram_tester.ExpectUniqueSample( - "DataReductionProxy.ProxyPrefMigrationResult", - DataReductionProxyChromeSettings::PROXY_PREF_CLEARED_EMPTY, 1); -} - -TEST_F(DataReductionProxyChromeSettingsTest, MigrateSystemProxy) { - base::HistogramTester histogram_tester; - dict_->SetString("mode", "system"); - test_context_->pref_service()->Set(proxy_config::prefs::kProxy, *dict_.get()); - - drp_chrome_settings_->MigrateDataReductionProxyOffProxyPrefs( - test_context_->pref_service()); - - EXPECT_EQ(NULL, test_context_->pref_service()->GetUserPref( - proxy_config::prefs::kProxy)); - histogram_tester.ExpectUniqueSample( - "DataReductionProxy.ProxyPrefMigrationResult", - DataReductionProxyChromeSettings::PROXY_PREF_CLEARED_MODE_SYSTEM, 1); -} - -TEST_F(DataReductionProxyChromeSettingsTest, - MigrateGooglezipDataReductionProxy) { - const std::string kTestServers[] = { - "http=http://proxy-dev.googlezip.net", - "http=https://arbitraryprefix.googlezip.net", - "https=https://tunnel.googlezip.net"}; - - for (const std::string& test_server : kTestServers) { - base::HistogramTester histogram_tester; - dict_ = std::make_unique<base::DictionaryValue>(); - // The proxy pref is set to a Data Reduction Proxy that doesn't match the - // currently configured DRP, but the pref should still be cleared. - dict_->SetString("mode", "fixed_servers"); - dict_->SetString("server", test_server); - test_context_->pref_service()->Set(proxy_config::prefs::kProxy, - *dict_.get()); - drp_chrome_settings_->MigrateDataReductionProxyOffProxyPrefs( - test_context_->pref_service()); - - EXPECT_EQ(NULL, test_context_->pref_service()->GetUserPref( - proxy_config::prefs::kProxy)); - histogram_tester.ExpectUniqueSample( - "DataReductionProxy.ProxyPrefMigrationResult", - DataReductionProxyChromeSettings::PROXY_PREF_CLEARED_GOOGLEZIP, 1); - } -} - -TEST_F(DataReductionProxyChromeSettingsTest, - MigratePacGooglezipDataReductionProxy) { - const struct { - const char* pac_url; - bool expect_pref_cleared; - } test_cases[] = { - // PAC with bypass rules that returns 'HTTPS proxy.googlezip.net:443; - // PROXY compress.googlezip.net:80; DIRECT'. - {"data:application/" - "x-ns-proxy-autoconfig;base64," - "ZnVuY3Rpb24gRmluZFByb3h5Rm9yVVJMKHVybCwgaG9zdCkgeyAgaWYgKChzaEV4cE1hdGN" - "oKHVybCwgJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9wb2xpY2llcy9wcml2YWN5KicpKSkgey" - "AgICByZXR1cm4gJ0RJUkVDVCc7ICB9ICAgaWYgKHVybC5zdWJzdHJpbmcoMCwgNSkgPT0gJ" - "2h0dHA6JykgeyAgICByZXR1cm4gJ0hUVFBTIHByb3h5Lmdvb2dsZXppcC5uZXQ6NDQzOyBQ" - "Uk9YWSBjb21wcmVzcy5nb29nbGV6aXAubmV0OjgwOyBESVJFQ1QnOyAgfSAgcmV0dXJuICd" - "ESVJFQ1QnO30=", - true}, - // PAC with bypass rules that returns 'PROXY compress.googlezip.net:80; - // DIRECT'. - {"data:application/" - "x-ns-proxy-autoconfig;base64," - "ZnVuY3Rpb24gRmluZFByb3h5Rm9yVVJMKHVybCwgaG9zdCkgeyAgaWYgKChzaEV4cE1hdGN" - "oKHVybCwgJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9wb2xpY2llcy9wcml2YWN5KicpKSkgey" - "AgICByZXR1cm4gJ0RJUkVDVCc7ICB9ICAgaWYgKHVybC5zdWJzdHJpbmcoMCwgNSkgPT0gJ" - "2h0dHA6JykgeyAgICByZXR1cm4gJ1BST1hZIGNvbXByZXNzLmdvb2dsZXppcC5uZXQ6ODA7" - "IERJUkVDVCc7ICB9ICByZXR1cm4gJ0RJUkVDVCc7fQ==", - true}, - // PAC with bypass rules that returns 'PROXY proxy-dev.googlezip.net:80; - // DIRECT'. - {"data:application/" - "x-ns-proxy-autoconfig;base64," - "ZnVuY3Rpb24gRmluZFByb3h5Rm9yVVJMKHVybCwgaG9zdCkgeyAgaWYgKChzaEV4cE1hdGN" - "oKHVybCwgJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9wb2xpY2llcy9wcml2YWN5KicpKSkgey" - "AgICByZXR1cm4gJ0RJUkVDVCc7ICB9ICAgaWYgKHVybC5zdWJzdHJpbmcoMCwgNSkgPT0gJ" - "2h0dHA6JykgeyAgICByZXR1cm4gJ1BST1hZIHByb3h5LWRldi5nb29nbGV6aXAubmV0Ojgw" - "OyBESVJFQ1QnOyAgfSAgcmV0dXJuICdESVJFQ1QnO30=", - true}, - // Simple PAC that returns 'PROXY compress.googlezip.net:80'. - {"data:application/" - "x-ns-proxy-autoconfig;base64," - "ZnVuY3Rpb24gRmluZFByb3h5Rm9yVVJMKHVybCwgaG9zdCkge3JldHVybiAnUFJPWFkgY29" - "tcHJlc3MuZ29vZ2xlemlwLm5ldDo4MCc7fQo=", - true}, - // Simple PAC that returns 'PROXY compress.googlezip.net'. Note that since - // the port is not specified, the pref will not be cleared. - {"data:application/" - "x-ns-proxy-autoconfig;base64," - "ZnVuY3Rpb24gRmluZFByb3h5Rm9yVVJMKHVybCwgaG9zdCkge3JldHVybiAnUFJPWFkgY29" - "tcHJlc3MuZ29vZ2xlemlwLm5ldCc7fQ==", - false}, - // Simple PAC that returns 'PROXY mycustomdrp.net:80'. - {"data:application/" - "x-ns-proxy-autoconfig;base64," - "ZnVuY3Rpb24gRmluZFByb3h5Rm9yVVJMKHVybCwgaG9zdCkge3JldHVybiAnUFJPWFkgb3J" - "pZ2luLm5ldDo4MCc7fQo=", - false}, - // Simple PAC that returns 'PROXY myprefixgooglezip.net:80'. - {"data:application/" - "x-ns-proxy-autoconfig;base64," - "ZnVuY3Rpb24gRmluZFByb3h5Rm9yVVJMKHVybCwgaG9zdCkge3JldHVybiAnUFJPWFkgbXl" - "wcmVmaXhnb29nbGV6aXAubmV0OjgwJzt9Cg==", - false}, - // Simple PAC that returns 'PROXY compress.googlezip.net.mydomain.com:80'. - {"data:application/" - "x-ns-proxy-autoconfig;base64," - "ZnVuY3Rpb24gRmluZFByb3h5Rm9yVVJMKHVybCwgaG9zdCkge3JldHVybiAnUFJPWFkgY29" - "tcHJlc3MuZ29vZ2xlemlwLm5ldC5teWRvbWFpbi5jb206ODAnO30K", - false}, - // PAC URL that doesn't embed a script. - {"http://compress.googlezip.net/pac", false}, - // Complicated PAC that returns a JavaScript function that can evaluate to - // proxy.googlezip.net:443 and compress.googlezip.net:80. - {"data:application/" - "x-ns-proxy-autoconfig;base64," - "ZnVuY3Rpb24gRmluZFByb3h5Rm9yVVJMKHVybCwgaG9zdCkgewogIGlmICh1cmwuc3Vic3R" - "yaW5nKDAsNSkgPT0gJ2h0dHA6JyAmJiAKICAgICAgIWlzUGxhaW5Ib3N0TmFtZShob3N0KS" - "AmJiAKICAgICAgIXNoRXhwTWF0Y2goaG9zdCwgJyoubG9jYWwnKSAmJiAKICAgICAgIWlzS" - "W5OZXQoZG5zUmVzb2x2ZShob3N0KSwgJzEwLjAuMC4wJywgJzI1NS4wLjAuMCcpICYmIAog" - "ICAgICAhaXNJbk5ldChkbnNSZXNvbHZlKGhvc3QpLCAnMTcyLjE2LjAuMCcsICAnMjU1LjI" - "0MC4wLjAnKSAmJiAKICAgICAgIWlzSW5OZXQoZG5zUmVzb2x2ZShob3N0KSwgJzE5Mi4xNj" - "guMC4wJywgICcyNTUuMjU1LjAuMCcpICYmIAogICAgICAhaXNJbk5ldChkbnNSZXNvbHZlK" - "Ghvc3QpLCAnMTI3LjAuMC4wJywgJzI1NS4yNTUuMjU1LjAnKSAmJiAKICAgICAgIXNoRXhw" - "TWF0Y2goaG9zdCwgJygqLm1ldHJpYy5nc3RhdGljLmNvbSknKSkKICAgIHJldHVybiAnSFR" - "UUFMgcHJveHkuZ29vZ2xlemlwLm5ldDo0NDM7IFBST1hZIGNvbXByZXNzLmdvb2dsZXppcC" - "5uZXQ6ODA7IFBST1hZIDc0LjEyNS4yMDUuMjExOjgwOyBESVJFQ1QnOwogIHJldHVybiAnR" - "ElSRUNUJzsKfQ==", - true}, - }; - - for (const auto& test : test_cases) { - base::HistogramTester histogram_tester; - dict_ = std::make_unique<base::DictionaryValue>(); - dict_->SetString("mode", "pac_script"); - dict_->SetString("pac_url", test.pac_url); - test_context_->pref_service()->Set(proxy_config::prefs::kProxy, - *dict_.get()); - - drp_chrome_settings_->MigrateDataReductionProxyOffProxyPrefs( - test_context_->pref_service()); - - if (test.expect_pref_cleared) { - EXPECT_EQ(NULL, test_context_->pref_service()->GetUserPref( - proxy_config::prefs::kProxy)); - histogram_tester.ExpectUniqueSample( - "DataReductionProxy.ProxyPrefMigrationResult", - DataReductionProxyChromeSettings::PROXY_PREF_CLEARED_PAC_GOOGLEZIP, - 1); - } else { - const base::DictionaryValue* value; - EXPECT_TRUE(test_context_->pref_service() - ->GetUserPref(proxy_config::prefs::kProxy) - ->GetAsDictionary(&value)); - std::string mode; - EXPECT_TRUE(value->GetString("mode", &mode)); - EXPECT_EQ("pac_script", mode); - std::string pac_url; - EXPECT_TRUE(value->GetString("pac_url", &pac_url)); - EXPECT_EQ(test.pac_url, pac_url); - - histogram_tester.ExpectUniqueSample( - "DataReductionProxy.ProxyPrefMigrationResult", - DataReductionProxyChromeSettings::PROXY_PREF_NOT_CLEARED, 1); - } - } -} - -TEST_F(DataReductionProxyChromeSettingsTest, MigrateIgnoreOtherProxy) { - const std::string kTestServers[] = { - "http=https://youtube.com", "http=http://googlezip.net", - "http=http://thisismyproxynotgooglezip.net", - "https=http://arbitraryprefixgooglezip.net"}; - - for (const std::string& test_server : kTestServers) { - base::HistogramTester histogram_tester; - dict_ = std::make_unique<base::DictionaryValue>(); - dict_->SetString("mode", "fixed_servers"); - dict_->SetString("server", test_server); - test_context_->pref_service()->Set(proxy_config::prefs::kProxy, - *dict_.get()); - - drp_chrome_settings_->MigrateDataReductionProxyOffProxyPrefs( - test_context_->pref_service()); - - base::DictionaryValue* value = - (base::DictionaryValue*)test_context_->pref_service()->GetUserPref( - proxy_config::prefs::kProxy); - std::string mode; - EXPECT_TRUE(value->GetString("mode", &mode)); - EXPECT_EQ("fixed_servers", mode); - std::string server; - EXPECT_TRUE(value->GetString("server", &server)); - EXPECT_EQ(test_server, server); - - histogram_tester.ExpectUniqueSample( - "DataReductionProxy.ProxyPrefMigrationResult", - DataReductionProxyChromeSettings::PROXY_PREF_NOT_CLEARED, 1); - } -}
diff --git a/chrome/browser/data_saver/DIR_METADATA b/chrome/browser/data_saver/DIR_METADATA deleted file mode 100644 index ce14958..0000000 --- a/chrome/browser/data_saver/DIR_METADATA +++ /dev/null
@@ -1,3 +0,0 @@ -monorail: { - component: "Internals>Network>DataProxy" -}
diff --git a/chrome/browser/data_saver/OWNERS b/chrome/browser/data_saver/OWNERS deleted file mode 100644 index 2783dea..0000000 --- a/chrome/browser/data_saver/OWNERS +++ /dev/null
@@ -1 +0,0 @@ -file://components/data_reduction_proxy/OWNERS
diff --git a/chrome/browser/data_saver/data_saver_browsertest.cc b/chrome/browser/data_saver/data_saver_browsertest.cc deleted file mode 100644 index 9bfd021..0000000 --- a/chrome/browser/data_saver/data_saver_browsertest.cc +++ /dev/null
@@ -1,617 +0,0 @@ -// 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. - -#include <memory> -#include <string> - -#include "base/barrier_closure.h" -#include "base/bind.h" -#include "base/containers/contains.h" -#include "base/memory/raw_ptr.h" -#include "base/test/metrics/histogram_tester.h" -#include "build/build_config.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/browser_commands.h" -#include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "chrome/test/base/ui_test_utils.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h" -#include "components/prefs/pref_service.h" -#include "content/public/test/browser_test.h" -#include "content/public/test/browser_test_base.h" -#include "content/public/test/browser_test_utils.h" -#include "net/test/embedded_test_server/embedded_test_server.h" -#include "net/test/embedded_test_server/http_request.h" -#include "net/test/embedded_test_server/http_response.h" -#include "services/network/public/cpp/network_quality_tracker.h" -#include "third_party/blink/public/common/features.h" - -namespace { - -void SetDataSaverEnabled(content::BrowserContext* browser_context, - bool enabled) { - Profile* profile = Profile::FromBrowserContext(browser_context); - - data_reduction_proxy::DataReductionProxySettings:: - SetDataSaverEnabledForTesting(profile->GetPrefs(), enabled); - base::RunLoop().RunUntilIdle(); -} - -std::unique_ptr<net::test_server::HttpResponse> CaptureHeaderHandlerWithContent( - const std::string& path, - net::test_server::HttpRequest::HeaderMap* header_map, - const std::string& mime_type, - const std::string& content, - base::OnceClosure done_callback, - const net::test_server::HttpRequest& request) { - GURL request_url = request.GetURL(); - if (request_url.path() != path) - return nullptr; - - *header_map = request.headers; - auto response = std::make_unique<net::test_server::BasicHttpResponse>(); - if (!mime_type.empty()) { - response->set_content_type(mime_type); - } - response->set_content(content); - std::move(done_callback).Run(); - return response; -} - -// Test version of the observer. Used to wait for the event when the network -// quality tracker sends the network quality change notification. -class TestEffectiveConnectionTypeObserver - : public network::NetworkQualityTracker::EffectiveConnectionTypeObserver { - public: - explicit TestEffectiveConnectionTypeObserver( - network::NetworkQualityTracker* tracker) - : run_loop_wait_effective_connection_type_( - net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN), - run_loop_(std::make_unique<base::RunLoop>()), - tracker_(tracker), - effective_connection_type_(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN) { - tracker_->AddEffectiveConnectionTypeObserver(this); - } - - TestEffectiveConnectionTypeObserver( - const TestEffectiveConnectionTypeObserver&) = delete; - TestEffectiveConnectionTypeObserver& operator=( - const TestEffectiveConnectionTypeObserver&) = delete; - - ~TestEffectiveConnectionTypeObserver() override { - tracker_->RemoveEffectiveConnectionTypeObserver(this); - } - - void WaitForNotification( - net::EffectiveConnectionType run_loop_wait_effective_connection_type) { - if (effective_connection_type_ == run_loop_wait_effective_connection_type) - return; - ASSERT_NE(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN, - run_loop_wait_effective_connection_type); - run_loop_wait_effective_connection_type_ = - run_loop_wait_effective_connection_type; - run_loop_->Run(); - run_loop_ = std::make_unique<base::RunLoop>(); - } - - private: - // NetworkQualityTracker::EffectiveConnectionTypeObserver implementation: - void OnEffectiveConnectionTypeChanged( - net::EffectiveConnectionType type) override { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - - net::EffectiveConnectionType queried_type = - tracker_->GetEffectiveConnectionType(); - EXPECT_EQ(type, queried_type); - - effective_connection_type_ = type; - if (effective_connection_type_ != run_loop_wait_effective_connection_type_) - return; - run_loop_->Quit(); - } - - net::EffectiveConnectionType run_loop_wait_effective_connection_type_; - std::unique_ptr<base::RunLoop> run_loop_; - raw_ptr<network::NetworkQualityTracker> tracker_; - net::EffectiveConnectionType effective_connection_type_; -}; - -// Test version of the observer. Used to wait for the event when the network -// quality tracker sends the network quality change notification. -class TestRTTAndThroughputEstimatesObserver - : public network::NetworkQualityTracker::RTTAndThroughputEstimatesObserver { - public: - explicit TestRTTAndThroughputEstimatesObserver( - network::NetworkQualityTracker* tracker) - : tracker_(tracker), - downstream_throughput_kbps_(std::numeric_limits<int32_t>::max()) { - tracker_->AddRTTAndThroughputEstimatesObserver(this); - } - - TestRTTAndThroughputEstimatesObserver( - const TestRTTAndThroughputEstimatesObserver&) = delete; - TestRTTAndThroughputEstimatesObserver& operator=( - const TestRTTAndThroughputEstimatesObserver&) = delete; - - ~TestRTTAndThroughputEstimatesObserver() override { - tracker_->RemoveRTTAndThroughputEstimatesObserver(this); - } - - void WaitForNotification(base::TimeDelta expected_http_rtt) { - // It's not meaningful to wait for notification with RTT set to - // base::TimeDelta() since that value implies that the network quality - // estimate was unavailable. - EXPECT_NE(base::TimeDelta(), expected_http_rtt); - http_rtt_notification_wait_ = expected_http_rtt; - if (http_rtt_notification_wait_ == http_rtt_) - return; - - // WaitForNotification should not be called twice. - EXPECT_EQ(nullptr, run_loop_); - run_loop_ = std::make_unique<base::RunLoop>(); - run_loop_->Run(); - EXPECT_EQ(expected_http_rtt, http_rtt_); - run_loop_.reset(); - } - - private: - // RTTAndThroughputEstimatesObserver implementation: - void OnRTTOrThroughputEstimatesComputed( - base::TimeDelta http_rtt, - base::TimeDelta transport_rtt, - int32_t downstream_throughput_kbps) override { - EXPECT_EQ(http_rtt, tracker_->GetHttpRTT()); - EXPECT_EQ(downstream_throughput_kbps, - tracker_->GetDownstreamThroughputKbps()); - - http_rtt_ = http_rtt; - downstream_throughput_kbps_ = downstream_throughput_kbps; - - if (run_loop_ && http_rtt == http_rtt_notification_wait_) - run_loop_->Quit(); - } - - raw_ptr<network::NetworkQualityTracker> tracker_; - // May be null. - std::unique_ptr<base::RunLoop> run_loop_; - base::TimeDelta http_rtt_; - int32_t downstream_throughput_kbps_; - base::TimeDelta http_rtt_notification_wait_; -}; - -} // namespace - -class DataSaverBrowserTest : public InProcessBrowserTest { - protected: - void EnableDataSaver(bool enabled) { - SetDataSaverEnabled(browser()->profile(), enabled); - } - - void VerifySaveDataHeader(const std::string& expected_header_value, - Browser* browser = nullptr) { - if (!browser) - browser = InProcessBrowserTest::browser(); - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser, embedded_test_server()->GetURL("/echoheader?Save-Data"))); - EXPECT_EQ( - expected_header_value, - content::EvalJs(browser->tab_strip_model()->GetActiveWebContents(), - "document.body.textContent;")); - } -}; - -IN_PROC_BROWSER_TEST_F(DataSaverBrowserTest, DataSaverEnabled) { - ASSERT_TRUE(embedded_test_server()->Start()); - EnableDataSaver(true); - VerifySaveDataHeader("on"); -} - -IN_PROC_BROWSER_TEST_F(DataSaverBrowserTest, DataSaverDisabled) { - ASSERT_TRUE(embedded_test_server()->Start()); - EnableDataSaver(false); - VerifySaveDataHeader("None"); -} - -IN_PROC_BROWSER_TEST_F(DataSaverBrowserTest, DataSaverDisabledInIncognito) { - ASSERT_TRUE(embedded_test_server()->Start()); - EnableDataSaver(true); - VerifySaveDataHeader("None", CreateIncognitoBrowser()); -} - -class DataSaverWithServerBrowserTest : public InProcessBrowserTest { - protected: - void Init() { - test_server_ = std::make_unique<net::EmbeddedTestServer>(); - test_server_->RegisterRequestHandler(base::BindRepeating( - &DataSaverWithServerBrowserTest::VerifySaveDataHeader, - base::Unretained(this))); - test_server_->ServeFilesFromSourceDirectory(GetChromeTestDataDir()); - } - - void EnableDataSaver(bool enabled) { - SetDataSaverEnabled(browser()->profile(), enabled); - } - - std::unique_ptr<net::test_server::HttpResponse> VerifySaveDataHeader( - const net::test_server::HttpRequest& request) { - auto save_data_header_it = request.headers.find("save-data"); - - if (request.relative_url == "/favicon.ico") { - // Favicon request could be received for the previous page load. - return nullptr; - } - - if (!expected_save_data_header_.empty()) { - EXPECT_TRUE(save_data_header_it != request.headers.end()) - << request.relative_url; - EXPECT_EQ(expected_save_data_header_, save_data_header_it->second) - << request.relative_url; - } else { - EXPECT_TRUE(save_data_header_it == request.headers.end()) - << request.relative_url; - } - return nullptr; - } - - std::unique_ptr<net::EmbeddedTestServer> test_server_; - std::string expected_save_data_header_; -}; - -IN_PROC_BROWSER_TEST_F(DataSaverWithServerBrowserTest, ReloadPage) { - Init(); - ASSERT_TRUE(test_server_->Start()); - EnableDataSaver(true); - - expected_save_data_header_ = "on"; - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), test_server_->GetURL("/google/google.html"))); - - // Reload the webpage and expect the main and the subresources will get the - // correct save-data header. - expected_save_data_header_ = "on"; - chrome::Reload(browser(), WindowOpenDisposition::CURRENT_TAB); - EXPECT_TRUE(content::WaitForLoadStop( - browser()->tab_strip_model()->GetActiveWebContents())); - - // Reload the webpage with data saver disabled, and expect all the resources - // will get no save-data header. - EnableDataSaver(false); - expected_save_data_header_ = ""; - chrome::Reload(browser(), WindowOpenDisposition::CURRENT_TAB); - EXPECT_TRUE(content::WaitForLoadStop( - browser()->tab_strip_model()->GetActiveWebContents())); -} - -class DataSaverForWorkerBrowserTest : public InProcessBrowserTest, - public testing::WithParamInterface<bool> { - protected: - void EnableDataSaver(bool enabled) { - SetDataSaverEnabled(browser()->profile(), enabled); - } - - // Sends a request to |url| and returns its headers via |header_map|. |script| - // is provided as the response body. - void RequestAndGetHeaders( - const std::string& url, - const std::string& script, - net::test_server::HttpRequest::HeaderMap* header_map) { - base::RunLoop loop; - embedded_test_server()->RegisterRequestHandler(base::BindRepeating( - &CaptureHeaderHandlerWithContent, "/capture", header_map, - "text/javascript", script, loop.QuitClosure())); - ASSERT_TRUE(embedded_test_server()->Start()); - - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), embedded_test_server()->GetURL(url))); - loop.Run(); - } - - content::WebContents* GetActiveWebContents() { - return browser()->tab_strip_model()->GetActiveWebContents(); - } - - static bool IsEnabledDataSaver() { return GetParam(); } -}; - -INSTANTIATE_TEST_SUITE_P(/* no prefix */, - DataSaverForWorkerBrowserTest, - testing::Bool()); - -// Checks that the Save-Data header is sent in a request for dedicated worker -// script when the data saver is enabled. -IN_PROC_BROWSER_TEST_P(DataSaverForWorkerBrowserTest, DedicatedWorker) { - EnableDataSaver(IsEnabledDataSaver()); - - const std::string kWorkerScript = R"(postMessage('DONE');)"; - net::test_server::HttpRequest::HeaderMap header_map; - RequestAndGetHeaders( - "/workers/create_dedicated_worker.html?worker_url=/capture", - kWorkerScript, &header_map); - - if (IsEnabledDataSaver()) { - EXPECT_TRUE(base::Contains(header_map, "Save-Data")); - EXPECT_EQ("on", header_map["Save-Data"]); - } else { - EXPECT_FALSE(base::Contains(header_map, "Save-Data")); - } - - // Wait until the worker script is loaded to stop the test from crashing - // during destruction. - EXPECT_EQ("DONE", content::EvalJs( - browser()->tab_strip_model()->GetActiveWebContents(), - "waitForMessage();")); -} - -// Checks that the Save-Data header is sent in a request for shared worker -// script when the data saver is enabled. Disabled on Android since a shared -// worker is not available on Android. -#if BUILDFLAG(IS_ANDROID) -#define MAYBE_SharedWorker DISABLED_SharedWorker -#else -#define MAYBE_SharedWorker SharedWorker -#endif -IN_PROC_BROWSER_TEST_P(DataSaverForWorkerBrowserTest, MAYBE_SharedWorker) { - EnableDataSaver(IsEnabledDataSaver()); - - const std::string kWorkerScript = - R"(self.onconnect = e => { e.ports[0].postMessage('DONE'); };)"; - net::test_server::HttpRequest::HeaderMap header_map; - RequestAndGetHeaders("/workers/create_shared_worker.html?worker_url=/capture", - kWorkerScript, &header_map); - - if (IsEnabledDataSaver()) { - EXPECT_TRUE(base::Contains(header_map, "Save-Data")); - EXPECT_EQ("on", header_map["Save-Data"]); - } else { - EXPECT_FALSE(base::Contains(header_map, "Save-Data")); - } - - // Wait until the worker script is loaded to stop the test from crashing - // during destruction. - EXPECT_EQ("DONE", content::EvalJs( - browser()->tab_strip_model()->GetActiveWebContents(), - "waitForMessage();")); -} - -// Checks that the Save-Data header is not sent in a request for a service -// worker script when it's disabled. -IN_PROC_BROWSER_TEST_P(DataSaverForWorkerBrowserTest, ServiceWorker_Register) { - EnableDataSaver(IsEnabledDataSaver()); - net::test_server::HttpRequest::HeaderMap header_map; - base::RunLoop loop; - embedded_test_server()->RegisterRequestHandler(base::BindRepeating( - &CaptureHeaderHandlerWithContent, "/capture", &header_map, - "text/javascript", "// empty", loop.QuitClosure())); - ASSERT_TRUE(embedded_test_server()->Start()); - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), embedded_test_server()->GetURL( - "/service_worker/create_service_worker.html"))); - - EXPECT_EQ("DONE", - content::EvalJs(GetActiveWebContents(), "register('/capture');")); - loop.Run(); - - if (IsEnabledDataSaver()) { - EXPECT_TRUE(base::Contains(header_map, "Save-Data")); - EXPECT_EQ("on", header_map["Save-Data"]); - } else { - EXPECT_FALSE(base::Contains(header_map, "Save-Data")); - } - - // Service worker doesn't have to wait for onmessage event because - // navigator.serviceWorker.ready can ensure that the script load has - // been completed. -} - -// Checks that the Save-Data header is not sent in a request for a service -// worker script when it's disabled. -IN_PROC_BROWSER_TEST_P(DataSaverForWorkerBrowserTest, ServiceWorker_Update) { - EnableDataSaver(IsEnabledDataSaver()); - net::test_server::HttpRequest::HeaderMap header_map; - base::RunLoop loop; - // Wait for two requests to capture the request header for updating. - embedded_test_server()->RegisterRequestHandler( - base::BindRepeating(&CaptureHeaderHandlerWithContent, "/capture", - &header_map, "text/javascript", "// empty", - base::BarrierClosure(2, loop.QuitClosure()))); - ASSERT_TRUE(embedded_test_server()->Start()); - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), embedded_test_server()->GetURL( - "/service_worker/create_service_worker.html"))); - - EXPECT_EQ("DONE", - content::EvalJs(GetActiveWebContents(), "register('/capture');")); - EXPECT_EQ("DONE", content::EvalJs(GetActiveWebContents(), "update();")); - loop.Run(); - - if (IsEnabledDataSaver()) { - EXPECT_TRUE(base::Contains(header_map, "Save-Data")); - EXPECT_EQ("on", header_map["Save-Data"]); - } else { - EXPECT_FALSE(base::Contains(header_map, "Save-Data")); - } - - // Service worker doesn't have to wait for onmessage event because - // navigator.serviceWorker.ready can ensure that the script load has - // been completed. -} - -// Checks that Save-Data header is appropriately set to requests from fetch() in -// a dedicated worker. -IN_PROC_BROWSER_TEST_P(DataSaverForWorkerBrowserTest, FetchFromWorker) { - EnableDataSaver(IsEnabledDataSaver()); - ASSERT_TRUE(embedded_test_server()->Start()); - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), - embedded_test_server()->GetURL("/workers/fetch_from_worker.html"))); - const char* expected = IsEnabledDataSaver() ? "on" : "None"; - EXPECT_EQ(expected, - content::EvalJs(GetActiveWebContents(), - "fetch_from_worker('/echoheader?Save-Data');")); -} - -// Checks that Save-Data header is appropriately set to requests from fetch() in -// a shared worker. -IN_PROC_BROWSER_TEST_P(DataSaverForWorkerBrowserTest, FetchFromSharedWorker) { - EnableDataSaver(IsEnabledDataSaver()); - ASSERT_TRUE(embedded_test_server()->Start()); - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), embedded_test_server()->GetURL( - "/workers/fetch_from_shared_worker.html"))); - const char* expected = IsEnabledDataSaver() ? "on" : "None"; - EXPECT_EQ( - expected, - content::EvalJs(GetActiveWebContents(), - "fetch_from_shared_worker('/echoheader?Save-Data');")); -} - -// Checks that Save-Data header is appropriately set to requests from fetch() in -// a service worker. -IN_PROC_BROWSER_TEST_P(DataSaverForWorkerBrowserTest, FetchFromServiceWorker) { - EnableDataSaver(IsEnabledDataSaver()); - ASSERT_TRUE(embedded_test_server()->Start()); - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), embedded_test_server()->GetURL( - "/service_worker/fetch_from_service_worker.html"))); - EXPECT_EQ("ready", content::EvalJs(GetActiveWebContents(), "setup();")); - - const char* expected = IsEnabledDataSaver() ? "on" : "None"; - EXPECT_EQ( - expected, - content::EvalJs(GetActiveWebContents(), - "fetch_from_service_worker('/echoheader?Save-Data');")); -} - -// Checks that Save-Data header is appropriately set to requests from fetch() in -// a page controlled by a service worker without fetch handler. -IN_PROC_BROWSER_TEST_P(DataSaverForWorkerBrowserTest, - FetchFromServiceWorkerControlledPage_NoFetchHandler) { - EnableDataSaver(IsEnabledDataSaver()); - ASSERT_TRUE(embedded_test_server()->Start()); - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), embedded_test_server()->GetURL( - "/service_worker/create_service_worker.html"))); - EXPECT_EQ("DONE", - content::EvalJs(GetActiveWebContents(), "register('empty.js');")); - - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), - embedded_test_server()->GetURL("/service_worker/fetch_from_page.html"))); - - const char* expected = IsEnabledDataSaver() ? "on" : "None"; - EXPECT_EQ(expected, - content::EvalJs(GetActiveWebContents(), - "fetch_from_page('/echoheader?Save-Data');")); -} - -// Checks that Save-Data header is appropriately set to requests from fetch() in -// a page controlled by a service worker with fetch handler but no respondWith. -IN_PROC_BROWSER_TEST_P(DataSaverForWorkerBrowserTest, - FetchFromServiceWorkerControlledPage_PassThrough) { - EnableDataSaver(IsEnabledDataSaver()); - ASSERT_TRUE(embedded_test_server()->Start()); - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), embedded_test_server()->GetURL( - "/service_worker/create_service_worker.html"))); - EXPECT_EQ("DONE", - content::EvalJs(GetActiveWebContents(), - "register('fetch_event_pass_through.js');")); - - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), - embedded_test_server()->GetURL("/service_worker/fetch_from_page.html"))); - - const char* expected = IsEnabledDataSaver() ? "on" : "None"; - EXPECT_EQ(expected, - content::EvalJs(GetActiveWebContents(), - "fetch_from_page('/echoheader?Save-Data');")); -} - -// Checks that Save-Data header is appropriately set to requests from fetch() in -// a page controlled by a service worker with fetch handler and responds with -// fetch(). -IN_PROC_BROWSER_TEST_P(DataSaverForWorkerBrowserTest, - FetchFromServiceWorkerControlledPage_RespondWithFetch) { - EnableDataSaver(IsEnabledDataSaver()); - ASSERT_TRUE(embedded_test_server()->Start()); - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), embedded_test_server()->GetURL( - "/service_worker/create_service_worker.html"))); - EXPECT_EQ("DONE", - content::EvalJs(GetActiveWebContents(), - "register('fetch_event_respond_with_fetch.js');")); - - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), - embedded_test_server()->GetURL("/service_worker/fetch_from_page.html"))); - - const char* expected = IsEnabledDataSaver() ? "on" : "None"; - EXPECT_EQ(expected, - content::EvalJs(GetActiveWebContents(), - "fetch_from_page('/echoheader?Save-Data');")); -} - -class DataSaverWithImageServerBrowserTest : public InProcessBrowserTest { - public: - DataSaverWithImageServerBrowserTest() { - scoped_feature_list_.InitWithFeatures({blink::features::kSaveDataImgSrcset}, - {}); - } - void SetUp() override { - test_server_ = std::make_unique<net::EmbeddedTestServer>(); - test_server_->RegisterRequestMonitor(base::BindRepeating( - &DataSaverWithImageServerBrowserTest::MonitorImageRequest, - base::Unretained(this))); - test_server_->ServeFilesFromSourceDirectory(GetChromeTestDataDir()); - LOG(WARNING) << GetChromeTestDataDir(); - ASSERT_TRUE(test_server_->Start()); - - - InProcessBrowserTest::SetUp(); - } - - void EnableDataSaver(bool enabled) { - SetDataSaverEnabled(browser()->profile(), enabled); - } - - void SetImagesNotToLoad(const std::vector<std::string>& imgs_not_to_load) { - imgs_not_to_load_ = std::vector<std::string>(imgs_not_to_load); - } - - std::unique_ptr<net::EmbeddedTestServer> test_server_; - - private: - // Called by |test_server_|. - void MonitorImageRequest(const net::test_server::HttpRequest& request) { - for (const auto& img : imgs_not_to_load_) - EXPECT_FALSE(request.GetURL().path() == img); - } - - base::test::ScopedFeatureList scoped_feature_list_; - std::vector<std::string> imgs_not_to_load_; -}; - -IN_PROC_BROWSER_TEST_F(DataSaverWithImageServerBrowserTest, - ImgSrcset_DataSaverEnabled) { - EnableDataSaver(true); - SetImagesNotToLoad({"/data_saver/red.jpg"}); - - base::HistogramTester histogram_tester; - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), test_server_->GetURL("/data_saver/image_srcset.html"))); -} - -IN_PROC_BROWSER_TEST_F(DataSaverWithImageServerBrowserTest, - ImgSrcset_DataSaverDisabled) { - EnableDataSaver(false); - SetImagesNotToLoad({"/data_saver/green.jpg"}); - - base::HistogramTester histogram_tester; - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), test_server_->GetURL("/data_saver/image_srcset.html"))); -}
diff --git a/chrome/browser/data_saver/data_saver_holdback_browsertest.cc b/chrome/browser/data_saver/data_saver_holdback_browsertest.cc deleted file mode 100644 index 67d5390..0000000 --- a/chrome/browser/data_saver/data_saver_holdback_browsertest.cc +++ /dev/null
@@ -1,84 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <string> - -#include "base/metrics/field_trial_param_associator.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "chrome/test/base/ui_test_utils.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" -#include "components/prefs/pref_service.h" -#include "content/public/common/content_features.h" -#include "content/public/test/browser_test.h" -#include "content/public/test/browser_test_base.h" -#include "content/public/test/browser_test_utils.h" -#include "net/test/embedded_test_server/embedded_test_server.h" - -// Tests if the save data header holdback works as expected. -class DataSaverHoldbackBrowserTest : public InProcessBrowserTest, - public testing::WithParamInterface<bool> { - protected: - DataSaverHoldbackBrowserTest() { ConfigureHoldbackExperiment(); } - void SetUp() override { - test_server_.ServeFilesFromSourceDirectory("content/test/data"); - ASSERT_TRUE(test_server_.Start()); - InProcessBrowserTest::SetUp(); - } - - void SetUpCommandLine(base::CommandLine* cmd) override { - cmd->AppendSwitch( - data_reduction_proxy::switches::kEnableDataReductionProxy); - } - - void VerifySaveDataHeader(const std::string& expected_header_value) { - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), embedded_test_server()->GetURL("/echoheader?Save-Data"))); - EXPECT_EQ( - expected_header_value, - content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(), - "document.body.textContent;")); - } - - void VerifySaveDataAPI(bool expected_header_set) { - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser(), test_server_.GetURL("/net_info.html"))); - EXPECT_EQ(expected_header_set, RunScriptExtractBool("getSaveData()")); - } - - void ConfigureHoldbackExperiment() { - std::map<std::string, std::string> params; - params["holdback_web"] = GetParam() ? "true" : "false"; - scoped_feature_list_.InitWithFeaturesAndParameters( - {{features::kDataSaverHoldback, {params}}}, {}); - } - - private: - bool RunScriptExtractBool(const std::string& script) { - return content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(), - script, content::EXECUTE_SCRIPT_USE_MANUAL_REPLY) - .ExtractBool(); - } - - net::EmbeddedTestServer test_server_; - base::test::ScopedFeatureList scoped_feature_list_; -}; - -// The data saver holdback is enabled only if the first param is true. -INSTANTIATE_TEST_SUITE_P(All, DataSaverHoldbackBrowserTest, testing::Bool()); - -IN_PROC_BROWSER_TEST_P(DataSaverHoldbackBrowserTest, - DataSaverEnabledWithHoldbackEnabled) { - ASSERT_TRUE(embedded_test_server()->Start()); - - // If holdback is enabled, then the save-data header should not be set. - if (GetParam()) { - VerifySaveDataHeader("None"); - } else { - VerifySaveDataHeader("on"); - } - VerifySaveDataAPI(!GetParam()); -}
diff --git a/chrome/browser/data_saver/data_saver_webapis_browsertest.cc b/chrome/browser/data_saver/data_saver_webapis_browsertest.cc deleted file mode 100644 index c12d370..0000000 --- a/chrome/browser/data_saver/data_saver_webapis_browsertest.cc +++ /dev/null
@@ -1,91 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <memory> -#include <string> - -#include "base/command_line.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/browser_commands.h" -#include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "chrome/test/base/ui_test_utils.h" -#include "components/prefs/pref_service.h" -#include "content/public/common/content_switches.h" -#include "content/public/test/browser_test.h" -#include "content/public/test/browser_test_base.h" -#include "content/public/test/browser_test_utils.h" -#include "net/test/embedded_test_server/embedded_test_server.h" -#include "net/test/embedded_test_server/http_request.h" -#include "net/test/embedded_test_server/http_response.h" - -// Verify that the saveData attribute in NetInfo JavaScript API is set -// correctly. -class DataSaverWebAPIsBrowserTest : public InProcessBrowserTest { - protected: - void EnableDataSaver(bool enabled) { - data_reduction_proxy::DataReductionProxySettings:: - SetDataSaverEnabledForTesting(browser()->profile()->GetPrefs(), - enabled); - } - - void SetUp() override { - test_server_.ServeFilesFromSourceDirectory("content/test/data"); - ASSERT_TRUE(test_server_.Start()); - InProcessBrowserTest::SetUp(); - } - - void VerifySaveDataAPI(bool expected_header_set, Browser* browser = nullptr) { - if (!browser) - browser = InProcessBrowserTest::browser(); - ASSERT_TRUE(ui_test_utils::NavigateToURL( - browser, test_server_.GetURL("/net_info.html"))); - EXPECT_EQ(expected_header_set, - RunScriptExtractBool(browser, "getSaveData()")); - } - - private: - bool RunScriptExtractBool(Browser* browser, const std::string& script) { - return content::EvalJs(browser->tab_strip_model()->GetActiveWebContents(), - script, content::EXECUTE_SCRIPT_USE_MANUAL_REPLY) - .ExtractBool(); - } - - void SetUpCommandLine(base::CommandLine* command_line) override { - command_line->AppendSwitch( - switches::kEnableExperimentalWebPlatformFeatures); - } - - net::EmbeddedTestServer test_server_; -}; - -IN_PROC_BROWSER_TEST_F(DataSaverWebAPIsBrowserTest, DataSaverEnabledJS) { - EnableDataSaver(true); - VerifySaveDataAPI(true); -} - -IN_PROC_BROWSER_TEST_F(DataSaverWebAPIsBrowserTest, DataSaverDisabledJS) { - EnableDataSaver(false); - VerifySaveDataAPI(false); -} - -IN_PROC_BROWSER_TEST_F(DataSaverWebAPIsBrowserTest, DataSaverToggleJS) { - EnableDataSaver(false); - VerifySaveDataAPI(false); - - EnableDataSaver(true); - VerifySaveDataAPI(true); - - EnableDataSaver(false); - VerifySaveDataAPI(false); -} - -IN_PROC_BROWSER_TEST_F(DataSaverWebAPIsBrowserTest, - DataSaverDisabledInIncognito) { - EnableDataSaver(true); - VerifySaveDataAPI(false, CreateIncognitoBrowser()); -}
diff --git a/chrome/browser/download/android/download_dialog_bridge.cc b/chrome/browser/download/android/download_dialog_bridge.cc index 87259d0..bbf1666 100644 --- a/chrome/browser/download/android/download_dialog_bridge.cc +++ b/chrome/browser/download/android/download_dialog_bridge.cc
@@ -161,14 +161,6 @@ } // static -jboolean JNI_DownloadDialogBridge_IsDataReductionProxyEnabled(JNIEnv* env) { - auto* data_reduction_settings = - DataReductionProxyChromeSettingsFactory::GetForBrowserContext( - ProfileManager::GetActiveUserProfile()); - return data_reduction_settings->IsDataReductionProxyEnabled(); -} - -// static jlong JNI_DownloadDialogBridge_GetDownloadLaterMinFileSize(JNIEnv* env) { return DownloadDialogBridge::GetDownloadLaterMinFileSize(); }
diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadInfo.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadInfo.java index 3f486a5..9d86522 100644 --- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadInfo.java +++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadInfo.java
@@ -299,10 +299,7 @@ .setLastAccessTime(item.lastAccessedTimeMs) .setIsOpenable(item.isOpenable) .setMimeType(item.mimeType) - - // TODO(https://crbug.com/1278805): Continue migration for OfflineItem - .setUrl(new GURL(item.url)) - + .setUrl(item.url) .setOriginalUrl(item.originalUrl) .setOTRProfileId(OTRProfileID.deserialize(item.otrProfileId)) .setState(state)
diff --git a/chrome/browser/download/internal/android/BUILD.gn b/chrome/browser/download/internal/android/BUILD.gn index 885a40ee..e50bbd2d 100644 --- a/chrome/browser/download/internal/android/BUILD.gn +++ b/chrome/browser/download/internal/android/BUILD.gn
@@ -125,6 +125,7 @@ "//third_party/androidx:androidx_recyclerview_recyclerview_java", "//third_party/androidx:androidx_vectordrawable_vectordrawable_animated_java", "//ui/android:ui_java", + "//url:gurl_java", ] annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] @@ -236,6 +237,8 @@ "//third_party/mockito:mockito_java", "//ui/android:ui_java", "//ui/android:ui_java_test_support", + "//url:gurl_java", + "//url:gurl_junit_test_support", ] resources_package = "org.chromium.chrome.browser.download.internal" @@ -272,6 +275,8 @@ "//third_party/junit:junit", "//third_party/mockito:mockito_java", "//ui/android:ui_full_java", + "//url:gurl_java", + "//url:gurl_junit_test_support", ] resources_package = "org.chromium.chrome.browser.download.internal"
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/DownloadActivityV2Test.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/DownloadActivityV2Test.java index 801402bb..6c5b67c 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/DownloadActivityV2Test.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/DownloadActivityV2Test.java
@@ -79,6 +79,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.test.util.DummyUiActivityTestCase; import org.chromium.ui.test.util.UiRestriction; +import org.chromium.url.JUnitTestGURLs; import java.util.ArrayList; import java.util.HashMap; @@ -301,8 +302,8 @@ // Add an item. The new item should be visible and the storage text should be updated. OfflineItem item5 = StubbedProvider.createOfflineItem("offline_guid_5", - "http://stuff_and_things.com", OfflineItemState.COMPLETE, 1024, "page 5", - "/data/fake_path/Downloads/file_5", System.currentTimeMillis(), 100000, + JUnitTestGURLs.getGURL(JUnitTestGURLs.URL_2), OfflineItemState.COMPLETE, 1024, + "page 5", "/data/fake_path/Downloads/file_5", System.currentTimeMillis(), 100000, OfflineItemFilter.OTHER); TestThreadUtils.runOnUiThreadBlocking(() -> mStubbedOfflineContentProvider.addItem(item5));
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/StubbedProvider.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/StubbedProvider.java index 4d48fcb..03458b8 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/StubbedProvider.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/StubbedProvider.java
@@ -22,6 +22,8 @@ import org.chromium.components.offline_items_collection.RenameResult; import org.chromium.components.offline_items_collection.ShareCallback; import org.chromium.components.offline_items_collection.VisualsCallback; +import org.chromium.url.GURL; +import org.chromium.url.JUnitTestGURLs; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -125,23 +127,27 @@ long startTime = dateToEpoch(date); int downloadState = OfflineItemState.COMPLETE; if (which == 0) { - return createOfflineItem("offline_guid_1", "https://url.com", downloadState, 0, - "page 1", "/data/fake_path/Downloads/first_file", startTime, 1000, filter); + return createOfflineItem("offline_guid_1", JUnitTestGURLs.getGURL(JUnitTestGURLs.URL_1), + downloadState, 0, "page 1", "/data/fake_path/Downloads/first_file", startTime, + 1000, filter); } else if (which == 1) { - return createOfflineItem("offline_guid_2", "http://stuff_and_things.com", downloadState, - 0, "page 2", "/data/fake_path/Downloads/file_two", startTime, 10000, filter); + return createOfflineItem("offline_guid_2", JUnitTestGURLs.getGURL(JUnitTestGURLs.URL_2), + downloadState, 0, "page 2", "/data/fake_path/Downloads/file_two", startTime, + 10000, filter); } else if (which == 2) { - return createOfflineItem("offline_guid_3", "https://url.com", downloadState, 100, - "page 3", "/data/fake_path/Downloads/3_file", startTime, 100000, filter); + return createOfflineItem("offline_guid_3", JUnitTestGURLs.getGURL(JUnitTestGURLs.URL_1), + downloadState, 100, "page 3", "/data/fake_path/Downloads/3_file", startTime, + 100000, filter); } else if (which == 3) { - return createOfflineItem("offline_guid_4", "https://things.com", downloadState, 1024, - "page 4", "/data/fake_path/Downloads/4", startTime, ONE_GIGABYTE * 5L, filter); + return createOfflineItem("offline_guid_4", JUnitTestGURLs.getGURL(JUnitTestGURLs.URL_3), + downloadState, 1024, "page 4", "/data/fake_path/Downloads/4", startTime, + ONE_GIGABYTE * 5L, filter); } else { return null; } } - public static OfflineItem createOfflineItem(String guid, String url, int state, + public static OfflineItem createOfflineItem(String guid, GURL url, int state, long downloadProgressBytes, String title, String targetPath, long startTime, long totalSize, int filter) { OfflineItem offlineItem = new OfflineItem();
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java index 2f83d830..8a35af7 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java
@@ -4,7 +4,7 @@ package org.chromium.chrome.browser.download.home.list; -import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -44,6 +44,8 @@ import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.components.url_formatter.UrlFormatterJni; import org.chromium.ui.modelutil.ListObservable.ListObserver; +import org.chromium.url.GURL; +import org.chromium.url.JUnitTestGURLs; import java.util.ArrayList; import java.util.Arrays; @@ -79,9 +81,9 @@ public void setUp() { mModel = new ListItemModel(); mJniMocker.mock(UrlFormatterJni.TEST_HOOKS, mUrlFormatterJniMock); - when(mUrlFormatterJniMock.formatStringUrlForSecurityDisplay( - anyString(), eq(SchemeDisplay.OMIT_HTTP_AND_HTTPS))) - .then(inv -> inv.getArgument(0)); + when(mUrlFormatterJniMock.formatUrlForSecurityDisplay( + any(), eq(SchemeDisplay.OMIT_HTTP_AND_HTTPS))) + .then(inv -> ((GURL) (inv.getArgument(0))).getSpec()); } @After @@ -1086,7 +1088,7 @@ Assert.assertEquals(10, mModel.size()); assertDivider(mModel.get(0), ListItem.CardDividerListItem.Position.TOP); - assertCardHeader(mModel.get(1), buildCalendar(2018, 1, 4, 0), "http://example.com/xyz"); + assertCardHeader(mModel.get(1), buildCalendar(2018, 1, 4, 0), JUnitTestGURLs.EXAMPLE_URL); assertOfflineItem(mModel.get(2), buildCalendar(2018, 1, 4, 4), item4); assertDivider(mModel.get(3), ListItem.CardDividerListItem.Position.MIDDLE); assertOfflineItem(mModel.get(4), buildCalendar(2018, 1, 4, 3), item3); @@ -1192,7 +1194,7 @@ item.isSuggested = true; item.creationTimeMs = calendar.getTimeInMillis(); item.filter = filter; - item.url = "http://example.com/xyz"; + item.url = JUnitTestGURLs.getGURL(JUnitTestGURLs.EXAMPLE_URL); return item; }
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtils.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtils.java index fb6ac99..147c7840 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtils.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtils.java
@@ -6,7 +6,6 @@ import android.content.Intent; import android.net.Uri; -import android.text.TextUtils; import androidx.core.util.Pair; @@ -49,9 +48,9 @@ Uri uri = item.second == null ? null : item.second.uri; if (uri != null && uri.compareTo(Uri.EMPTY) != 0) { uris.add(uri); - } else if (!TextUtils.isEmpty(item.first.url)) { + } else if (item.first.url != null && !item.first.url.isEmpty()) { if (urls.length() > 0) urls.append("\n"); - urls.append(item.first.url); + urls.append(item.first.url.getSpec()); } }
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java index a8f1b42..459be008 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java
@@ -17,6 +17,8 @@ import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.components.offline_items_collection.OfflineItem; import org.chromium.components.offline_items_collection.OfflineItemShareInfo; +import org.chromium.url.GURL; +import org.chromium.url.JUnitTestGURLs; import java.util.Arrays; import java.util.Collections; @@ -35,112 +37,111 @@ @Test public void testAction() { Intent intent = ShareUtils.createIntent(Collections.singletonList( - createItem("http://www.google.com", "text/plain", "", null))); + createItem(JUnitTestGURLs.URL_1, "text/plain", "", null))); Assert.assertEquals(Intent.ACTION_SEND, intent.getAction()); intent = ShareUtils.createIntent( - Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.chrome.com", "text/plain", "", null))); + Arrays.asList(createItem(JUnitTestGURLs.URL_1, "text/plain", "", null), + createItem(JUnitTestGURLs.URL_2, "text/plain", "", null))); Assert.assertEquals(Intent.ACTION_SEND, intent.getAction()); intent = ShareUtils.createIntent( - Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), - createItem("", "text/plain", "", "http://www.chrome.com"))); + Arrays.asList(createItem(JUnitTestGURLs.URL_1, "text/plain", "", null), + createItem("", "text/plain", "", JUnitTestGURLs.URL_2))); Assert.assertEquals(Intent.ACTION_SEND_MULTIPLE, intent.getAction()); intent = ShareUtils.createIntent( - Arrays.asList(createItem("", "text/plain", "", "http://www.google.com"), - createItem("", "text/plain", "", "http://www.chrome.com"))); + Arrays.asList(createItem("", "text/plain", "", JUnitTestGURLs.URL_1), + createItem("", "text/plain", "", JUnitTestGURLs.URL_2))); Assert.assertEquals(Intent.ACTION_SEND_MULTIPLE, intent.getAction()); } @Test public void testFlags() { Intent intent = ShareUtils.createIntent(Collections.singletonList( - createItem("http://www.google.com", "text/plain", "", null))); + createItem(JUnitTestGURLs.URL_1, "text/plain", "", null))); Assert.assertNotEquals(0, intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); } @Test public void testExtraText() { Intent intent = ShareUtils.createIntent(Collections.singletonList( - createItem("http://www.google.com", "text/plain", "", null))); - Assert.assertEquals("http://www.google.com", intent.getStringExtra(Intent.EXTRA_TEXT)); - - intent = ShareUtils.createIntent(Arrays.asList( - createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.chrome.com", "text/plain", "", "http://www.chrome.com"))); - Assert.assertEquals("http://www.google.com", intent.getStringExtra(Intent.EXTRA_TEXT)); + createItem(JUnitTestGURLs.URL_1, "text/plain", "", null))); + Assert.assertEquals(JUnitTestGURLs.URL_1, intent.getStringExtra(Intent.EXTRA_TEXT)); intent = ShareUtils.createIntent( - Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.chrome.com", "text/plain", "", null))); - Assert.assertEquals("http://www.google.com\nhttp://www.chrome.com", + Arrays.asList(createItem(JUnitTestGURLs.URL_1, "text/plain", "", null), + createItem(JUnitTestGURLs.URL_2, "text/plain", "", JUnitTestGURLs.URL_2))); + Assert.assertEquals(JUnitTestGURLs.URL_1, intent.getStringExtra(Intent.EXTRA_TEXT)); + + intent = ShareUtils.createIntent( + Arrays.asList(createItem(JUnitTestGURLs.URL_1, "text/plain", "", null), + createItem(JUnitTestGURLs.URL_2, "text/plain", "", null))); + Assert.assertEquals(JUnitTestGURLs.URL_1 + "\n" + JUnitTestGURLs.URL_2, intent.getStringExtra(Intent.EXTRA_TEXT)); - intent = ShareUtils.createIntent(Collections.singletonList( - createItem("", "text/plain", "", "http://www.google.com"))); + intent = ShareUtils.createIntent( + Collections.singletonList(createItem("", "text/plain", "", JUnitTestGURLs.URL_1))); Assert.assertFalse(intent.hasExtra(Intent.EXTRA_TEXT)); } @Test public void testExtraSubject() { Intent intent = ShareUtils.createIntent(Collections.singletonList( - createItem("http://www.google.com", "text/plain", "title", null))); + createItem(JUnitTestGURLs.URL_1, "text/plain", "title", null))); Assert.assertEquals("title", intent.getStringExtra(Intent.EXTRA_SUBJECT)); - intent = ShareUtils.createIntent( - Arrays.asList(createItem("http://www.google.com", "text/plain", "title1", null), - createItem("http://www.chrome.com", "text/plain", "title2", - "http://www.chrome.com"))); + intent = ShareUtils.createIntent(Arrays.asList( + createItem(JUnitTestGURLs.URL_1, "text/plain", "title1", null), + createItem(JUnitTestGURLs.URL_2, "text/plain", "title2", JUnitTestGURLs.URL_2))); Assert.assertFalse(intent.hasExtra(Intent.EXTRA_SUBJECT)); } @Test public void testExtraStream() { Intent intent = ShareUtils.createIntent(Collections.singletonList( - createItem("http://www.google.com", "text/plain", "", null))); - Assert.assertFalse(intent.hasExtra(Intent.EXTRA_STREAM)); - Assert.assertNull(intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); - - intent = ShareUtils.createIntent(Collections.singletonList( - createItem("", "text/plain", "", "http://www.google.com"))); - Assert.assertEquals( - Uri.parse("http://www.google.com"), intent.getParcelableExtra(Intent.EXTRA_STREAM)); - - intent = ShareUtils.createIntent(Collections.singletonList( - createItem("http://www.google.com", "text/plain", "", "http://www.google.com"))); - Assert.assertEquals( - Uri.parse("http://www.google.com"), intent.getParcelableExtra(Intent.EXTRA_STREAM)); - - intent = ShareUtils.createIntent( - Arrays.asList(createItem("", "text/plain", "", "http://www.google.com"), - createItem("http://www.chrome.com", "text/plain", "", ""))); - Assert.assertEquals( - Uri.parse("http://www.google.com"), intent.getParcelableExtra(Intent.EXTRA_STREAM)); - - intent = ShareUtils.createIntent(Arrays.asList( - createItem("", "text/plain", "", "http://www.google.com"), - createItem("http://www.chrome.com", "text/plain", "", "http://www.chrome.com"))); - Assert.assertEquals(Arrays.asList(Uri.parse("http://www.google.com"), - Uri.parse("http://www.chrome.com")), - intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); - - intent = ShareUtils.createIntent( - Arrays.asList(createItem("", "text/plain", "", "http://www.google.com"), - createItem("", "text/plain", "", "http://www.chrome.com"))); - Assert.assertEquals(Arrays.asList(Uri.parse("http://www.google.com"), - Uri.parse("http://www.chrome.com")), - intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); - - intent = ShareUtils.createIntent(Collections.singletonList( - createItem("http://www.google.com", "text/plain", "", null))); + createItem(JUnitTestGURLs.URL_1, "text/plain", "", null))); Assert.assertFalse(intent.hasExtra(Intent.EXTRA_STREAM)); Assert.assertNull(intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); intent = ShareUtils.createIntent( - Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.chrome.com", "text/plain", "", null))); + Collections.singletonList(createItem("", "text/plain", "", JUnitTestGURLs.URL_1))); + Assert.assertEquals( + Uri.parse(JUnitTestGURLs.URL_1), intent.getParcelableExtra(Intent.EXTRA_STREAM)); + + intent = ShareUtils.createIntent(Collections.singletonList( + createItem(JUnitTestGURLs.URL_1, "text/plain", "", JUnitTestGURLs.URL_1))); + Assert.assertEquals( + Uri.parse(JUnitTestGURLs.URL_1), intent.getParcelableExtra(Intent.EXTRA_STREAM)); + + intent = ShareUtils.createIntent( + Arrays.asList(createItem("", "text/plain", "", JUnitTestGURLs.URL_1), + createItem(JUnitTestGURLs.URL_2, "text/plain", "", ""))); + Assert.assertEquals( + Uri.parse(JUnitTestGURLs.URL_1), intent.getParcelableExtra(Intent.EXTRA_STREAM)); + + intent = ShareUtils.createIntent( + Arrays.asList(createItem("", "text/plain", "", JUnitTestGURLs.URL_1), + createItem(JUnitTestGURLs.URL_2, "text/plain", "", JUnitTestGURLs.URL_2))); + Assert.assertEquals( + Arrays.asList(Uri.parse(JUnitTestGURLs.URL_1), Uri.parse(JUnitTestGURLs.URL_2)), + intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); + + intent = ShareUtils.createIntent( + Arrays.asList(createItem("", "text/plain", "", JUnitTestGURLs.URL_1), + createItem("", "text/plain", "", JUnitTestGURLs.URL_2))); + Assert.assertEquals( + Arrays.asList(Uri.parse(JUnitTestGURLs.URL_1), Uri.parse(JUnitTestGURLs.URL_2)), + intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); + + intent = ShareUtils.createIntent(Collections.singletonList( + createItem(JUnitTestGURLs.URL_1, "text/plain", "", null))); + Assert.assertFalse(intent.hasExtra(Intent.EXTRA_STREAM)); + Assert.assertNull(intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); + + intent = ShareUtils.createIntent( + Arrays.asList(createItem(JUnitTestGURLs.URL_1, "text/plain", "", null), + createItem(JUnitTestGURLs.URL_2, "text/plain", "", null))); Assert.assertFalse(intent.hasExtra(Intent.EXTRA_STREAM)); Assert.assertNull(intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); } @@ -148,26 +149,32 @@ @Test public void testType() { Intent intent = ShareUtils.createIntent(Collections.singletonList( - createItem("http://www.google.com", "text/plain", "", null))); + createItem(JUnitTestGURLs.URL_1, "text/plain", "", null))); Assert.assertEquals(Intent.normalizeMimeType("text/plain"), intent.getType()); intent = ShareUtils.createIntent( - Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.google.com", "text/html", "", null), - createItem("http://www.google.com", "text/html", "", null))); + Arrays.asList(createItem(JUnitTestGURLs.URL_1, "text/plain", "", null), + createItem(JUnitTestGURLs.URL_1, "text/plain", "", null), + createItem(JUnitTestGURLs.URL_1, "text/html", "", null), + createItem(JUnitTestGURLs.URL_1, "text/html", "", null))); Assert.assertEquals(Intent.normalizeMimeType("text/*"), intent.getType()); intent = ShareUtils.createIntent( - Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.google.com", "application/octet-stream", "", null))); + Arrays.asList(createItem(JUnitTestGURLs.URL_1, "text/plain", "", null), + createItem(JUnitTestGURLs.URL_1, "application/octet-stream", "", null))); Assert.assertEquals(Intent.normalizeMimeType("*/*"), intent.getType()); } private static Pair<OfflineItem, OfflineItemShareInfo> createItem( String url, String mimeType, String title, String uri) { OfflineItem item = new OfflineItem(); - item.url = url; + if (url == null) { + item.url = null; + } else if (url.isEmpty()) { + item.url = GURL.emptyGURL(); + } else { + item.url = JUnitTestGURLs.getGURL(url); + } item.mimeType = mimeType; item.title = title;
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/GroupCardLabelAdder.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/GroupCardLabelAdder.java index c8d89d8..0fbfcae 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/GroupCardLabelAdder.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/GroupCardLabelAdder.java
@@ -102,7 +102,7 @@ } Pair<Date, String> dateAndDomain = getDateAndDomainForItem(candidateCardItems.get(0)); - String url = ((ListItem.OfflineItemListItem) candidateCardItems.get(0)).item.url; + String url = ((ListItem.OfflineItemListItem) candidateCardItems.get(0)).item.url.getSpec(); mCardPaginator.initializeEntry(dateAndDomain); // Add the card header, and the divider above it.
diff --git a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc index a09a1c3..e1e151f5 100644 --- a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc +++ b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc
@@ -23,8 +23,6 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" #include "chrome/browser/google/google_brand.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/sync/sync_service_factory.h" @@ -76,7 +74,6 @@ constexpr char kSyncDataKey[] = "about_sync_data"; constexpr char kExtensionsListKey[] = "extensions"; constexpr char kPowerApiListKey[] = "chrome.power extensions"; -constexpr char kDataReductionProxyKey[] = "data_reduction_proxy"; constexpr char kChromeVersionTag[] = "CHROME VERSION"; #if BUILDFLAG(IS_CHROMEOS_ASH) @@ -337,7 +334,6 @@ PopulateSyncLogs(response.get()); PopulateExtensionInfoLogs(response.get()); PopulatePowerApiLogs(response.get()); - PopulateDataReductionProxyLogs(response.get()); #if BUILDFLAG(IS_WIN) PopulateUsbKeyboardDetected(response.get()); PopulateEnrolledToDomain(response.get()); @@ -453,19 +449,6 @@ response->emplace(kPowerApiListKey, info); } -void ChromeInternalLogSource::PopulateDataReductionProxyLogs( - SystemLogsResponse* response) { - data_reduction_proxy::DataReductionProxySettings* - data_reduction_proxy_settings = - DataReductionProxyChromeSettingsFactory::GetForBrowserContext( - ProfileManager::GetLastUsedProfile()); - bool data_saver_enabled = - data_reduction_proxy_settings && - data_reduction_proxy_settings->IsDataReductionProxyEnabled(); - response->emplace(kDataReductionProxyKey, - data_saver_enabled ? "enabled" : "disabled"); -} - #if BUILDFLAG(IS_CHROMEOS_ASH) void ChromeInternalLogSource::PopulateLocalStateSettings( SystemLogsResponse* response) {
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 3966822..b95773e 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -745,11 +745,6 @@ "Enable new features that affect setting, sending, and managing cookies. " "The enabled features are subject to change at any time."; -const char kEnableSaveDataName[] = "Enables save data feature"; -const char kEnableSaveDataDescription[] = - "Enables save data feature. May cause user's traffic to be proxied via " - "Google's data reduction proxy."; - const char kEnableNavigationPredictorName[] = "Enables navigation predictor"; const char kEnableNavigationPredictorDescription[] = "Enables navigation predictor feature that predicts the next likely "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index cda623f..5236ab3 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -439,9 +439,6 @@ extern const char kEnableExperimentalCookieFeaturesName[]; extern const char kEnableExperimentalCookieFeaturesDescription[]; -extern const char kEnableSaveDataName[]; -extern const char kEnableSaveDataDescription[]; - extern const char kEnableNavigationPredictorName[]; extern const char kEnableNavigationPredictorDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index c4207a8..acc3c625 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -13,7 +13,6 @@ #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" #include "chrome/browser/browser_features.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/feature_guide/notifications/feature_notification_guide_service.h" #include "chrome/browser/flags/jni_headers/ChromeFeatureList_jni.h" #include "chrome/browser/notifications/chime/android/features.h" @@ -28,6 +27,7 @@ #include "components/autofill/core/common/autofill_payments_features.h" #include "components/browser_sync/browser_sync_switches.h" #include "components/browser_ui/photo_picker/android/features.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/content_creation/notes/core/note_features.h" #include "components/content_creation/reactions/core/reactions_features.h" #include "components/content_settings/core/common/features.h"
diff --git a/chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.cc b/chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.cc index a411d2d0..4fefbe4 100644 --- a/chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.cc +++ b/chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.cc
@@ -27,8 +27,12 @@ #include "base/fuchsia/scoped_service_binding.h" #include "base/notreached.h" #include "base/numerics/clamped_math.h" +#include "chrome/browser/fuchsia/element_manager_impl.h" #include "chrome/browser/fuchsia/switches.h" #include "chrome/browser/lifetime/application_lifetime.h" +#include "chrome/common/chrome_switches.h" +#include "components/keep_alive_registry/keep_alive_types.h" +#include "components/keep_alive_registry/scoped_keep_alive.h" #include "ui/gfx/geometry/size.h" #include "ui/ozone/public/ozone_switches.h" #include "ui/platform_window/fuchsia/initialize_presenter_api_view.h" @@ -54,6 +58,14 @@ scenic_uses_flatland ? "flatland" : "scenic"); } +void HandleCFv2Argument() { + base::CommandLine* const launch_args = base::CommandLine::ForCurrentProcess(); + if (!launch_args->HasSwitch(switches::kEnableCFv2)) { + return; + } + launch_args->AppendSwitch(switches::kNoStartupWindow); +} + fuchsia::ui::views::ViewRef CloneViewRef( const fuchsia::ui::views::ViewRef& view_ref) { fuchsia::ui::views::ViewRef dup; @@ -63,6 +75,12 @@ return dup; } +bool NotifyNewBrowserWindow(const base::CommandLine& command_line) { + base::FilePath path; + return ChromeBrowserMainParts::ProcessSingletonNotificationCallback( + command_line, path); +} + // ViewProviderScenic ---------------------------------------------------------- // ViewProvider implementation that provides a single view and exposes all @@ -600,6 +618,7 @@ int ChromeBrowserMainPartsFuchsia::PreEarlyInitialization() { HandleOzonePlatformArgs(); + HandleCFv2Argument(); return ChromeBrowserMainParts::PreEarlyInitialization(); } @@ -608,6 +627,12 @@ switches::kEnableCFv2)) { // Configure Ozone to create top-level Views via GraphicalPresenter. use_graphical_presenter_ = std::make_unique<UseGraphicalPresenter>(); + element_manager_ = std::make_unique<ElementManagerImpl>( + base::ComponentContextForProcess()->outgoing().get(), + base::BindRepeating(&NotifyNewBrowserWindow)); + keep_alive_ = std::make_unique<ScopedKeepAlive>( + KeepAliveOrigin::BROWSER_PROCESS_FUCHSIA, + KeepAliveRestartOption::ENABLED); } else { // Register the ViewProvider API. view_provider_ = std::make_unique<ViewProviderRouter>(
diff --git a/chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h b/chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h index 2c7a48f2..35648059 100644 --- a/chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h +++ b/chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h
@@ -13,6 +13,9 @@ class ProcessLifecycle; } +class ScopedKeepAlive; +class ElementManagerImpl; + class ChromeBrowserMainPartsFuchsia : public ChromeBrowserMainParts { public: ChromeBrowserMainPartsFuchsia(content::MainFunctionParams parameters, @@ -37,8 +40,13 @@ std::unique_ptr<base::ProcessLifecycle> lifecycle_; - // Initialized if GraphicalPresenter is to be used to show top-level windows. + // Implementations used when running under CFv2. Under CFv2 Chrome runs in the + // background, only opening windows when requested to via the + // fuchsia.element.Manager service. The browser process must remain live until + // explicitly torn-down by the ELF runner. std::unique_ptr<UseGraphicalPresenter> use_graphical_presenter_; + std::unique_ptr<ElementManagerImpl> element_manager_; + std::unique_ptr<ScopedKeepAlive> keep_alive_; // TODO(crbug.com/1284806): Remove this once ViewProvider is deprecated. std::unique_ptr<ViewProviderRouter> view_provider_;
diff --git a/chrome/browser/fuchsia/element_manager_impl.cc b/chrome/browser/fuchsia/element_manager_impl.cc new file mode 100644 index 0000000..1869796 --- /dev/null +++ b/chrome/browser/fuchsia/element_manager_impl.cc
@@ -0,0 +1,40 @@ +// Copyright 2022 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/fuchsia/element_manager_impl.h" + +#include "base/command_line.h" +#include "base/files/file_path.h" +#include "chrome/browser/chrome_browser_main.h" + +ElementManagerImpl::ElementManagerImpl( + sys::OutgoingDirectory* outgoing_directory, + NewProposalCallback callback) + : binding_(outgoing_directory, this), callback_(std::move(callback)) { + DCHECK(callback_); +} + +ElementManagerImpl::~ElementManagerImpl() = default; + +void ElementManagerImpl::ProposeElement( + fuchsia::element::Spec spec, + fidl::InterfaceRequest<fuchsia::element::Controller> element_controller, + ProposeElementCallback callback) { + fuchsia::element::Manager_ProposeElement_Result result; + + if (spec.component_url() != + "fuchsia-pkg://fuchsia.com/chrome#meta/chrome.cm") { + result.set_err(fuchsia::element::ProposeElementError::INVALID_ARGS); + callback(std::move(result)); + return; + } + + base::CommandLine command_line(base::CommandLine::NO_PROGRAM); + if (callback_.Run(command_line)) { + result.set_response({}); + } else { + result.set_err(fuchsia::element::ProposeElementError::INVALID_ARGS); + } + callback(std::move(result)); +}
diff --git a/chrome/browser/fuchsia/element_manager_impl.h b/chrome/browser/fuchsia/element_manager_impl.h new file mode 100644 index 0000000..f1e9757 --- /dev/null +++ b/chrome/browser/fuchsia/element_manager_impl.h
@@ -0,0 +1,50 @@ +// Copyright 2022 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_FUCHSIA_ELEMENT_MANAGER_IMPL_H_ +#define CHROME_BROWSER_FUCHSIA_ELEMENT_MANAGER_IMPL_H_ + +#include <fuchsia/element/cpp/fidl.h> +#include <lib/fidl/cpp/interface_request.h> + +#include "base/callback.h" +#include "base/fuchsia/scoped_service_binding.h" + +namespace base { +class CommandLine; +} // namespace base + +namespace sys { +class OutgoingDirectory; +} // namespace sys + +class ElementManagerImpl : public fuchsia::element::Manager { + public: + // Implement this callback to handle notifications to start a new element. The + // callback will receive the command line needed to start the new window(s). + // Return true if the command line will be handled within the current browser + // instance or false if not (i.e., because the current process is shutting + // down). + using NewProposalCallback = + base::RepeatingCallback<bool(const base::CommandLine& command_line)>; + + ElementManagerImpl(sys::OutgoingDirectory* outgoing_directory, + NewProposalCallback callback); + ~ElementManagerImpl() override; + + ElementManagerImpl(const ElementManagerImpl&) = delete; + ElementManagerImpl& operator=(const ElementManagerImpl&) = delete; + + // fuchsia::element::Manager implementation + void ProposeElement( + fuchsia::element::Spec spec, + fidl::InterfaceRequest<fuchsia::element::Controller> element_controller, + ProposeElementCallback callback) override; + + private: + base::ScopedServiceBinding<fuchsia::element::Manager> binding_; + NewProposalCallback callback_; +}; + +#endif // CHROME_BROWSER_FUCHSIA_ELEMENT_MANAGER_IMPL_H_
diff --git a/chrome/browser/fuchsia/element_manager_impl_unittest.cc b/chrome/browser/fuchsia/element_manager_impl_unittest.cc new file mode 100644 index 0000000..259c96a --- /dev/null +++ b/chrome/browser/fuchsia/element_manager_impl_unittest.cc
@@ -0,0 +1,82 @@ +// Copyright 2022 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/fuchsia/element_manager_impl.h" + +#include <lib/sys/cpp/component_context.h> +#include <lib/sys/cpp/service_directory.h> + +#include "base/command_line.h" +#include "base/fuchsia/process_context.h" +#include "base/fuchsia/test_component_context_for_process.h" +#include "base/test/bind.h" +#include "base/test/task_environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +class TestElementManagerImpl : public testing::Test { + public: + TestElementManagerImpl() + : element_manager_(base::ComponentContextForProcess()->outgoing().get(), + base::BindLambdaForTesting( + [&](const base::CommandLine& command_line) { + received_command_line_ = command_line; + return true; + })) {} + + protected: + fuchsia::element::ManagerPtr GetElementManagerPtr() { + return test_context_.published_services() + ->Connect<fuchsia::element::Manager>(); + } + + base::test::SingleThreadTaskEnvironment task_environment_{ + base::test::SingleThreadTaskEnvironment::MainThreadType::IO}; + base::TestComponentContextForProcess test_context_; + std::optional<base::CommandLine> received_command_line_; + ElementManagerImpl element_manager_; +}; + +TEST_F(TestElementManagerImpl, TestCorrectSpec) { + fuchsia::element::Spec spec; + spec.set_component_url("fuchsia-pkg://fuchsia.com/chrome#meta/chrome.cm"); + + auto element_manager = GetElementManagerPtr(); + base::RunLoop run_loop; + std::optional<fuchsia::element::Manager_ProposeElement_Result> + received_result; + element_manager->ProposeElement( + std::move(spec), {}, + [&](fuchsia::element::Manager_ProposeElement_Result result) { + received_result = std::move(result); + run_loop.Quit(); + }); + run_loop.Run(); + ASSERT_TRUE(received_result); + EXPECT_FALSE(received_result->is_err()); + EXPECT_TRUE(received_command_line_); +} + +TEST_F(TestElementManagerImpl, TestIncorrectSpec) { + fuchsia::element::Spec spec; + spec.set_component_url("foobar"); + + auto element_manager = GetElementManagerPtr(); + base::RunLoop run_loop; + std::optional<fuchsia::element::Manager_ProposeElement_Result> + received_result; + element_manager->ProposeElement( + std::move(spec), {}, + [&](fuchsia::element::Manager_ProposeElement_Result result) { + received_result = std::move(result); + run_loop.Quit(); + }); + run_loop.Run(); + ASSERT_TRUE(received_result); + EXPECT_TRUE(received_result->is_err()); + EXPECT_FALSE(received_command_line_); +} + +} // namespace
diff --git a/chrome/browser/nearby_sharing/nearby_notification_manager.cc b/chrome/browser/nearby_sharing/nearby_notification_manager.cc index e8d91844..ae38945 100644 --- a/chrome/browser/nearby_sharing/nearby_notification_manager.cc +++ b/chrome/browser/nearby_sharing/nearby_notification_manager.cc
@@ -46,11 +46,24 @@ namespace { -constexpr char kNearbyNotificationId[] = "chrome://nearby"; +constexpr char kNearbyInProgressNotificationId[] = + "chrome://nearby_share/in_progress"; +constexpr char kNearbyTransferResultNotificationIdPrefix[] = + "chrome://nearby_share/result/"; constexpr char kNearbyDeviceTryingToShareNotificationId[] = - "chrome://nearby/nearby_device_trying_to_share"; + "chrome://nearby_share/nearby_device_trying_to_share"; constexpr char kNearbyNotifier[] = "nearby"; +std::string CreateNotificationIdForShareTarget( + const ShareTarget& share_target) { + if (base::FeatureList::IsEnabled(features::kNearbySharingSelfShare)) { + return std::string(kNearbyTransferResultNotificationIdPrefix) + + share_target.id.ToString(); + } else { + return std::string(kNearbyInProgressNotificationId); + } +} + // Creates a default Nearby Share notification with empty content. message_center::Notification CreateNearbyNotification(const std::string& id) { message_center::Notification notification( @@ -476,11 +489,11 @@ break; } - manager_->CloseSuccessNotification(); + manager_->CloseSuccessNotification(notification_id); } void OnClose(const std::string& notification_id) override { - manager_->CloseSuccessNotification(); + manager_->CloseSuccessNotification(notification_id); } private: @@ -748,6 +761,7 @@ void NearbyNotificationManager::OnNearbyProcessStopped() { if (share_target_ && last_transfer_status_) { + CloseTransfer(); ShowFailure( *share_target_, TransferMetadataBuilder().set_status(*last_transfer_status_).build()); @@ -774,7 +788,7 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); message_center::Notification notification = - CreateNearbyNotification(kNearbyNotificationId); + CreateNearbyNotification(kNearbyInProgressNotificationId); notification.set_type(message_center::NOTIFICATION_TYPE_PROGRESS); notification.set_title(GetProgressNotificationTitle(share_target)); notification.set_never_timeout(true); @@ -807,7 +821,7 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); message_center::Notification notification = - CreateNearbyNotification(kNearbyNotificationId); + CreateNearbyNotification(kNearbyInProgressNotificationId); notification.set_title(l10n_util::GetStringUTF16( IDS_NEARBY_NOTIFICATION_CONNECTION_REQUEST_TITLE)); notification.set_message( @@ -881,11 +895,13 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (!share_target.is_incoming) { + std::string notification_id = + CreateNotificationIdForShareTarget(share_target); message_center::Notification notification = - CreateNearbyNotification(kNearbyNotificationId); + CreateNearbyNotification(notification_id); notification.set_title(GetSuccessNotificationTitle(share_target)); - delegate_map_.erase(kNearbyNotificationId); + delegate_map_.erase(notification_id); notification_display_service_->Display( NotificationHandler::Type::NEARBY_SHARE, notification, @@ -914,8 +930,10 @@ const ShareTarget& share_target, ReceivedContentType type, const SkBitmap& image) { + std::string notification_id = + CreateNotificationIdForShareTarget(share_target); message_center::Notification notification = - CreateNearbyNotification(kNearbyNotificationId); + CreateNearbyNotification(notification_id); notification.set_title(GetSuccessNotificationTitle(share_target)); // Revert to generic file handling if image decoding failed. @@ -950,7 +968,7 @@ } notification.set_buttons(notification_actions); - delegate_map_[kNearbyNotificationId] = + delegate_map_[notification_id] = std::make_unique<SuccessNotificationDelegate>( this, profile_, share_target, type, image, std::move(success_action_test_callback_)); @@ -974,8 +992,10 @@ const TransferMetadata& transfer_metadata) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + std::string notification_id = + CreateNotificationIdForShareTarget(share_target); message_center::Notification notification = - CreateNearbyNotification(kNearbyNotificationId); + CreateNearbyNotification(notification_id); notification.set_title(GetFailureNotificationTitle(share_target)); absl::optional<std::u16string> message = @@ -984,7 +1004,7 @@ notification.set_message(*message); } - delegate_map_.erase(kNearbyNotificationId); + delegate_map_.erase(notification_id); notification_display_service_->Display( NotificationHandler::Type::NEARBY_SHARE, notification, @@ -994,14 +1014,16 @@ void NearbyNotificationManager::ShowCancelled(const ShareTarget& share_target) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + std::string notification_id = + CreateNotificationIdForShareTarget(share_target); message_center::Notification notification = - CreateNearbyNotification(kNearbyNotificationId); + CreateNearbyNotification(notification_id); notification.set_title(base::ReplaceStringPlaceholders( l10n_util::GetStringUTF16(IDS_NEARBY_NOTIFICATION_SENDER_CANCELLED), {base::UTF8ToUTF16(share_target.device_name)}, /*offsets=*/nullptr)); - delegate_map_.erase(kNearbyNotificationId); + delegate_map_.erase(notification_id); notification_display_service_->Display( NotificationHandler::Type::NEARBY_SHARE, notification, @@ -1009,9 +1031,9 @@ } void NearbyNotificationManager::CloseTransfer() { - delegate_map_.erase(kNearbyNotificationId); + delegate_map_.erase(kNearbyInProgressNotificationId); notification_display_service_->Close(NotificationHandler::Type::NEARBY_SHARE, - kNearbyNotificationId); + kNearbyInProgressNotificationId); } void NearbyNotificationManager::CloseNearbyDeviceTryingToShare() { @@ -1109,10 +1131,11 @@ } } -void NearbyNotificationManager::CloseSuccessNotification() { - delegate_map_.erase(kNearbyNotificationId); +void NearbyNotificationManager::CloseSuccessNotification( + const std::string& notification_id) { + delegate_map_.erase(notification_id); notification_display_service_->Close(NotificationHandler::Type::NEARBY_SHARE, - kNearbyNotificationId); + notification_id); } void NearbyNotificationManager::SetOnSuccessClickedForTesting(
diff --git a/chrome/browser/nearby_sharing/nearby_notification_manager.h b/chrome/browser/nearby_sharing/nearby_notification_manager.h index c0f80e4..08c962e 100644 --- a/chrome/browser/nearby_sharing/nearby_notification_manager.h +++ b/chrome/browser/nearby_sharing/nearby_notification_manager.h
@@ -143,7 +143,7 @@ // won't show another one for a certain time period after this. void OnNearbyDeviceTryingToShareDismissed(bool did_click_dismiss); - void CloseSuccessNotification(); + void CloseSuccessNotification(const std::string& notification_id); void SetOnSuccessClickedForTesting( base::OnceCallback<void(SuccessNotificationAction)> callback);
diff --git a/chrome/browser/nearby_sharing/nearby_notification_manager_unittest.cc b/chrome/browser/nearby_sharing/nearby_notification_manager_unittest.cc index 8a2d0ede..38d6e08 100644 --- a/chrome/browser/nearby_sharing/nearby_notification_manager_unittest.cc +++ b/chrome/browser/nearby_sharing/nearby_notification_manager_unittest.cc
@@ -138,14 +138,18 @@ return profile_manager; } -class NearbyNotificationManagerTest : public testing::Test { +class NearbyNotificationManagerTestBase : public testing::Test { public: - NearbyNotificationManagerTest() { - scoped_feature_list_.InitAndEnableFeature(features::kNearbySharing); + explicit NearbyNotificationManagerTestBase(bool enable_self_share) { + is_self_share_enabled_ = enable_self_share; + if (is_self_share_enabled_) { + scoped_feature_list_.InitAndEnableFeature( + features::kNearbySharingSelfShare); + } RegisterNearbySharingPrefs(pref_service_.registry()); } - ~NearbyNotificationManagerTest() override = default; + ~NearbyNotificationManagerTestBase() override = default; void SetUp() override { NearbySharingServiceFactory:: @@ -252,6 +256,15 @@ std::unique_ptr<NearbyNotificationManager> manager_; data_decoder::test::InProcessDataDecoder in_process_data_decoder_; MockSettingsOpener* settings_opener_; + bool is_self_share_enabled_ = false; +}; + +// We parameterize these tests to run them with Self Share enabled and disabled. +class NearbyNotificationManagerTest : public NearbyNotificationManagerTestBase, + public testing::WithParamInterface<bool> { + public: + NearbyNotificationManagerTest() + : NearbyNotificationManagerTestBase(/*enable_self_share=*/GetParam()) {} }; struct AttachmentsTestParamInternal { @@ -329,17 +342,30 @@ IDS_NEARBY_FILE_ATTACHMENTS_NOT_CAPITALIZED_UNKNOWN}, }; -using AttachmentsTestParam = std::tuple<AttachmentsTestParamInternal, bool>; +// Boolean parameters are |is_incoming| and |enable_self_share|. +using AttachmentsTestParam = + std::tuple<AttachmentsTestParamInternal, bool, bool>; class NearbyNotificationManagerAttachmentsTest - : public NearbyNotificationManagerTest, - public testing::WithParamInterface<AttachmentsTestParam> {}; + : public NearbyNotificationManagerTestBase, + public testing::WithParamInterface<AttachmentsTestParam> { + public: + NearbyNotificationManagerAttachmentsTest() + : NearbyNotificationManagerTestBase( + /*enable_self_share=*/std::get<2>(GetParam())) {} +}; -using ConnectionRequestTestParam = bool; +// Boolean parameters are |with_token| and |enable_self_share|. +using ConnectionRequestTestParam = std::tuple<bool, bool>; class NearbyNotificationManagerConnectionRequestTest - : public NearbyNotificationManagerTest, - public testing::WithParamInterface<ConnectionRequestTestParam> {}; + : public NearbyNotificationManagerTestBase, + public testing::WithParamInterface<ConnectionRequestTestParam> { + public: + NearbyNotificationManagerConnectionRequestTest() + : NearbyNotificationManagerTestBase( + /*enable_self_share=*/std::get<1>(GetParam())) {} +}; std::u16string FormatNotificationTitle( int resource_id, @@ -359,7 +385,7 @@ } // namespace -TEST_F(NearbyNotificationManagerTest, RegistersAsBackgroundSurfaces) { +TEST_P(NearbyNotificationManagerTest, RegistersAsBackgroundSurfaces) { manager_.reset(); TransferUpdateCallback* receive_transfer_callback = nullptr; TransferUpdateCallback* send_transfer_callback = nullptr; @@ -387,13 +413,13 @@ EXPECT_EQ(manager(), send_discovery_callback); } -TEST_F(NearbyNotificationManagerTest, UnregistersSurfaces) { +TEST_P(NearbyNotificationManagerTest, UnregistersSurfaces) { EXPECT_CALL(*nearby_service_, UnregisterReceiveSurface(manager())); EXPECT_CALL(*nearby_service_, UnregisterSendSurface(manager(), manager())); manager_.reset(); } -TEST_F(NearbyNotificationManagerTest, ShowProgress_ShowsNotification) { +TEST_P(NearbyNotificationManagerTest, ShowProgress_ShowsNotification) { ShareTarget share_target; TransferMetadata transfer_metadata = TransferMetadataBuilder().build(); @@ -423,7 +449,7 @@ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_APP_CANCEL), cancel_button.title); } -TEST_F(NearbyNotificationManagerTest, ShowProgress_ShowsProgress) { +TEST_P(NearbyNotificationManagerTest, ShowProgress_ShowsProgress) { double progress = 75.0; ShareTarget share_target; @@ -440,7 +466,7 @@ EXPECT_EQ(progress, notification.progress()); } -TEST_F(NearbyNotificationManagerTest, ShowProgress_UpdatesProgress) { +TEST_P(NearbyNotificationManagerTest, ShowProgress_UpdatesProgress) { ShareTarget share_target; TransferMetadataBuilder transfer_metadata_builder; transfer_metadata_builder.set_progress(75.0); @@ -459,7 +485,7 @@ EXPECT_EQ(progress, notification.progress()); } -TEST_F(NearbyNotificationManagerTest, ShowProgress_DeviceNameEncoding) { +TEST_P(NearbyNotificationManagerTest, ShowProgress_DeviceNameEncoding) { ShareTarget share_target; share_target.device_name = u8"\xf0\x9f\x8c\xb5"; // Cactus emoji. TransferMetadata transfer_metadata = @@ -597,11 +623,12 @@ NearbyNotificationManagerAttachmentsTest, NearbyNotificationManagerAttachmentsTest, testing::Combine(testing::ValuesIn(kAttachmentsTestParams), + testing::Bool(), testing::Bool())); TEST_P(NearbyNotificationManagerConnectionRequestTest, ShowConnectionRequest_ShowsNotification) { - bool with_token = GetParam(); + bool with_token = std::get<0>(GetParam()); std::string device_name = "device"; std::string token = "3141"; @@ -672,9 +699,9 @@ INSTANTIATE_TEST_SUITE_P(NearbyNotificationManagerConnectionRequestTest, NearbyNotificationManagerConnectionRequestTest, - testing::Bool()); + testing::Combine(testing::Bool(), testing::Bool())); -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, ShowConnectionRequest_DeviceNameEncoding) { ShareTarget share_target; share_target.device_name = u8"\xf0\x9f\x8c\xb5"; // Cactus emoji. @@ -687,7 +714,7 @@ EXPECT_TRUE(message.find(share_target.device_name) != std::string::npos); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, ShowNearbyDeviceTryingToShare_ShowsNotification) { manager()->ShowNearbyDeviceTryingToShare(); @@ -725,7 +752,7 @@ EXPECT_EQ(expected_button_titles[i], buttons[i].title); } -TEST_F( +TEST_P( NearbyNotificationManagerTest, ShowNearbyDeviceTryingToShare_AlreadyOnboarded_ShowsGoVisibleNotification) { pref_service_.SetBoolean(prefs::kNearbySharingOnboardingCompletePrefName, @@ -766,7 +793,7 @@ EXPECT_EQ(expected_button_titles[i], buttons[i].title); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, FastInitiationDeviceFound_ShowsNearbyDeviceTryingToShare) { manager()->OnFastInitiationDevicesDetected(); @@ -784,7 +811,7 @@ notification.message()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, FastInitiationDeviceLost_ClosesNearbyDeviceTryingToShare) { manager()->OnFastInitiationDevicesDetected(); EXPECT_EQ(1u, GetDisplayedNotifications().size()); @@ -793,7 +820,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, FastInitiationScanningStopped_ClosesNearbyDeviceTryingToShare) { manager()->OnFastInitiationDevicesDetected(); EXPECT_EQ(1u, GetDisplayedNotifications().size()); @@ -802,7 +829,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, ShowSuccess_ShowsNotification) { +TEST_P(NearbyNotificationManagerTest, ShowSuccess_ShowsNotification) { manager()->ShowSuccess(ShareTarget()); std::vector<message_center::Notification> notifications = @@ -823,7 +850,7 @@ EXPECT_EQ(0u, notification.buttons().size()); } -TEST_F(NearbyNotificationManagerTest, ShowSuccess_DeviceNameEncoding) { +TEST_P(NearbyNotificationManagerTest, ShowSuccess_DeviceNameEncoding) { ShareTarget share_target; share_target.device_name = u8"\xf0\x9f\x8c\xb5"; // Cactus emoji. @@ -834,7 +861,7 @@ EXPECT_TRUE(title.find(share_target.device_name) != std::string::npos); } -TEST_F(NearbyNotificationManagerTest, ShowCancelled_ShowsNotification) { +TEST_P(NearbyNotificationManagerTest, ShowCancelled_ShowsNotification) { ShareTarget share_target; manager()->ShowCancelled(share_target); std::vector<message_center::Notification> notifications = @@ -842,7 +869,7 @@ ASSERT_EQ(1u, notifications.size()); } -TEST_F(NearbyNotificationManagerTest, ShowCancelled_DeviceNameEncoding) { +TEST_P(NearbyNotificationManagerTest, ShowCancelled_DeviceNameEncoding) { ShareTarget share_target; share_target.device_name = u8"\xf0\x9f\x8c\xb5"; // Cactus emoji. @@ -854,7 +881,7 @@ EXPECT_TRUE(title.find(share_target.device_name) != std::string::npos); } -TEST_F(NearbyNotificationManagerTest, ShowFailure_ShowsNotification) { +TEST_P(NearbyNotificationManagerTest, ShowFailure_ShowsNotification) { manager()->ShowFailure(ShareTarget(), TransferMetadataBuilder().build()); std::vector<message_center::Notification> notifications = @@ -875,7 +902,7 @@ EXPECT_EQ(0u, notification.buttons().size()); } -TEST_F(NearbyNotificationManagerTest, ShowFailure_DeviceNameEncoding) { +TEST_P(NearbyNotificationManagerTest, ShowFailure_DeviceNameEncoding) { ShareTarget share_target; share_target.device_name = u8"\xf0\x9f\x8c\xb5"; // Cactus emoji. @@ -886,7 +913,7 @@ EXPECT_TRUE(title.find(share_target.device_name) != std::string::npos); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, CloseTransfer_ClosesProgressNotification) { manager()->ShowProgress(ShareTarget(), TransferMetadataBuilder().build()); ASSERT_EQ(1u, GetDisplayedNotifications().size()); @@ -895,7 +922,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, CloseTransfer_ClosesConnectionNotification) { manager()->ShowConnectionRequest(ShareTarget(), TransferMetadataBuilder().build()); @@ -905,7 +932,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, CloseProgressNotification_NoopWithoutNotification) { ASSERT_EQ(0u, GetDisplayedNotifications().size()); @@ -913,7 +940,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, CloseProgressNotification_KeepsNearbyDeviceTryingToShareNotification) { manager()->ShowNearbyDeviceTryingToShare(); @@ -921,7 +948,7 @@ EXPECT_EQ(1u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, ProgressNotification_Cancel) { +TEST_P(NearbyNotificationManagerTest, ProgressNotification_Cancel) { ShareTarget share_target; share_target.is_incoming = true; TransferMetadata transfer_metadata = @@ -951,7 +978,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, ProgressNotification_Close) { +TEST_P(NearbyNotificationManagerTest, ProgressNotification_Close) { ShareTarget share_target; share_target.is_incoming = true; TransferMetadata transfer_metadata = @@ -976,7 +1003,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, ProgressNotification_Cancelled) { +TEST_P(NearbyNotificationManagerTest, ProgressNotification_Cancelled) { ShareTarget share_target; share_target.is_incoming = true; TransferMetadata transfer_metadata = @@ -1000,7 +1027,7 @@ EXPECT_EQ(1u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, ConnectionRequest_Accept) { +TEST_P(NearbyNotificationManagerTest, ConnectionRequest_Accept) { ShareTarget share_target; share_target.is_incoming = true; TransferMetadata transfer_metadata = @@ -1030,7 +1057,7 @@ EXPECT_EQ(1u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, ConnectionRequest_Reject_Local) { +TEST_P(NearbyNotificationManagerTest, ConnectionRequest_Reject_Local) { ShareTarget share_target; share_target.is_incoming = true; TransferMetadata transfer_metadata = @@ -1060,7 +1087,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, ProgressNotification_Reject_Remote) { +TEST_P(NearbyNotificationManagerTest, ProgressNotification_Reject_Remote) { ShareTarget share_target; share_target.is_incoming = true; TransferMetadata transfer_metadata = @@ -1090,7 +1117,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, ConnectionRequest_Close) { +TEST_P(NearbyNotificationManagerTest, ConnectionRequest_Close) { ShareTarget share_target; share_target.is_incoming = true; TransferMetadata transfer_metadata = @@ -1115,7 +1142,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, NearbyDeviceTryingToShare_Click) { +TEST_P(NearbyNotificationManagerTest, NearbyDeviceTryingToShare_Click) { manager()->ShowNearbyDeviceTryingToShare(); std::vector<message_center::Notification> notifications = GetDisplayedNotifications(); @@ -1130,7 +1157,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, NearbyDeviceTryingToShare_OnClose_DismissTimeout) { // First notification should be shown by default. manager()->ShowNearbyDeviceTryingToShare(); @@ -1154,7 +1181,7 @@ EXPECT_EQ(1u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, NearbyDeviceTryingToShare_OnDismissClicked_DismissTimeout) { // First notification should be shown by default. manager()->ShowNearbyDeviceTryingToShare(); @@ -1179,7 +1206,7 @@ EXPECT_EQ(1u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, SuccessNotificationClicked_SingleImageReceived_OpenDownloads) { base::RunLoop run_loop; manager()->SetOnSuccessClickedForTesting(base::BindLambdaForTesting( @@ -1226,7 +1253,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, SuccessNotificationClicked_SingleImageReceived_CopyToClipboard) { base::RunLoop run_loop; manager()->SetOnSuccessClickedForTesting(base::BindLambdaForTesting( @@ -1277,7 +1304,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, SuccessNotificationClicked_MultipleImagesReceived) { base::RunLoop run_loop; manager()->SetOnSuccessClickedForTesting(base::BindLambdaForTesting( @@ -1315,7 +1342,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, SuccessNotificationClicked_TextReceived) { +TEST_P(NearbyNotificationManagerTest, SuccessNotificationClicked_TextReceived) { base::RunLoop run_loop; manager()->SetOnSuccessClickedForTesting(base::BindLambdaForTesting( [&](NearbyNotificationManager::SuccessNotificationAction action) { @@ -1351,7 +1378,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, SuccessNotificationClicked_UrlReceived) { +TEST_P(NearbyNotificationManagerTest, SuccessNotificationClicked_UrlReceived) { base::RunLoop run_loop; manager()->SetOnSuccessClickedForTesting(base::BindLambdaForTesting( [&](NearbyNotificationManager::SuccessNotificationAction action) { @@ -1386,7 +1413,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, SuccessNotificationClicked_SingleFileReceived) { base::RunLoop run_loop; manager()->SetOnSuccessClickedForTesting(base::BindLambdaForTesting( @@ -1422,7 +1449,7 @@ EXPECT_EQ(0u, GetDisplayedNotifications().size()); } -TEST_F(NearbyNotificationManagerTest, +TEST_P(NearbyNotificationManagerTest, SuccessNotificationClicked_MultipleFilesReceived) { base::RunLoop run_loop; manager()->SetOnSuccessClickedForTesting(base::BindLambdaForTesting( @@ -1553,3 +1580,34 @@ EXPECT_TRUE(holding_space_model->items().empty()); } + +TEST_P(NearbyNotificationManagerTest, ShowMultipleNotifications) { + if (!is_self_share_enabled_) + return; + + // Show two of each type of completion notification and ensure all are + // displayed. We also show a progress notification to ensure it doesn't + // interfere with the others. + ShareTarget share_target_a; + manager()->ShowSuccess(share_target_a); + manager()->ShowSuccess(ShareTarget()); + manager()->ShowFailure(ShareTarget(), TransferMetadataBuilder().build()); + manager()->ShowFailure(ShareTarget(), TransferMetadataBuilder().build()); + manager()->ShowCancelled(ShareTarget()); + manager()->ShowCancelled(ShareTarget()); + manager()->ShowProgress(ShareTarget(), TransferMetadataBuilder().build()); + + std::vector<message_center::Notification> notifications = + GetDisplayedNotifications(); + ASSERT_EQ(7u, notifications.size()); + + // Make sure we can close an individual one. + manager()->CloseSuccessNotification("chrome://nearby_share/result/" + + share_target_a.id.ToString()); + notifications = GetDisplayedNotifications(); + ASSERT_EQ(6u, notifications.size()); +} + +INSTANTIATE_TEST_SUITE_P(NearbyNotificationManagerTest, + NearbyNotificationManagerTest, + testing::Bool());
diff --git a/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc b/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc index 591dcaa..92b22cf 100644 --- a/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc +++ b/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc
@@ -11,7 +11,6 @@ #include "chrome/browser/optimization_guide/optimization_guide_tab_url_provider.h" #include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h" #include "chrome/test/base/testing_profile.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" #include "components/optimization_guide/content/browser/optimization_guide_decider.h" #include "components/optimization_guide/core/hints_fetcher.h" #include "components/optimization_guide/core/optimization_guide_features.h" @@ -88,8 +87,6 @@ pref_service_ = std::make_unique<sync_preferences::TestingPrefServiceSyncable>(); optimization_guide::prefs::RegisterProfilePrefs(pref_service_->registry()); - pref_service_->registry()->RegisterBooleanPref( - data_reduction_proxy::prefs::kDataSaverEnabled, false); unified_consent::UnifiedConsentService::RegisterPrefs( pref_service_->registry());
diff --git a/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc b/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc index 6398d9fa..b866e248 100644 --- a/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc +++ b/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
@@ -25,7 +25,6 @@ #include "chrome/browser/ui/browser.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" #include "components/metrics/content/subprocess_metrics_provider.h" #include "components/optimization_guide/core/optimization_guide_constants.h" #include "components/optimization_guide/core/optimization_guide_features.h"
diff --git a/chrome/browser/page_load_metrics/integration_tests/data/full_size_image.html b/chrome/browser/page_load_metrics/integration_tests/data/full_size_image.html index 71db767..6738545c 100644 --- a/chrome/browser/page_load_metrics/integration_tests/data/full_size_image.html +++ b/chrome/browser/page_load_metrics/integration_tests/data/full_size_image.html
@@ -1,14 +1,13 @@ -<iframe width="96" height="96" src="iframe_with_image.html"></iframe> <script> const lcpPromise = new Promise(resolve => { window.addEventListener("message", event => { iframeLCP = event.data.startTime; timeOriginDelta = event.data.timeOrigin - performance.timeOrigin; - lcpTime = iframeLCP + timeOriginDelta; - resolve(); + resolve(iframeLCP + timeOriginDelta); }); }); async function waitForLCP() { - await lcpPromise; + return lcpPromise; } </script> +<iframe width="96" height="96" src="iframe_with_image.html"></iframe>
diff --git a/chrome/browser/page_load_metrics/integration_tests/data/iframe_with_image.html b/chrome/browser/page_load_metrics/integration_tests/data/iframe_with_image.html index fa995b323..61a1660 100644 --- a/chrome/browser/page_load_metrics/integration_tests/data/iframe_with_image.html +++ b/chrome/browser/page_load_metrics/integration_tests/data/iframe_with_image.html
@@ -3,10 +3,14 @@ margin: 0; } </style> -<img src="images/blue96x96.png" /> +<img src="/images/blue96x96.png" /> <script> new PerformanceObserver(e => { - const entries = e.getEntries(); + // We only care about entry with url, i.e. for images, not any spurrious + // text entry. + const entries = e.getEntries().filter(e => e.url != ''); + if (entries.length === 0) + return; const entry = entries[entries.length - 1]; window.parent.postMessage({ startTime: entry.startTime, timeOrigin: performance.timeOrigin
diff --git a/chrome/browser/page_load_metrics/integration_tests/largest_contentful_paint_browsertest.cc b/chrome/browser/page_load_metrics/integration_tests/largest_contentful_paint_browsertest.cc index 3c5d458..29c7d9a 100644 --- a/chrome/browser/page_load_metrics/integration_tests/largest_contentful_paint_browsertest.cc +++ b/chrome/browser/page_load_metrics/integration_tests/largest_contentful_paint_browsertest.cc
@@ -173,12 +173,11 @@ base::test::ScopedFeatureList feature_list_; }; -IN_PROC_BROWSER_TEST_F(PageViewportInLCPTest, DISABLED_FullSizeImageInIframe) { +IN_PROC_BROWSER_TEST_F(PageViewportInLCPTest, FullSizeImageInIframe) { Start(); StartTracing({"loading"}); Load("/full_size_image.html"); - content::EvalJsResult result = EvalJs(web_contents(), "waitForLCP()"); - double lcpTime = EvalJs(web_contents(), "lcpTime").ExtractDouble(); + double lcpTime = EvalJs(web_contents(), "waitForLCP()").ExtractDouble(); // Navigate away to force metrics recording. ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank")));
diff --git a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_browsertest.cc index 3bf9cd9a..6962d6c 100644 --- a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_browsertest.cc +++ b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_browsertest.cc
@@ -12,7 +12,6 @@ #include "chrome/browser/ui/browser.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" #include "components/ukm/test_ukm_recorder.h" #include "content/public/test/browser_test.h" #include "content/public/test/prerender_test_util.h"
diff --git a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_unittest.cc index f59702a0..25109a787 100644 --- a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_unittest.cc
@@ -9,8 +9,6 @@ #include "base/command_line.h" #include "base/memory/raw_ptr.h" #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" #include "components/page_load_metrics/browser/page_load_tracker.h" #include "components/page_load_metrics/common/page_load_timing.h" #include "components/page_load_metrics/common/test/page_load_metrics_test_util.h"
diff --git a/chrome/browser/pdf/DEPS b/chrome/browser/pdf/DEPS index e7b576a..564718e 100644 --- a/chrome/browser/pdf/DEPS +++ b/chrome/browser/pdf/DEPS
@@ -1,5 +1,6 @@ specific_include_rules = { "pdf_extension_test\.cc": [ + "+cc/input/scroll_utils.h", "+chrome/browser/ui/views/location_bar/zoom_bubble_view.h", ], "pdf_find_request_manager_browsertest\.cc": [
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc index 82fe9f4..48f0825 100644 --- a/chrome/browser/pdf/pdf_extension_test.cc +++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -39,6 +39,7 @@ #include "build/branding_buildflags.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "cc/input/scroll_utils.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/download/download_prefs.h" @@ -1633,6 +1634,11 @@ // //chrome/browser/resources/pdf/viewport.js. static constexpr int kScrollIncrement = 40; + // Scrolling by a fraction of the viewport height may introduce slight + // position differences on various platforms due to rounding. Tolerate this + // difference. + static constexpr float kScrollPositionEpsilon = 2.0f; + static int GetViewportHeight(WebContents* guest_contents) { int viewport_height = 0; EXPECT_TRUE(content::ExecuteScriptAndExtractInt( @@ -1661,9 +1667,6 @@ } }; -// static -constexpr int PDFExtensionScrollTest::kScrollIncrement; - IN_PROC_BROWSER_TEST_P(PDFExtensionScrollTest, WithSpace) { WebContents* guest_contents = LoadPdfGetGuestContents( embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf")); @@ -1674,6 +1677,11 @@ const int viewport_height = GetViewportHeight(guest_contents); ASSERT_GT(viewport_height, 0); + // For web content, page down / page up scrolling only scrolls by a fraction + // of the viewport height. The PDF Viewer should match that behavior. + const float scroll_height = + viewport_height * cc::kMinFractionToStepWhenPaging; + // Press Space to scroll down. ScrollEventWaiter scroll_waiter(guest_contents); content::SimulateKeyPress(guest_contents, ui::DomKey::FromCharacter(' '), @@ -1681,7 +1689,8 @@ /*control=*/false, /*shift=*/false, /*alt=*/false, /*command=*/false); ASSERT_NO_FATAL_FAILURE(scroll_waiter.Wait()); - EXPECT_EQ(viewport_height, GetViewportScrollPositionY(guest_contents)); + EXPECT_NEAR(scroll_height, GetViewportScrollPositionY(guest_contents), + kScrollPositionEpsilon); // Press Space to scroll down again. scroll_waiter.Reset(); @@ -1690,7 +1699,8 @@ /*control=*/false, /*shift=*/false, /*alt=*/false, /*command=*/false); ASSERT_NO_FATAL_FAILURE(scroll_waiter.Wait()); - EXPECT_EQ(viewport_height * 2, GetViewportScrollPositionY(guest_contents)); + EXPECT_NEAR(scroll_height * 2, GetViewportScrollPositionY(guest_contents), + kScrollPositionEpsilon); // Press Shift+Space to scroll up. scroll_waiter.Reset(); @@ -1699,7 +1709,8 @@ /*control=*/false, /*shift=*/true, /*alt=*/false, /*command=*/false); ASSERT_NO_FATAL_FAILURE(scroll_waiter.Wait()); - EXPECT_EQ(viewport_height, GetViewportScrollPositionY(guest_contents)); + EXPECT_NEAR(scroll_height, GetViewportScrollPositionY(guest_contents), + kScrollPositionEpsilon); } IN_PROC_BROWSER_TEST_P(PDFExtensionScrollTest, WithPageDownUp) { @@ -1712,6 +1723,11 @@ const int viewport_height = GetViewportHeight(guest_contents); ASSERT_GT(viewport_height, 0); + // For web content, page down / page up scrolling only scrolls by a fraction + // of the viewport height. The PDF Viewer should match that behavior. + const float scroll_height = + viewport_height * cc::kMinFractionToStepWhenPaging; + // Press PageDown to scroll down. ScrollEventWaiter scroll_waiter(guest_contents); content::SimulateKeyPressWithoutChar(guest_contents, ui::DomKey::PAGE_DOWN, @@ -1720,7 +1736,8 @@ /*alt=*/false, /*command=*/false); ASSERT_NO_FATAL_FAILURE(scroll_waiter.Wait()); - EXPECT_EQ(viewport_height, GetViewportScrollPositionY(guest_contents)); + EXPECT_NEAR(scroll_height, GetViewportScrollPositionY(guest_contents), + kScrollPositionEpsilon); // Press PageDown to scroll down again. scroll_waiter.Reset(); @@ -1730,7 +1747,8 @@ /*alt=*/false, /*command=*/false); ASSERT_NO_FATAL_FAILURE(scroll_waiter.Wait()); - EXPECT_EQ(viewport_height * 2, GetViewportScrollPositionY(guest_contents)); + EXPECT_NEAR(scroll_height * 2, GetViewportScrollPositionY(guest_contents), + kScrollPositionEpsilon); // Press PageUp to scroll up. scroll_waiter.Reset(); @@ -1739,7 +1757,8 @@ /*control=*/false, /*shift=*/false, /*alt=*/false, /*command=*/false); ASSERT_NO_FATAL_FAILURE(scroll_waiter.Wait()); - EXPECT_EQ(viewport_height, GetViewportScrollPositionY(guest_contents)); + EXPECT_NEAR(scroll_height, GetViewportScrollPositionY(guest_contents), + kScrollPositionEpsilon); } IN_PROC_BROWSER_TEST_P(PDFExtensionScrollTest, WithArrowLeftRight) {
diff --git a/chrome/browser/policy/BUILD.gn b/chrome/browser/policy/BUILD.gn index d43563d..1b57885 100644 --- a/chrome/browser/policy/BUILD.gn +++ b/chrome/browser/policy/BUILD.gn
@@ -206,6 +206,7 @@ "test/task_manager_end_process_enabled_browsertest.cc", "test/web_rtc_event_log_collection_allowed_policy_browsertest.cc", "test/web_rtc_local_ips_allowed_urls_policy_browsertest.cc", + "test/window_placement_policy_browsertest.cc", ] deps += [
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_browsertest.cc b/chrome/browser/policy/cloud/user_policy_signin_service_browsertest.cc index d1eaa07e..cae21aa0 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service_browsertest.cc +++ b/chrome/browser/policy/cloud/user_policy_signin_service_browsertest.cc
@@ -18,7 +18,7 @@ #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/in_process_browser_test.h" #include "components/policy/core/common/policy_namespace.h" @@ -53,23 +53,23 @@ "test_refresh_token_for_enterprise@example.com"; // Dummy delegate forwarding all the calls the test fixture. -// Owned by the DiceTurnOnSyncHelper. -class TestDiceTurnSyncOnHelperDelegate : public DiceTurnSyncOnHelper::Delegate { +// Owned by the TurnSyncOnHelper. +class TestTurnSyncOnHelperDelegate : public TurnSyncOnHelper::Delegate { public: - explicit TestDiceTurnSyncOnHelperDelegate( + explicit TestTurnSyncOnHelperDelegate( UserPolicySigninServiceTest* test_fixture); - ~TestDiceTurnSyncOnHelperDelegate() override; + ~TestTurnSyncOnHelperDelegate() override; private: - // DiceTurnSyncOnHelper::Delegate: + // TurnSyncOnHelper::Delegate: void ShowLoginError(const SigninUIError& error) override; void ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + TurnSyncOnHelper::SigninChoiceCallback callback) override; void ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + TurnSyncOnHelper::SigninChoiceCallback callback) override; void ShowSyncConfirmation( base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) override; @@ -106,7 +106,7 @@ ~UserPolicySigninServiceTest() override { // Ensure that no helper leaked. - DCHECK_EQ(dice_helper_created_count_, dice_helper_deleted_count_); + DCHECK_EQ(helper_created_count_, helper_created_count_); } Profile* profile() { return browser()->profile(); } @@ -117,16 +117,16 @@ return profile()->GetProfilePolicyConnector()->policy_service(); } - DiceTurnSyncOnHelper* CreateDiceTurnOnSyncHelper() { - // DiceTurnSyncOnHelper deletes itself. At the end of the test, there is a - // check that these objects did not leak. - ++dice_helper_created_count_; - return new DiceTurnSyncOnHelper( + TurnSyncOnHelper* CreateTurnSyncOnHelper() { + // TurnSyncOnHelper deletes itself. At the end of the test, there is a check + // that these objects did not leak. + ++helper_created_count_; + return new TurnSyncOnHelper( profile(), signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER, signin_metrics::PromoAction::PROMO_ACTION_WITH_DEFAULT, signin_metrics::Reason::kReauthentication, account_info_.account_id, - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT, - std::make_unique<TestDiceTurnSyncOnHelperDelegate>(this), + TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT, + std::make_unique<TestTurnSyncOnHelperDelegate>(this), base::DoNothing()); } @@ -151,11 +151,11 @@ std::move(sync_confirmation_callback_).Run(confirmation_result); } - // DiceTurnSyncOnHelperDelegate calls: + // TurnSyncOnHelperDelegate calls: void OnShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { - std::move(callback).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); + TurnSyncOnHelper::SigninChoiceCallback callback) { + std::move(callback).Run(TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); } void OnShowSyncConfirmation( @@ -174,7 +174,7 @@ std::move(sync_confirmation_shown_closure_).Run(); } - void OnDiceTurnSyncOnHelperDeleted() { ++dice_helper_deleted_count_; } + void OnTurnSyncOnHelperDeleted() { ++helper_deleted_count_; } void set_policy_hanging(bool hanging) { policy_hanging_ = hanging; } @@ -298,55 +298,54 @@ base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> sync_confirmation_callback_; bool policy_hanging_ = false; - int dice_helper_created_count_ = 0; - int dice_helper_deleted_count_ = 0; + int helper_created_count_ = 0; + int helper_deleted_count_ = 0; }; -TestDiceTurnSyncOnHelperDelegate::TestDiceTurnSyncOnHelperDelegate( +TestTurnSyncOnHelperDelegate::TestTurnSyncOnHelperDelegate( UserPolicySigninServiceTest* test_fixture) : test_fixture_(test_fixture) {} -TestDiceTurnSyncOnHelperDelegate::~TestDiceTurnSyncOnHelperDelegate() { - test_fixture_->OnDiceTurnSyncOnHelperDeleted(); +TestTurnSyncOnHelperDelegate::~TestTurnSyncOnHelperDelegate() { + test_fixture_->OnTurnSyncOnHelperDeleted(); } -void TestDiceTurnSyncOnHelperDelegate::ShowLoginError( - const SigninUIError& error) { +void TestTurnSyncOnHelperDelegate::ShowLoginError(const SigninUIError& error) { NOTREACHED(); } -void TestDiceTurnSyncOnHelperDelegate::ShowMergeSyncDataConfirmation( +void TestTurnSyncOnHelperDelegate::ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { NOTREACHED(); } -void TestDiceTurnSyncOnHelperDelegate::ShowEnterpriseAccountConfirmation( +void TestTurnSyncOnHelperDelegate::ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { test_fixture_->OnShowEnterpriseAccountConfirmation(account_info, std::move(callback)); } -void TestDiceTurnSyncOnHelperDelegate::ShowSyncConfirmation( +void TestTurnSyncOnHelperDelegate::ShowSyncConfirmation( base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) { test_fixture_->OnShowSyncConfirmation(std::move(callback)); } -void TestDiceTurnSyncOnHelperDelegate::ShowSyncDisabledConfirmation( +void TestTurnSyncOnHelperDelegate::ShowSyncDisabledConfirmation( bool is_managed_account, base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) { test_fixture_->OnShowSyncDisabledConfirmation(std::move(callback)); } -void TestDiceTurnSyncOnHelperDelegate::ShowSyncSettings() { +void TestTurnSyncOnHelperDelegate::ShowSyncSettings() { NOTREACHED(); } -void TestDiceTurnSyncOnHelperDelegate::SwitchToProfile(Profile* new_profile) { +void TestTurnSyncOnHelperDelegate::SwitchToProfile(Profile* new_profile) { NOTREACHED(); } @@ -354,7 +353,7 @@ EXPECT_FALSE(profile()->GetPrefs()->GetBoolean(prefs::kShowHomeButton)); // Signin and show sync confirmation dialog. - CreateDiceTurnOnSyncHelper(); + CreateTurnSyncOnHelper(); WaitForSyncConfirmation(); // Policies are applied even before the user confirms. @@ -374,7 +373,7 @@ EXPECT_FALSE(profile()->GetPrefs()->GetBoolean(prefs::kShowHomeButton)); // Signin and show sync confirmation dialog. - CreateDiceTurnOnSyncHelper(); + CreateTurnSyncOnHelper(); WaitForSyncConfirmation(); // Policies are applied even before the user confirms. @@ -398,7 +397,7 @@ EXPECT_FALSE(profile()->GetPrefs()->GetBoolean(prefs::kShowHomeButton)); set_policy_hanging(true); - CreateDiceTurnOnSyncHelper(); + CreateTurnSyncOnHelper(); WaitForPolicyHanging(); // User is not signed in, policy is not applied. @@ -408,7 +407,7 @@ EXPECT_FALSE(profile()->GetPrefs()->GetBoolean(prefs::kShowHomeButton)); // Restart a new signin flow and allow it to complete. - CreateDiceTurnOnSyncHelper(); + CreateTurnSyncOnHelper(); set_policy_hanging(false); WaitForSyncConfirmation(); @@ -434,11 +433,11 @@ #endif IN_PROC_BROWSER_TEST_F(UserPolicySigninServiceTest, MAYBE_AcceptManagementDeclineSync) { - DiceTurnSyncOnHelper::SetShowSyncEnabledUiForTesting(true); + TurnSyncOnHelper::SetShowSyncEnabledUiForTesting(true); EXPECT_FALSE(profile()->GetPrefs()->GetBoolean(prefs::kShowHomeButton)); // Signin and show sync confirmation dialog. - CreateDiceTurnOnSyncHelper(); + CreateTurnSyncOnHelper(); WaitForSyncConfirmation(); // Policies are applied even before the user confirms. @@ -475,5 +474,5 @@ EXPECT_FALSE( chrome::enterprise_util::UserAcceptedAccountManagement(profile())); EXPECT_FALSE(chrome::enterprise_util::ProfileCanBeManaged(profile())); - DiceTurnSyncOnHelper::SetShowSyncEnabledUiForTesting(false); + TurnSyncOnHelper::SetShowSyncEnabledUiForTesting(false); }
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc index c7370acd..07e195f 100644 --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -65,7 +65,6 @@ #include "components/content_settings/core/browser/insecure_private_network_policy_handler.h" #include "components/content_settings/core/common/pref_names.h" #include "components/custom_handlers/pref_names.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" #include "components/embedder_support/pref_names.h" #include "components/enterprise/browser/reporting/cloud_profile_reporting_policy_handler.h" #include "components/enterprise/browser/reporting/cloud_reporting_policy_handler.h" @@ -715,9 +714,6 @@ base::Value::Type::LIST }, #if BUILDFLAG(IS_ANDROID) - { key::kDataCompressionProxyEnabled, - data_reduction_proxy::prefs::kDataSaverEnabled, - base::Value::Type::BOOLEAN }, { key::kAuthAndroidNegotiateAccountType, prefs::kAuthAndroidNegotiateAccountType, base::Value::Type::STRING }, @@ -1596,6 +1592,9 @@ { key::kForceMajorVersionToMinorPositionInUserAgent, prefs::kForceMajorVersionToMinorPositionInUserAgent, base::Value::Type::INTEGER}, + { key::kWindowPlacementAlwaysAllowed, + policy_prefs::kWindowPlacementAlwaysAllowed, + base::Value::Type::BOOLEAN }, }; // clang-format on
diff --git a/chrome/browser/policy/test/window_placement_policy_browsertest.cc b/chrome/browser/policy/test/window_placement_policy_browsertest.cc new file mode 100644 index 0000000..8d17345 --- /dev/null +++ b/chrome/browser/policy/test/window_placement_policy_browsertest.cc
@@ -0,0 +1,59 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/values.h" +#include "chrome/browser/policy/policy_test_utils.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/test/base/ui_test_utils.h" +#include "components/policy/core/common/policy_map.h" +#include "components/policy/core/common/policy_pref_names.h" +#include "components/policy/core/common/policy_types.h" +#include "components/policy/policy_constants.h" +#include "content/public/browser/web_contents.h" +#include "content/public/common/content_switches.h" +#include "content/public/test/browser_test.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" + +namespace policy { + +class PolicyTestWindowPlacement : public PolicyTest { + void SetUpInProcessBrowserTestFixture() override { + PolicyTest::SetUpInProcessBrowserTestFixture(); + PolicyMap policies; + SetPolicy(&policies, policy::key::kWindowPlacementAlwaysAllowed, + base::Value(true)); + provider_.UpdateChromePolicy(policies); + } + + void SetUpCommandLine(base::CommandLine* command_line) override { + base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( + switches::kEnableBlinkFeatures, "WindowPlacement"); + } +}; + +IN_PROC_BROWSER_TEST_F(PolicyTestWindowPlacement, CheckWindowPlacementAllowed) { + ASSERT_TRUE(embedded_test_server()->Start()); + + const GURL url(embedded_test_server()->GetURL("/empty.html")); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + auto* tab = browser()->tab_strip_model()->GetActiveWebContents(); + + constexpr char kScript[] = R"( + (async () => { + try { + const screenDetails = await self.getScreenDetails(); + return true; + } catch (e) { + console.error(e); + return false; + } + })(); + )"; + EXPECT_EQ(true, + EvalJs(tab, kScript, content::EXECUTE_SCRIPT_NO_USER_GESTURE)); +} + +} // namespace policy
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc index 02c3652..1aff78d 100644 --- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc +++ b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc
@@ -24,8 +24,6 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/history/history_test_utils.h" #include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service.h" @@ -57,8 +55,6 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "components/content_settings/core/browser/host_content_settings_map.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" #include "components/language/core/browser/pref_names.h" #include "components/no_state_prefetch/browser/no_state_prefetch_handle.h" #include "components/no_state_prefetch/browser/no_state_prefetch_manager.h" @@ -537,12 +533,6 @@ "SpeculationRulesPrefetchProxy"); } - void SetDataSaverEnabled(bool enabled) { - data_reduction_proxy::DataReductionProxySettings:: - SetDataSaverEnabledForTesting(browser()->profile()->GetPrefs(), - enabled); - } - void ResetFeatureList() { scoped_feature_list_.Reset(); } content::WebContents* GetWebContents() const { @@ -1019,8 +1009,6 @@ IN_PROC_BROWSER_TEST_F( PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(ServiceWorkerRegistrationIsNotEligible)) { - SetDataSaverEnabled(true); - // Load a page that registers a service worker. ASSERT_TRUE(ui_test_utils::NavigateToURL( browser(), @@ -1062,7 +1050,6 @@ IN_PROC_BROWSER_TEST_F(PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(DRPClientConfigPlumbing)) { - SetDataSaverEnabled(true); auto client_config = WaitForUpdatedCustomProxyConfig(); VerifyProxyConfig(std::move(client_config)); } @@ -1070,7 +1057,6 @@ IN_PROC_BROWSER_TEST_F( PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(NoAuthChallenges_FromProxy)) { - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank"))); WaitForUpdatedCustomProxyConfig(); @@ -1096,7 +1082,6 @@ IN_PROC_BROWSER_TEST_F(PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(ProxyServerBackOff)) { - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank"))); WaitForUpdatedCustomProxyConfig(); @@ -1144,7 +1129,6 @@ IN_PROC_BROWSER_TEST_F(PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(CookieOnHigherLevelDomain)) { - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank"))); WaitForUpdatedCustomProxyConfig(); @@ -1173,7 +1157,6 @@ IN_PROC_BROWSER_TEST_F(PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(CookieOnOtherPath)) { - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank"))); WaitForUpdatedCustomProxyConfig(); @@ -1202,7 +1185,6 @@ IN_PROC_BROWSER_TEST_F(PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(ExpiredCookie)) { - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank"))); WaitForUpdatedCustomProxyConfig(); @@ -1241,7 +1223,6 @@ IN_PROC_BROWSER_TEST_F( PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(CookieOnNonApplicableDomain)) { - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank"))); WaitForUpdatedCustomProxyConfig(); @@ -1279,7 +1260,6 @@ IN_PROC_BROWSER_TEST_F( PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(CookiesChangedAfterInitialCheck)) { - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank"))); WaitForUpdatedCustomProxyConfig(); @@ -1318,7 +1298,6 @@ IN_PROC_BROWSER_TEST_F( PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(NoAuthChallenges_FromOrigin)) { - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank"))); WaitForUpdatedCustomProxyConfig(); @@ -1360,7 +1339,6 @@ // back/forward cache to ensure that it doesn't get preserved in the cache. content::DisableBackForwardCacheForTesting( GetWebContents(), content::BackForwardCache::TEST_REQUIRES_NO_CACHING); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GetOriginServerURL("/simple.html"))); WaitForUpdatedCustomProxyConfig(); @@ -1405,7 +1383,6 @@ "isolated-prerender-unlimited-prefetches"); GURL starting_page = GetOriginServerURL("/simple.html"); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -1608,7 +1585,6 @@ "isolated-prerender-unlimited-prefetches"); GURL starting_page = GetOriginServerURL("/simple.html"); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -1685,7 +1661,6 @@ "isolated-prerender-unlimited-prefetches"); GURL starting_page = GetOriginServerURL("/simple.html"); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -1748,7 +1723,6 @@ "isolated-prerender-unlimited-prefetches"); GURL starting_page = GetOriginServerURL("/simple.html"); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -1823,7 +1797,6 @@ "isolated-prerender-unlimited-prefetches"); GURL starting_page = GetOriginServerURL("/simple.html"); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -1899,7 +1872,6 @@ "isolated-prerender-unlimited-prefetches"); GURL starting_page = GetOriginServerURL("/simple.html"); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -1960,7 +1932,6 @@ PrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(PrefetchingUKM_PrefetchNotStarted)) { GURL starting_page = GetOriginServerURL("/simple.html"); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -2042,7 +2013,6 @@ content::DisableBackForwardCacheForTesting( GetWebContents(), content::BackForwardCache::TEST_REQUIRES_NO_CACHING); GURL starting_page = GetOriginServerURL("/simple.html"); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -2120,7 +2090,6 @@ ->set_client_cert_store_factory_for_testing( base::BindRepeating(&CreateCertStore)); - SetDataSaverEnabled(true); WaitForUpdatedCustomProxyConfig(); // Setup a test server that requires a client cert. @@ -2188,8 +2157,6 @@ IN_PROC_BROWSER_TEST_F(PrefetchProxyWithDecoyRequestsBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(ServiceWorker)) { - SetDataSaverEnabled(true); - GURL starting_page = GetOriginServerURL("/service_worker/create_service_worker.html"); @@ -2282,7 +2249,6 @@ DISABLE_ON_WIN_MAC_CHROMEOS(Cookie)) { GURL starting_page = GetOriginServerURL("/simple.html"); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -2460,7 +2426,6 @@ IN_PROC_BROWSER_TEST_F( SSLReportingPrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(NoIntersitialSSLErrorReporting)) { - SetDataSaverEnabled(true); WaitForUpdatedCustomProxyConfig(); // Setup a test server that requires a client cert. @@ -2541,7 +2506,6 @@ IN_PROC_BROWSER_TEST_F( DomainReliabilityPrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(NoDomainReliabilityUploads)) { - SetDataSaverEnabled(true); WaitForUpdatedCustomProxyConfig(); net::EmbeddedTestServer https_report_server( @@ -2647,7 +2611,6 @@ probing_server.SetConnectionListener(&probe_counter); ASSERT_TRUE(probing_server.Start()); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -2952,7 +2915,6 @@ GetWebContents(), content::BackForwardCache::TEST_REQUIRES_NO_CACHING); base::HistogramTester histogram_tester; - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -3138,7 +3100,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( "isolated-prerender-start-spare-renderer"); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -3282,7 +3243,6 @@ content::SetCookie(browser()->profile(), non_eligible_origin.GetURL("b.test", "/"), "cookie=yes"); - SetDataSaverEnabled(true); WaitForUpdatedCustomProxyConfig(); PrefetchProxyTabHelper* tab_helper = @@ -3340,7 +3300,6 @@ &HandleOriginWithIneligibleSubresources, &non_eligible_origin)); ASSERT_TRUE(eligible_origin.Start()); - SetDataSaverEnabled(true); WaitForUpdatedCustomProxyConfig(); PrefetchProxyTabHelper* tab_helper = @@ -3388,7 +3347,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kEnableLowEndDeviceMode); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -3432,7 +3390,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( "isolated-prerender-unlimited-prefetches"); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -3494,7 +3451,6 @@ IN_PROC_BROWSER_TEST_F(PrefetchProxyWithNSPBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(NoLinkRelSearch)) { - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -3543,7 +3499,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( kIsolatedPrerenderLimitNSPSubresourcesCmdLineFlag, "1"); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -3617,7 +3572,6 @@ IN_PROC_BROWSER_TEST_F(ProbingAndNSPEnabledPrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(ProbeGood_NSPSuccess)) { - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -3721,7 +3675,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kEnableLowEndDeviceMode); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -3765,7 +3718,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( "isolated-prerender-unlimited-prefetches"); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -3831,7 +3783,6 @@ // back/forward cache to ensure that it doesn't get preserved in the cache. content::DisableBackForwardCacheForTesting( GetWebContents(), content::BackForwardCache::TEST_REQUIRES_NO_CACHING); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -3961,7 +3912,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kEnableLowEndDeviceMode); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -4012,7 +3962,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( "isolated-prerender-unlimited-prefetches"); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -4107,7 +4056,6 @@ GetWebContents(), content::BackForwardCache::TEST_REQUIRES_NO_CACHING); base::HistogramTester histogram_tester; - SetDataSaverEnabled(true); WaitForUpdatedCustomProxyConfig(); ui_test_utils::WaitForHistoryToLoad(HistoryServiceFactory::GetForProfile( @@ -4285,7 +4233,6 @@ IN_PROC_BROWSER_TEST_F(SpeculationPrefetchProxyTest, DISABLE_ON_WIN_MAC_CHROMEOS(ConnectProxyEndtoEnd)) { - SetDataSaverEnabled(true); WaitForUpdatedCustomProxyConfig(); PrefetchProxyTabHelper* tab_helper = @@ -4326,7 +4273,6 @@ IN_PROC_BROWSER_TEST_F(SpeculationPrefetchProxyTest, DISABLE_ON_WIN_MAC_CHROMEOS(TwoSpeculations)) { - SetDataSaverEnabled(true); WaitForUpdatedCustomProxyConfig(); PrefetchProxyTabHelper* tab_helper = @@ -4406,7 +4352,6 @@ IN_PROC_BROWSER_TEST_F(PrefetchProxyPrerenderBrowserTest, ShouldNotAffectPrefetchProxyTabHelperOnPrerendering) { - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL("about:blank"))); WaitForUpdatedCustomProxyConfig(); @@ -4470,7 +4415,6 @@ IN_PROC_BROWSER_TEST_F( ZeroCacheTimePrefetchProxyBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(PrefetchAfterCacheExpiration)) { - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/simple.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -4542,7 +4486,6 @@ content::DisableBackForwardCacheForTesting( GetWebContents(), content::BackForwardCache::TEST_REQUIRES_NO_CACHING); GURL starting_page = GetOriginServerURL("/simple.html"); - SetDataSaverEnabled(true); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); WaitForUpdatedCustomProxyConfig(); @@ -4644,7 +4587,6 @@ // back/forward cache to ensure that it doesn't get preserved in the cache. content::DisableBackForwardCacheForTesting( GetWebContents(), content::BackForwardCache::TEST_REQUIRES_NO_CACHING); - SetDataSaverEnabled(true); GURL starting_page = GetReferringPageServerURL("/search/q=blah"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); @@ -4700,7 +4642,6 @@ // back/forward cache to ensure that it doesn't get preserved in the cache. content::DisableBackForwardCacheForTesting( GetWebContents(), content::BackForwardCache::TEST_REQUIRES_NO_CACHING); - SetDataSaverEnabled(true); GURL starting_page = GetReferringPageServerURL("/search/q=blah"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page)); @@ -4764,7 +4705,6 @@ // back/forward cache to ensure that it doesn't get preserved in the cache. content::DisableBackForwardCacheForTesting( GetWebContents(), content::BackForwardCache::TEST_REQUIRES_NO_CACHING); - SetDataSaverEnabled(true); GURL starting_page = GetOriginServerURL("/search/q=blah"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), starting_page));
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 6b4119a..1955cf3 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -96,7 +96,6 @@ #include "components/certificate_transparency/pref_names.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/custom_handlers/protocol_handler_registry.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.h" #include "components/dom_distiller/core/distilled_page_prefs.h" #include "components/dom_distiller/core/dom_distiller_features.h" #include "components/dom_distiller/core/pref_names.h" @@ -361,7 +360,7 @@ #include "chrome/browser/ash/system/input_device_settings.h" #include "chrome/browser/ash/web_applications/help_app/help_app_notification_controller.h" #include "chrome/browser/chromeos/extensions/echo_private_api.h" -#include "chrome/browser/chromeos/extensions/login_screen/login/login_api.h" +#include "chrome/browser/chromeos/extensions/login_screen/login/prefs.h" #include "chrome/browser/chromeos/printing/cups_printers_manager.h" #include "chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.h" #include "chrome/browser/extensions/extension_assets_manager_chromeos.h" @@ -718,6 +717,11 @@ "data_reduction.this_week_user_traffic_contenttype_downstream_kb"; const char kLastWeekUserTrafficContentTypeDownstreamKB[] = "data_reduction.last_week_user_traffic_contenttype_downstream_kb"; +const char kDataSaverEnabled[] = "spdy_proxy.enabled"; +const char kDataReductionProxyWasEnabledBefore[] = + "spdy_proxy.was_enabled_before"; +const char kDataReductionProxyLastEnabledTime[] = + "data_reduction.last_enabled_time"; // Register local state used only for migration (clearing or moving to a new // key). @@ -942,6 +946,9 @@ PrefRegistry::LOSSY_PREF); registry->RegisterDictionaryPref(kLastWeekUserTrafficContentTypeDownstreamKB, PrefRegistry::LOSSY_PREF); + registry->RegisterBooleanPref(kDataSaverEnabled, false); + registry->RegisterBooleanPref(kDataReductionProxyWasEnabledBefore, false); + registry->RegisterInt64Pref(kDataReductionProxyLastEnabledTime, 0L); } } // namespace @@ -951,7 +958,6 @@ // prefs en masse. See RegisterProfilePrefs for per-profile prefs. Please // keep this list alphabetized. browser_shutdown::RegisterPrefs(registry); - data_reduction_proxy::RegisterPrefs(registry); BrowserProcessImpl::RegisterPrefs(registry); ChromeContentBrowserClient::RegisterLocalStatePrefs(registry); #if !BUILDFLAG(IS_CHROMEOS_ASH) @@ -1837,6 +1843,9 @@ profile_prefs->ClearPref(kLastWeekServicesDownstreamForegroundKB); profile_prefs->ClearPref(kThisWeekUserTrafficContentTypeDownstreamKB); profile_prefs->ClearPref(kLastWeekUserTrafficContentTypeDownstreamKB); + profile_prefs->ClearPref(kDataSaverEnabled); + profile_prefs->ClearPref(kDataReductionProxyWasEnabledBefore); + profile_prefs->ClearPref(kDataReductionProxyLastEnabledTime); // Added 01/2022. invalidation::InvalidatorRegistrarWithMemory::
diff --git a/chrome/browser/prefs/chrome_command_line_pref_store.cc b/chrome/browser/prefs/chrome_command_line_pref_store.cc index d82f30cc..983c79e5 100644 --- a/chrome/browser/prefs/chrome_command_line_pref_store.cc +++ b/chrome/browser/prefs/chrome_command_line_pref_store.cc
@@ -26,8 +26,6 @@ #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "components/browser_sync/browser_sync_switches.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" #include "components/language/core/browser/pref_names.h" #include "components/proxy_config/proxy_config_dictionary.h" #include "components/proxy_config/proxy_config_pref_names.h"
diff --git a/chrome/browser/privacy_sandbox/android/BUILD.gn b/chrome/browser/privacy_sandbox/android/BUILD.gn index d617e79..1e28e548 100644 --- a/chrome/browser/privacy_sandbox/android/BUILD.gn +++ b/chrome/browser/privacy_sandbox/android/BUILD.gn
@@ -36,6 +36,7 @@ "//third_party/androidx:androidx_core_core_java", "//third_party/androidx:androidx_fragment_fragment_java", "//third_party/androidx:androidx_preference_preference_java", + "//third_party/androidx:androidx_recyclerview_recyclerview_java", "//third_party/androidx:androidx_vectordrawable_vectordrawable_java", "//ui/android:ui_full_java", ]
diff --git a/chrome/browser/privacy_sandbox/android/java/res/xml/ad_personalization_preference.xml b/chrome/browser/privacy_sandbox/android/java/res/xml/ad_personalization_preference.xml index 2fd7549..9a7bf0c 100644 --- a/chrome/browser/privacy_sandbox/android/java/res/xml/ad_personalization_preference.xml +++ b/chrome/browser/privacy_sandbox/android/java/res/xml/ad_personalization_preference.xml
@@ -16,6 +16,11 @@ android:title="@string/privacy_sandbox_topic_interests_category" /> <Preference + android:key="empty_topics" + android:summary="@string/privacy_sandbox_topic_empty_state" /> + + <Preference + android:key="removed_topics" android:title="@string/privacy_sandbox_remove_interest_title" android:fragment="org.chromium.chrome.browser.privacy_sandbox.AdPersonalizationRemovedFragment"/>
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdPersonalizationFragment.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdPersonalizationFragment.java index 566a21f..fbb9a8c 100644 --- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdPersonalizationFragment.java +++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdPersonalizationFragment.java
@@ -5,8 +5,12 @@ package org.chromium.chrome.browser.privacy_sandbox; import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceFragmentCompat; @@ -22,8 +26,12 @@ public class AdPersonalizationFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceClickListener { private static final String TOPICS_CATEGORY_PREFERENCE = "topic_interests"; + private static final String EMPTY_TOPICS_PREFERENCE = "empty_topics"; + private static final String REMOVE_TOPICS_PREFERENCE = "removed_topics"; private PreferenceCategory mTopicsCategory; + private Preference mEmptyTopicsPreference; + private Preference mRemoveTopicsPreference; /** * Initializes all the objects related to the preferences page. @@ -35,8 +43,32 @@ SettingsUtils.addPreferencesFromResource(this, R.xml.ad_personalization_preference); mTopicsCategory = findPreference(TOPICS_CATEGORY_PREFERENCE); assert mTopicsCategory != null; + mEmptyTopicsPreference = findPreference(EMPTY_TOPICS_PREFERENCE); + assert mEmptyTopicsPreference != null; + mRemoveTopicsPreference = findPreference(REMOVE_TOPICS_PREFERENCE); + assert mRemoveTopicsPreference != null; + } - for (String interest : getCurrentTopics()) { + @Override + public void onResume() { + updatePreferences(); + super.onResume(); + } + + @NonNull + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = super.onCreateView(inflater, container, savedInstanceState); + getListView().setItemAnimator(null); + return view; + } + + private void updatePreferences() { + List<String> currentTopics = PrivacySandboxBridge.getCurrentTopTopics(); + List<String> blockedTopics = PrivacySandboxBridge.getBlockedTopics(); + mTopicsCategory.removeAll(); + for (String interest : currentTopics) { ImageButtonPreference interestPreference = new ImageButtonPreference(getContext()); interestPreference.setTitle(interest); interestPreference.setImage(R.drawable.btn_close, @@ -45,10 +77,9 @@ interestPreference.setOnPreferenceClickListener(this); mTopicsCategory.addPreference(interestPreference); } - } - - private List<String> getCurrentTopics() { - return PrivacySandboxBridge.getCurrentTopTopics(); + boolean hasAnyTopics = !currentTopics.isEmpty() || !blockedTopics.isEmpty(); + mRemoveTopicsPreference.setVisible(hasAnyTopics); + mEmptyTopicsPreference.setVisible(!hasAnyTopics); } private void blockTopic(String topic) {
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdPersonalizationRemovedFragment.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdPersonalizationRemovedFragment.java index df17833..79f45d0 100644 --- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdPersonalizationRemovedFragment.java +++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/AdPersonalizationRemovedFragment.java
@@ -5,8 +5,12 @@ package org.chromium.chrome.browser.privacy_sandbox; import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceFragmentCompat; @@ -47,6 +51,15 @@ } } + @NonNull + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = super.onCreateView(inflater, container, savedInstanceState); + getListView().setItemAnimator(null); + return view; + } + private List<String> getBlockedTopics() { return PrivacySandboxBridge.getBlockedTopics(); }
diff --git a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragmentV3Test.java b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragmentV3Test.java index acf490e..221c80d 100644 --- a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragmentV3Test.java +++ b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragmentV3Test.java
@@ -6,7 +6,10 @@ import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist; +import static androidx.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.matcher.ViewMatchers.hasSibling; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.withChild; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withParent; @@ -96,6 +99,12 @@ return view[0]; } + private void clickImageButtonNextToText(String text) { + // Click on the image_button of the preference with |text|. + onView(allOf(withId(R.id.image_button), withParent(hasSibling(withChild(withText(text)))))) + .perform(click()); + } + @Test @SmallTest @Feature({"RenderTest"}) @@ -119,7 +128,6 @@ @Test @SmallTest @Feature({"RenderTest"}) - @Features.EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_SETTINGS_3) public void testRenderRemovedInterestsView() throws IOException { openPrivacySandboxSettings(); onView(withText(R.string.privacy_sandbox_ad_personalization_title)).perform(click()); @@ -130,7 +138,6 @@ @Test @SmallTest - @Features.EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_SETTINGS_3) public void testMainSettingsView() throws IOException { openPrivacySandboxSettings(); assertTrue(PrivacySandboxBridge.isPrivacySandboxEnabled()); @@ -143,28 +150,36 @@ @Test @SmallTest - @Features.EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_SETTINGS_3) public void testAdPersonalizationView() throws IOException { openPrivacySandboxSettings(); onView(withText(R.string.privacy_sandbox_ad_personalization_title)).perform(click()); - // Click on the image_button of a the preference with "Foo" text. - onView(allOf(withId(R.id.image_button), withParent(hasSibling(withChild(withText("Foo")))))) - .perform(click()); + onView(withText(R.string.privacy_sandbox_remove_interest_title)) + .check(matches(isDisplayed())); + onView(withText(R.string.privacy_sandbox_topic_empty_state)).check(doesNotExist()); + clickImageButtonNextToText("Foo"); assertThat(PrivacySandboxBridge.getCurrentTopTopics(), not(hasItem("Foo"))); assertThat(PrivacySandboxBridge.getBlockedTopics(), hasItem("Foo")); } @Test @SmallTest - @Features.EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_SETTINGS_3) + public void testAdPersonalizationEmptyView() throws IOException { + // Set no current or blocked topics. + mFakePrivacySandboxBridge.setCurrentTopTopics(); + mFakePrivacySandboxBridge.setBlockedTopics(); + openPrivacySandboxSettings(); + onView(withText(R.string.privacy_sandbox_ad_personalization_title)).perform(click()); + onView(withText(R.string.privacy_sandbox_remove_interest_title)).check(doesNotExist()); + onView(withText(R.string.privacy_sandbox_topic_empty_state)).check(matches(isDisplayed())); + } + + @Test + @SmallTest public void testRemovedInterestsView() throws IOException { openPrivacySandboxSettings(); onView(withText(R.string.privacy_sandbox_ad_personalization_title)).perform(click()); onView(withText(R.string.privacy_sandbox_remove_interest_title)).perform(click()); - // Click on the image_button of a the preference with "BlockedFoo" text. - onView(allOf(withId(R.id.image_button), - withParent(hasSibling(withChild(withText("BlockedFoo")))))) - .perform(click()); + clickImageButtonNextToText("BlockedFoo"); assertThat(PrivacySandboxBridge.getCurrentTopTopics(), hasItem("BlockedFoo")); assertThat(PrivacySandboxBridge.getBlockedTopics(), not(hasItem("BlockedFoo"))); }
diff --git a/chrome/browser/privacy_sandbox/android/privacy_sandbox_bridge.cc b/chrome/browser/privacy_sandbox/android/privacy_sandbox_bridge.cc index b08cd2d..7d6cff2 100644 --- a/chrome/browser/privacy_sandbox/android/privacy_sandbox_bridge.cc +++ b/chrome/browser/privacy_sandbox/android/privacy_sandbox_bridge.cc
@@ -4,6 +4,7 @@ #include "base/android/jni_array.h" #include "base/android/jni_string.h" +#include "base/no_destructor.h" #include "base/time/time.h" #include "chrome/browser/privacy_sandbox/android/jni_headers/PrivacySandboxBridge_jni.h" #include "chrome/browser/privacy_sandbox/privacy_sandbox_service.h" @@ -15,6 +16,20 @@ using base::android::ConvertUTF16ToJavaString; using base::android::ScopedJavaLocalRef; +namespace { +// TODO(crbug.com/1286276): Remove this fake implementation and call +// PrivacySandboxService. +std::set<std::string>* GetCurrentTopics() { + static base::NoDestructor<std::set<std::string>> current_topics( + {"Generated sample data", "More made up data"}); + return current_topics.get(); +} +std::set<std::string>* GetBlockedTopics() { + static base::NoDestructor<std::set<std::string>> blocked_topics({}); + return blocked_topics.get(); +} +} // namespace + static jboolean JNI_PrivacySandboxBridge_IsPrivacySandboxEnabled(JNIEnv* env) { return PrivacySandboxServiceFactory::GetForProfile( ProfileManager::GetActiveUserProfile()) @@ -100,23 +115,32 @@ ->GetFlocResetExplanationForDisplay()); } +// TODO(crbug.com/1286276): Remove this fake implementation and call +// PrivacySandboxService. static ScopedJavaLocalRef<jobjectArray> JNI_PrivacySandboxBridge_GetCurrentTopTopics(JNIEnv* env) { - // TODO(crbug.com/1286276): Call PrivacySandboxService. - std::vector<std::string> topics{"Generated sample data", "More made up data"}; - return base::android::ToJavaArrayOfStrings(env, topics); + return base::android::ToJavaArrayOfStrings( + env, std::vector<std::string>(GetCurrentTopics()->begin(), + GetCurrentTopics()->end())); } static ScopedJavaLocalRef<jobjectArray> JNI_PrivacySandboxBridge_GetBlockedTopics(JNIEnv* env) { - // TODO(crbug.com/1286276): Call PrivacySandboxService. - std::vector<std::string> topics{"Blocked sample data", "More blocked data"}; - return base::android::ToJavaArrayOfStrings(env, topics); + return base::android::ToJavaArrayOfStrings( + env, std::vector<std::string>(GetBlockedTopics()->begin(), + GetBlockedTopics()->end())); } static void JNI_PrivacySandboxBridge_SetTopicAllowed( JNIEnv* env, - const base::android::JavaParamRef<jstring>& topic, + const base::android::JavaParamRef<jstring>& j_topic, jboolean allowed) { - // TODO(crbug.com/1286276): Call PrivacySandboxService. + std::string topic = base::android::ConvertJavaStringToUTF8(j_topic); + if (allowed) { + GetCurrentTopics()->insert(topic); + GetBlockedTopics()->erase(topic); + } else { + GetCurrentTopics()->erase(topic); + GetBlockedTopics()->insert(topic); + } }
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc index b958d9a7..a2d3ee2 100644 --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -132,11 +132,11 @@ #include "chrome/browser/android/reading_list/reading_list_notification_service_factory.h" #include "chrome/browser/android/search_permissions/search_permissions_service.h" #include "chrome/browser/android/thin_webview/chrome_thin_webview_initializer.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/merchant_viewer/merchant_signal_db_content.pb.h" #include "chrome/browser/commerce/merchant_viewer/merchant_viewer_data_manager_factory.h" #include "chrome/browser/commerce/subscriptions/commerce_subscription_db_content.pb.h" #include "chrome/browser/media/android/cdm/media_drm_origin_id_manager_factory.h" +#include "components/commerce/core/commerce_feature_list.h" #else #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" #include "chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager_factory.h"
diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc index a3fadab7..719321b 100644 --- a/chrome/browser/profiles/profile.cc +++ b/chrome/browser/profiles/profile.cc
@@ -21,7 +21,6 @@ #include "chrome/browser/profiles/profile_observer.h" #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/language/core/browser/pref_names.h" #include "components/live_caption/pref_names.h" @@ -333,8 +332,6 @@ std::string()); #endif - data_reduction_proxy::RegisterSyncableProfilePrefs(registry); - #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) // Preferences related to the avatar bubble and user manager tutorials. registry->RegisterIntegerPref(prefs::kProfileAvatarTutorialShown, 0);
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc index 28211dc..6447763 100644 --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc
@@ -46,8 +46,6 @@ #include "chrome/browser/buildflags.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" -#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" #include "chrome/browser/download/download_core_service.h" #include "chrome/browser/download/download_core_service_factory.h" #include "chrome/browser/lifetime/application_lifetime.h" @@ -1634,11 +1632,6 @@ SupervisedUserServiceFactory::GetForProfile(profile)->Init(); #endif - // Activate data reduction proxy. This creates a request context and makes a - // URL request to check if the data reduction proxy server is reachable. - DataReductionProxyChromeSettingsFactory::GetForBrowserContext(profile)-> - MaybeActivateDataReductionProxy(true); - // Ensure NavigationPredictorKeyedService is started. NavigationPredictorKeyedServiceFactory::GetForProfile(profile);
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc index 1a816cef..823264a0 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
@@ -54,7 +54,6 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/search_test_utils.h" #include "chrome/test/base/ui_test_utils.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" #include "components/guest_view/browser/guest_view_manager_delegate.h" #include "components/guest_view/browser/test_guest_view_manager.h" #include "components/lens/lens_features.h"
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc index a77ffda..707dba6 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc
@@ -32,7 +32,6 @@ #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "components/custom_handlers/protocol_handler_registry.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "components/lens/lens_features.h" #include "components/policy/core/common/policy_pref_names.h" #include "components/prefs/pref_registry_simple.h" @@ -591,26 +590,6 @@ EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_CUSTOM_FIRST)); } -// Verify that request headers do not specify pass through when "Save Image -// As..." is used with Data Saver disabled. -TEST_F(RenderViewContextMenuPrefsTest, DataSaverDisabledSaveImageAs) { - data_reduction_proxy::DataReductionProxySettings:: - SetDataSaverEnabledForTesting(profile()->GetPrefs(), false); - - content::ContextMenuParams params = CreateParams(MenuItem::IMAGE); - params.unfiltered_link_url = params.link_url; - auto menu = std::make_unique<TestRenderViewContextMenu>( - *web_contents()->GetMainFrame(), params); - - menu->ExecuteCommand(IDC_CONTENT_CONTEXT_SAVEIMAGEAS, 0); - - const std::string& headers = - content::WebContentsTester::For(web_contents())->GetSaveFrameHeaders(); - EXPECT_TRUE(headers.find( - "Chrome-Proxy-Accept-Transform: identity") == std::string::npos); - EXPECT_TRUE(headers.find("Cache-Control: no-cache") == std::string::npos); -} - // Check that if image is broken "Load image" menu item is present. TEST_F(RenderViewContextMenuPrefsTest, LoadBrokenImage) { content::ContextMenuParams params = CreateParams(MenuItem::IMAGE);
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js index 5189b49..9be985e 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
@@ -743,6 +743,9 @@ }); TEST_F('ChromeVoxBackgroundTest', 'SelectOptionSelected', function() { + // Undoes the ChromeVoxNextE2E call setting this to true. The doDefault action + // should always be read. + DesktopAutomationHandler.announceActions = false; const mockFeedback = this.createMockFeedback(); const site = ` <p>start</p>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/base_automation_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/base_automation_handler.js index 3edfda5..cba1a00 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/base_automation_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/base_automation_handler.js
@@ -101,10 +101,8 @@ // Decide whether to announce and sync this event. const prevRange = ChromeVoxState.instance.getCurrentRangeWithoutRecovery(); - if (!DesktopAutomationHandler.announceActions && - (prevRange && !prevRange.requiresRecovery()) && - evt.eventFrom === 'action' && - !BaseAutomationHandler.allowEventFromAction_(evt.eventFromAction)) { + if ((prevRange && !prevRange.requiresRecovery()) && + BaseAutomationHandler.disallowEventFromAction(evt)) { return; } @@ -125,13 +123,15 @@ } /** - * @param {ActionType} eventFromAction + * Returns true if the event contains an action that should not be processed. + * @param {!ChromeVoxEvent} evt * @return {boolean} - * @private */ - static allowEventFromAction_(eventFromAction) { - return eventFromAction === ActionType.DO_DEFAULT || - eventFromAction === ActionType.SHOW_CONTEXT_MENU; + static disallowEventFromAction(evt) { + return !DesktopAutomationHandler.announceActions && + evt.eventFrom === 'action' && + evt.eventFromAction !== ActionType.DO_DEFAULT && + evt.eventFromAction !== ActionType.SHOW_CONTEXT_MENU; } }; }); // goog.scope
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/range_automation_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/range_automation_handler.js index 35fe764..1c3b573d 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/range_automation_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/range_automation_handler.js
@@ -98,8 +98,7 @@ * @param {!ChromeVoxEvent} evt */ onEventIfInRange(evt) { - if (!DesktopAutomationHandler.announceActions && - evt.eventFrom === 'action') { + if (BaseAutomationHandler.disallowEventFromAction(evt)) { return; }
diff --git a/chrome/browser/resources/pdf/pdf_viewer_shared_style.html b/chrome/browser/resources/pdf/pdf_viewer_shared_style.html index 91c5e5dc..9cfc9097 100644 --- a/chrome/browser/resources/pdf/pdf_viewer_shared_style.html +++ b/chrome/browser/resources/pdf/pdf_viewer_shared_style.html
@@ -8,6 +8,7 @@ } #plugin { + display: block; height: 100%; position: absolute; width: 100%;
diff --git a/chrome/browser/resources/pdf/viewport.js b/chrome/browser/resources/pdf/viewport.js index c3baa5f..d3e8d34 100644 --- a/chrome/browser/resources/pdf/viewport.js +++ b/chrome/browser/resources/pdf/viewport.js
@@ -1116,7 +1116,12 @@ // Since we do the movement of the page. e.preventDefault(); } else if (isCrossFrameKeyEvent(e)) { - const scrollOffset = (isDown ? 1 : -1) * this.size.height; + // Web scrolls by a fraction of the viewport height. Use the same + // fractional value as `cc::kMinFractionToStepWhenPaging` in + // cc/input/scroll_utils.h. The values must be kept in sync. + const MIN_FRACTION_TO_STEP_WHEN_PAGING = 0.875; + const scrollOffset = (isDown ? 1 : -1) * this.size.height * + MIN_FRACTION_TO_STEP_WHEN_PAGING; this.setPosition({ x: this.position.x, y: this.position.y + scrollOffset,
diff --git a/chrome/browser/signin/chrome_signin_helper.cc b/chrome/browser/signin/chrome_signin_helper.cc index ea548efe..4f0a9af2 100644 --- a/chrome/browser/signin/chrome_signin_helper.cc +++ b/chrome/browser/signin/chrome_signin_helper.cc
@@ -76,7 +76,7 @@ #endif // BUILDFLAG(IS_CHROMEOS_LACROS) #if BUILDFLAG(ENABLE_DICE_SUPPORT) -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #endif namespace signin { @@ -401,22 +401,22 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) -// Creates a DiceTurnOnSyncHelper. -void CreateDiceTurnOnSyncHelper(Profile* profile, - signin_metrics::AccessPoint access_point, - signin_metrics::PromoAction promo_action, - signin_metrics::Reason reason, - content::WebContents* web_contents, - const CoreAccountId& account_id) { +// Creates a TurnSyncOnHelper. +void CreateTurnSyncOnHelper(Profile* profile, + signin_metrics::AccessPoint access_point, + signin_metrics::PromoAction promo_action, + signin_metrics::Reason reason, + content::WebContents* web_contents, + const CoreAccountId& account_id) { DCHECK(profile); Browser* browser = web_contents ? chrome::FindBrowserWithWebContents(web_contents) : chrome::FindBrowserWithProfile(profile); - // DiceTurnSyncOnHelper is suicidal (it will kill itself once it finishes - // enabling sync). - new DiceTurnSyncOnHelper( - profile, browser, access_point, promo_action, reason, account_id, - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + // TurnSyncOnHelper is suicidal (it will kill itself once it finishes enabling + // sync). + new TurnSyncOnHelper(profile, browser, access_point, promo_action, reason, + account_id, + TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); } // Shows UI for signin errors. @@ -451,10 +451,9 @@ DiceResponseHandler* dice_response_handler = DiceResponseHandler::GetForProfile(profile); dice_response_handler->ProcessDiceHeader( - dice_params, - std::make_unique<ProcessDiceHeaderDelegateImpl>( - web_contents, base::BindOnce(&CreateDiceTurnOnSyncHelper), - base::BindOnce(&ShowDiceSigninError))); + dice_params, std::make_unique<ProcessDiceHeaderDelegateImpl>( + web_contents, base::BindOnce(&CreateTurnSyncOnHelper), + base::BindOnce(&ShowDiceSigninError))); } #endif // BUILDFLAG(ENABLE_DICE_SUPPORT)
diff --git a/chrome/browser/signin/dice_web_signin_interceptor.cc b/chrome/browser/signin/dice_web_signin_interceptor.cc index 1657f40..4dbff5a 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor.cc
@@ -39,8 +39,6 @@ #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" #include "chrome/browser/ui/signin/profile_colors_util.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h" #include "chrome/common/pref_names.h" #include "chrome/common/themes/autogenerated_theme_util.h" #include "components/password_manager/core/browser/password_manager.h" @@ -731,7 +729,7 @@ accounts_mutator->RemoveAccount( account_info.account_id, signin_metrics::SourceForRefreshTokenOperation:: - kDiceTurnOnSyncHelper_Abort); + kTurnOnSyncHelper_Abort); } signin_util::RecordEnterpriseProfileCreationUserChoice( /*enforced_by_policy=*/signin_util::ProfileSeparationEnforcedByPolicy(
diff --git a/chrome/browser/signin/signin_ui_util.cc b/chrome/browser/signin/signin_ui_util.cc index 1bbdb265..b951b53 100644 --- a/chrome/browser/signin/signin_ui_util.cc +++ b/chrome/browser/signin/signin_ui_util.cc
@@ -59,7 +59,7 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) #include "chrome/browser/signin/account_consistency_mode_manager.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #endif namespace { @@ -118,19 +118,19 @@ }; #if BUILDFLAG(ENABLE_DICE_SUPPORT) -void CreateDiceTurnSyncOnHelper( +void CreateTurnSyncOnHelper( Profile* profile, Browser* browser, signin_metrics::AccessPoint signin_access_point, signin_metrics::PromoAction signin_promo_action, signin_metrics::Reason signin_reason, const CoreAccountId& account_id, - DiceTurnSyncOnHelper::SigninAbortedMode signin_aborted_mode) { - // DiceTurnSyncOnHelper is suicidal (it will delete itself once it finishes + TurnSyncOnHelper::SigninAbortedMode signin_aborted_mode) { + // TurnSyncOnHelper is suicidal (it will delete itself once it finishes // enabling sync). - new DiceTurnSyncOnHelper(profile, browser, signin_access_point, - signin_promo_action, signin_reason, account_id, - signin_aborted_mode); + new TurnSyncOnHelper(profile, browser, signin_access_point, + signin_promo_action, signin_reason, account_id, + signin_aborted_mode); } #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) @@ -345,7 +345,7 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) internal::EnableSyncFromPromo(browser, account, access_point, is_default_promo_account, - base::BindOnce(&CreateDiceTurnSyncOnHelper)); + base::BindOnce(&CreateTurnSyncOnHelper)); #else NOTREACHED(); #endif @@ -365,8 +365,8 @@ signin_metrics::PromoAction signin_promo_action, signin_metrics::Reason signin_reason, const CoreAccountId& account_id, - DiceTurnSyncOnHelper::SigninAbortedMode signin_aborted_mode)> - create_dice_turn_sync_on_helper_callback) { + TurnSyncOnHelper::SigninAbortedMode signin_aborted_mode)> + create_turn_sync_on_helper_callback) { DCHECK(browser); DCHECK_NE(signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN, access_point); Profile* profile = browser->profile(); @@ -408,10 +408,10 @@ signin_metrics::LogSigninAccessPointStarted(access_point, promo_action); signin_metrics::RecordSigninUserActionForAccessPoint(access_point, promo_action); - std::move(create_dice_turn_sync_on_helper_callback) + std::move(create_turn_sync_on_helper_callback) .Run(profile, browser, access_point, promo_action, signin_metrics::Reason::kSigninPrimaryAccount, account.account_id, - DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); + TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); } } // namespace internal
diff --git a/chrome/browser/signin/signin_ui_util.h b/chrome/browser/signin/signin_ui_util.h index 075952e..f943ae17 100644 --- a/chrome/browser/signin/signin_ui_util.h +++ b/chrome/browser/signin/signin_ui_util.h
@@ -17,7 +17,7 @@ #include "components/signin/public/base/signin_metrics.h" #if BUILDFLAG(ENABLE_DICE_SUPPORT) -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #endif struct AccountInfo; @@ -133,7 +133,7 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) namespace internal { // Same as |EnableSyncFromPromo| but with a callback that creates a -// DiceTurnSyncOnHelper so that it can be unit tested. +// TurnSyncOnHelper so that it can be unit tested. void EnableSyncFromPromo( Browser* browser, const AccountInfo& account, @@ -146,8 +146,8 @@ signin_metrics::PromoAction signin_promo_action, signin_metrics::Reason signin_reason, const CoreAccountId& account_id, - DiceTurnSyncOnHelper::SigninAbortedMode signin_aborted_mode)> - create_dice_turn_sync_on_helper_callback); + TurnSyncOnHelper::SigninAbortedMode signin_aborted_mode)> + create_turn_sync_on_helper_callback); } // namespace internal #endif
diff --git a/chrome/browser/signin/signin_ui_util_unittest.cc b/chrome/browser/signin/signin_ui_util_unittest.cc index 43be4319f..69371b79 100644 --- a/chrome/browser/signin/signin_ui_util_unittest.cc +++ b/chrome/browser/signin/signin_ui_util_unittest.cc
@@ -107,7 +107,7 @@ DiceSigninUiUtilTest() = default; ~DiceSigninUiUtilTest() override = default; - struct CreateDiceTurnSyncOnHelperParams { + struct CreateTurnSyncOnHelperParams { public: raw_ptr<Profile> profile = nullptr; raw_ptr<Browser> browser = nullptr; @@ -118,28 +118,28 @@ signin_metrics::Reason signin_reason = signin_metrics::Reason::kUnknownReason; CoreAccountId account_id; - DiceTurnSyncOnHelper::SigninAbortedMode signin_aborted_mode = - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT; + TurnSyncOnHelper::SigninAbortedMode signin_aborted_mode = + TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT; }; - void CreateDiceTurnSyncOnHelper( + void CreateTurnSyncOnHelper( Profile* profile, Browser* browser, signin_metrics::AccessPoint signin_access_point, signin_metrics::PromoAction signin_promo_action, signin_metrics::Reason signin_reason, const CoreAccountId& account_id, - DiceTurnSyncOnHelper::SigninAbortedMode signin_aborted_mode) { - create_dice_turn_sync_on_helper_called_ = true; - create_dice_turn_sync_on_helper_params_.profile = profile; - create_dice_turn_sync_on_helper_params_.browser = browser; - create_dice_turn_sync_on_helper_params_.signin_access_point = + TurnSyncOnHelper::SigninAbortedMode signin_aborted_mode) { + create_turn_sync_on_helper_called_ = true; + create_turn_sync_on_helper_params_.profile = profile; + create_turn_sync_on_helper_params_.browser = browser; + create_turn_sync_on_helper_params_.signin_access_point = signin_access_point; - create_dice_turn_sync_on_helper_params_.signin_promo_action = + create_turn_sync_on_helper_params_.signin_promo_action = signin_promo_action; - create_dice_turn_sync_on_helper_params_.signin_reason = signin_reason; - create_dice_turn_sync_on_helper_params_.account_id = account_id; - create_dice_turn_sync_on_helper_params_.signin_aborted_mode = + create_turn_sync_on_helper_params_.signin_reason = signin_reason; + create_turn_sync_on_helper_params_.account_id = account_id; + create_turn_sync_on_helper_params_.signin_aborted_mode = signin_aborted_mode; } @@ -171,7 +171,7 @@ bool is_default_promo_account) { signin_ui_util::internal::EnableSyncFromPromo( browser(), account_info, access_point_, is_default_promo_account, - base::BindOnce(&DiceSigninUiUtilTest::CreateDiceTurnSyncOnHelper, + base::BindOnce(&DiceSigninUiUtilTest::CreateTurnSyncOnHelper, base::Unretained(this))); } @@ -254,8 +254,8 @@ signin_metrics::AccessPoint access_point_ = signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE; - bool create_dice_turn_sync_on_helper_called_ = false; - CreateDiceTurnSyncOnHelperParams create_dice_turn_sync_on_helper_params_; + bool create_turn_sync_on_helper_called_ = false; + CreateTurnSyncOnHelperParams create_turn_sync_on_helper_params_; }; TEST_F(DiceSigninUiUtilTest, EnableSyncWithExistingAccount) { @@ -279,7 +279,7 @@ is_default_promo_account ? signin_metrics::PromoAction::PROMO_ACTION_WITH_DEFAULT : signin_metrics::PromoAction::PROMO_ACTION_NOT_DEFAULT; - ASSERT_TRUE(create_dice_turn_sync_on_helper_called_); + ASSERT_TRUE(create_turn_sync_on_helper_called_); ExpectOneSigninStartedHistograms(histogram_tester, expected_promo_action); EXPECT_EQ(1, user_action_tester.GetActionCount( @@ -294,17 +294,17 @@ // Verify that the helper to enable sync is created with the expected // params. - EXPECT_EQ(profile(), create_dice_turn_sync_on_helper_params_.profile); - EXPECT_EQ(browser(), create_dice_turn_sync_on_helper_params_.browser); - EXPECT_EQ(account_id, create_dice_turn_sync_on_helper_params_.account_id); + EXPECT_EQ(profile(), create_turn_sync_on_helper_params_.profile); + EXPECT_EQ(browser(), create_turn_sync_on_helper_params_.browser); + EXPECT_EQ(account_id, create_turn_sync_on_helper_params_.account_id); EXPECT_EQ(signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE, - create_dice_turn_sync_on_helper_params_.signin_access_point); + create_turn_sync_on_helper_params_.signin_access_point); EXPECT_EQ(expected_promo_action, - create_dice_turn_sync_on_helper_params_.signin_promo_action); + create_turn_sync_on_helper_params_.signin_promo_action); EXPECT_EQ(signin_metrics::Reason::kSigninPrimaryAccount, - create_dice_turn_sync_on_helper_params_.signin_reason); - EXPECT_EQ(DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT, - create_dice_turn_sync_on_helper_params_.signin_aborted_mode); + create_turn_sync_on_helper_params_.signin_reason); + EXPECT_EQ(TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT, + create_turn_sync_on_helper_params_.signin_aborted_mode); } } @@ -332,7 +332,7 @@ EnableSync( GetIdentityManager()->FindExtendedAccountInfoByAccountId(account_id), is_default_promo_account); - ASSERT_FALSE(create_dice_turn_sync_on_helper_called_); + ASSERT_FALSE(create_turn_sync_on_helper_called_); ExpectOneSigninStartedHistograms( histogram_tester, @@ -372,7 +372,7 @@ 0, user_action_tester.GetActionCount("Signin_Signin_FromBookmarkBubble")); EnableSync(AccountInfo(), false /* is_default_promo_account (not used)*/); - ASSERT_FALSE(create_dice_turn_sync_on_helper_called_); + ASSERT_FALSE(create_turn_sync_on_helper_called_); ExpectOneSigninStartedHistograms( histogram_tester, signin_metrics::PromoAction:: @@ -405,7 +405,7 @@ 0, user_action_tester.GetActionCount("Signin_Signin_FromBookmarkBubble")); EnableSync(AccountInfo(), false /* is_default_promo_account (not used)*/); - ASSERT_FALSE(create_dice_turn_sync_on_helper_called_); + ASSERT_FALSE(create_turn_sync_on_helper_called_); ExpectOneSigninStartedHistograms( histogram_tester, @@ -427,7 +427,7 @@ 0, user_action_tester.GetActionCount("Signin_Signin_FromBookmarkBubble")); EnableSync(AccountInfo(), false /* is_default_promo_account (not used)*/); - ASSERT_FALSE(create_dice_turn_sync_on_helper_called_); + ASSERT_FALSE(create_turn_sync_on_helper_called_); ExpectOneSigninStartedHistograms( histogram_tester, signin_metrics::PromoAction::
diff --git a/chrome/browser/signin/signin_util_win.cc b/chrome/browser/signin/signin_util_win.cc index 21f0fdc..8678e8d2 100644 --- a/chrome/browser/signin/signin_util_win.cc +++ b/chrome/browser/signin/signin_util_win.cc
@@ -27,9 +27,9 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_list.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" #include "chrome/browser/ui/webui/signin/signin_ui_error.h" #include "chrome/browser/ui/webui/signin/signin_utils_desktop.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #include "chrome/credential_provider/common/gcp_strings.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/about_signin_internals.h" @@ -42,9 +42,9 @@ namespace { -std::unique_ptr<DiceTurnSyncOnHelper::Delegate>* -GetDiceTurnSyncOnHelperDelegateForTestingStorage() { - static base::NoDestructor<std::unique_ptr<DiceTurnSyncOnHelper::Delegate>> +std::unique_ptr<TurnSyncOnHelper::Delegate>* +GetTurnSyncOnHelperDelegateForTestingStorage() { + static base::NoDestructor<std::unique_ptr<TurnSyncOnHelper::Delegate>> delegate; return delegate.get(); } @@ -73,25 +73,25 @@ void FinishImportCredentialsFromProvider(const CoreAccountId& account_id, Browser* browser, Profile* profile) { - // DiceTurnSyncOnHelper deletes itself once done. - if (GetDiceTurnSyncOnHelperDelegateForTestingStorage()->get()) { - new DiceTurnSyncOnHelper( + // TurnSyncOnHelper deletes itself once done. + if (GetTurnSyncOnHelperDelegateForTestingStorage()->get()) { + new TurnSyncOnHelper( profile, signin_metrics::AccessPoint::ACCESS_POINT_MACHINE_LOGON, signin_metrics::PromoAction::PROMO_ACTION_WITH_DEFAULT, signin_metrics::Reason::kSigninPrimaryAccount, account_id, - DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT, - std::move(*GetDiceTurnSyncOnHelperDelegateForTestingStorage()), + TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT, + std::move(*GetTurnSyncOnHelperDelegateForTestingStorage()), base::DoNothing()); } else { if (!browser) browser = chrome::FindLastActiveWithProfile(profile); - new DiceTurnSyncOnHelper( + new TurnSyncOnHelper( profile, browser, signin_metrics::AccessPoint::ACCESS_POINT_MACHINE_LOGON, signin_metrics::PromoAction::PROMO_ACTION_WITH_DEFAULT, signin_metrics::Reason::kSigninPrimaryAccount, account_id, - DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); + TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); } } @@ -240,9 +240,9 @@ } // namespace -void SetDiceTurnSyncOnHelperDelegateForTesting( - std::unique_ptr<DiceTurnSyncOnHelper::Delegate> delegate) { - GetDiceTurnSyncOnHelperDelegateForTestingStorage()->swap(delegate); +void SetTurnSyncOnHelperDelegateForTesting( + std::unique_ptr<TurnSyncOnHelper::Delegate> delegate) { + GetTurnSyncOnHelperDelegateForTestingStorage()->swap(delegate); // IN-TEST } // Credential provider needs to stick to profile it previously used to import
diff --git a/chrome/browser/signin/signin_util_win.h b/chrome/browser/signin/signin_util_win.h index 771085f9..c5730471 100644 --- a/chrome/browser/signin/signin_util_win.h +++ b/chrome/browser/signin/signin_util_win.h
@@ -7,7 +7,7 @@ #include <memory> -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" class Profile; @@ -22,9 +22,9 @@ // installed returns true. bool ReauthWithCredentialProviderIfPossible(Profile* profile); -// Sets the DiceTurnSyncOnHelper delegate for browser tests. -void SetDiceTurnSyncOnHelperDelegateForTesting( - std::unique_ptr<DiceTurnSyncOnHelper::Delegate> delegate); +// Sets the TurnSyncOnHelper delegate for browser tests. +void SetTurnSyncOnHelperDelegateForTesting( + std::unique_ptr<TurnSyncOnHelper::Delegate> delegate); } // namespace signin_util
diff --git a/chrome/browser/signin/signin_util_win_browsertest.cc b/chrome/browser/signin/signin_util_win_browsertest.cc index 3eea128..78a2bc8 100644 --- a/chrome/browser/signin/signin_util_win_browsertest.cc +++ b/chrome/browser/signin/signin_util_win_browsertest.cc
@@ -23,7 +23,7 @@ #include "chrome/browser/signin/signin_util_win.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/ui_features.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "chrome/credential_provider/common/gcp_strings.h" @@ -40,21 +40,21 @@ namespace { -class TestDiceTurnSyncOnHelperDelegate : public DiceTurnSyncOnHelper::Delegate { - ~TestDiceTurnSyncOnHelperDelegate() override {} +class TestTurnSyncOnHelperDelegate : public TurnSyncOnHelper::Delegate { + ~TestTurnSyncOnHelperDelegate() override {} - // DiceTurnSyncOnHelper::Delegate: + // TurnSyncOnHelper::Delegate: void ShowLoginError(const SigninUIError& error) override {} void ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override { - std::move(callback).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); + TurnSyncOnHelper::SigninChoiceCallback callback) override { + std::move(callback).Run(TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); } void ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override { - std::move(callback).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); + TurnSyncOnHelper::SigninChoiceCallback callback) override { + std::move(callback).Run(TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); } void ShowSyncConfirmation( base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> @@ -213,9 +213,9 @@ bool SetUpUserDataDirectory() override { registry_override_.OverrideRegistry(HKEY_CURRENT_USER); - signin_util::SetDiceTurnSyncOnHelperDelegateForTesting( - std::unique_ptr<DiceTurnSyncOnHelper::Delegate>( - new TestDiceTurnSyncOnHelperDelegate())); + signin_util::SetTurnSyncOnHelperDelegateForTesting( + std::unique_ptr<TurnSyncOnHelper::Delegate>( + new TestTurnSyncOnHelperDelegate())); SetSigninUtilRegistry(); @@ -399,9 +399,9 @@ bool SetUpUserDataDirectory() override { registry_override_.OverrideRegistry(HKEY_CURRENT_USER); - signin_util::SetDiceTurnSyncOnHelperDelegateForTesting( - std::unique_ptr<DiceTurnSyncOnHelper::Delegate>( - new TestDiceTurnSyncOnHelperDelegate())); + signin_util::SetTurnSyncOnHelperDelegateForTesting( + std::unique_ptr<TurnSyncOnHelper::Delegate>( + new TestTurnSyncOnHelperDelegate())); if (!IsPreTest()) SetSigninUtilRegistry(); @@ -548,9 +548,9 @@ bool SetUpUserDataDirectory() override { registry_override_.OverrideRegistry(HKEY_CURRENT_USER); - signin_util::SetDiceTurnSyncOnHelperDelegateForTesting( - std::unique_ptr<DiceTurnSyncOnHelper::Delegate>( - new TestDiceTurnSyncOnHelperDelegate())); + signin_util::SetTurnSyncOnHelperDelegateForTesting( + std::unique_ptr<TurnSyncOnHelper::Delegate>( + new TestTurnSyncOnHelperDelegate())); if (!IsPreTest()) { SetSigninUtilRegistry(); } else if (IsPrePreTest() && GetParam().cred_provider_used_other_profile) {
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 5067f92..2017860 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -397,7 +397,6 @@ "//chrome/browser:dev_ui_browser_resources", "//chrome/browser:resource_prefetch_predictor_proto", "//chrome/browser/breadcrumbs", - "//chrome/browser/commerce:feature_list", "//chrome/browser/commerce/shopping_list", "//chrome/browser/devtools", "//chrome/browser/image_decoder", @@ -456,6 +455,7 @@ "//components/captive_portal/core:buildflags", "//components/client_hints/browser", "//components/commerce/content:metrics", + "//components/commerce/core:feature_list", "//components/consent_auditor/", "//components/content_settings/browser", "//components/content_settings/common:mojom", @@ -3312,8 +3312,6 @@ "webui/settings/settings_manage_profile_handler.h", "webui/settings/system_handler.cc", "webui/settings/system_handler.h", - "webui/signin/dice_turn_sync_on_helper.cc", - "webui/signin/dice_turn_sync_on_helper.h", "webui/signin/enterprise_profile_welcome_handler.cc", "webui/signin/enterprise_profile_welcome_handler.h", "webui/signin/enterprise_profile_welcome_ui.cc", @@ -3340,6 +3338,8 @@ "webui/signin/signin_ui_error.h", "webui/signin/signin_utils_desktop.cc", "webui/signin/signin_utils_desktop.h", + "webui/signin/turn_sync_on_helper.cc", + "webui/signin/turn_sync_on_helper.h", ] deps += [ @@ -3369,8 +3369,6 @@ "views/sync/dice_bubble_sync_promo_view.h", "views/sync/dice_signin_button_view.cc", "views/sync/dice_signin_button_view.h", - "webui/signin/dice_turn_sync_on_helper_delegate_impl.cc", - "webui/signin/dice_turn_sync_on_helper_delegate_impl.h", "webui/signin/dice_web_signin_intercept_handler.cc", "webui/signin/dice_web_signin_intercept_handler.h", "webui/signin/dice_web_signin_intercept_ui.cc", @@ -3381,6 +3379,8 @@ "webui/signin/signin_reauth_handler.h", "webui/signin/signin_reauth_ui.cc", "webui/signin/signin_reauth_ui.h", + "webui/signin/turn_sync_on_helper_delegate_impl.cc", + "webui/signin/turn_sync_on_helper_delegate_impl.h", "webui/welcome/bookmark_handler.cc", "webui/welcome/bookmark_handler.h", "webui/welcome/bookmark_item.cc",
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index f23c0bc..760115bb 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -929,7 +929,10 @@ <message name="IDS_PRIVACY_SANDBOX_TOPIC_INTERESTS_CATEGORY" desc="Title of a section of the settings page to configure ad personalization." translateable="false"> Your interests as estimated by Chrome </message> - <message name="IDS_PRIVACY_SANDBOX_FLEDGE_INTERESTS_CATEGORY" desc="Title of a section of the settings page to configure ad personalization." translateable="false"> + <message name="IDS_PRIVACY_SANDBOX_TOPIC_EMPTY_STATE" desc="Summary shown when no interests for ad personlization are available." translateable="false"> + A list of interests will appear here as you browse the web. + </message> + <message name="IDS_PRIVACY_SANDBOX_FLEDGE_INTERESTS_CATEGORY" desc="Title of a section of the settings page to configure ad personalization." translateable="false"> Sites you visit that define your interests </message> <message name="IDS_PRIVACY_SANDBOX_FLEDGE_UNDER_DEVELOPMENT_NOTICE" desc="Text to explain that a feature for ad personalization is not implemented yet." translateable="false">
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc index a603e3b..c10ccc5e 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.cc +++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -105,6 +105,7 @@ #include "chrome/browser/ui/autofill/payments/offer_notification_bubble_controller_impl.h" #include "chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.h" #include "chrome/browser/ui/autofill/payments/save_upi_bubble_controller_impl.h" +#include "chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller_impl.h" #include "chrome/browser/ui/autofill/payments/virtual_card_manual_fallback_bubble_controller_impl.h" #include "chrome/browser/ui/autofill/payments/virtual_card_selection_dialog_controller_impl.h" #include "chrome/browser/ui/autofill/payments/webauthn_dialog_controller_impl.h" @@ -376,6 +377,21 @@ return form_data_importer_->GetVirtualCardEnrollmentManager(); } +void ChromeAutofillClient::ShowVirtualCardEnrollDialog( + const raw_ptr<VirtualCardEnrollmentFields> virtual_card_enrollment_fields, + base::OnceClosure accept_virtual_card_callback, + base::OnceClosure decline_virtual_card_callback) { +#if !BUILDFLAG(IS_ANDROID) + VirtualCardEnrollBubbleControllerImpl::CreateForWebContents(web_contents()); + VirtualCardEnrollBubbleControllerImpl* controller = + VirtualCardEnrollBubbleControllerImpl::FromWebContents(web_contents()); + DCHECK(controller); + controller->ShowBubble(virtual_card_enrollment_fields, + std::move(accept_virtual_card_callback), + std::move(decline_virtual_card_callback)); +#endif // !BUILDFLAG(IS_ANDROID) +} + #if !BUILDFLAG(IS_ANDROID) std::vector<std::string> ChromeAutofillClient::GetAllowedMerchantsForVirtualCards() {
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.h b/chrome/browser/ui/autofill/chrome_autofill_client.h index 33396837..4da3a509 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.h +++ b/chrome/browser/ui/autofill/chrome_autofill_client.h
@@ -40,6 +40,7 @@ namespace autofill { class AutofillPopupControllerImpl; +struct VirtualCardEnrollmentFields; class VirtualCardEnrollmentManager; // Chrome implementation of AutofillClient. @@ -99,6 +100,10 @@ void DismissUnmaskAuthenticatorSelectionDialog(bool server_success) override; raw_ptr<VirtualCardEnrollmentManager> GetVirtualCardEnrollmentManager() override; + void ShowVirtualCardEnrollDialog( + const raw_ptr<VirtualCardEnrollmentFields> virtual_card_enrollment_fields, + base::OnceClosure accept_virtual_card_callback, + base::OnceClosure decline_virtual_card_callback) override; #if !BUILDFLAG(IS_ANDROID) std::vector<std::string> GetAllowedMerchantsForVirtualCards() override; std::vector<std::string> GetAllowedBinRangesForVirtualCards() override;
diff --git a/chrome/browser/ui/autofill/payments/offer_notification_bubble_controller_impl.cc b/chrome/browser/ui/autofill/payments/offer_notification_bubble_controller_impl.cc index bc96b05..b07c794 100644 --- a/chrome/browser/ui/autofill/payments/offer_notification_bubble_controller_impl.cc +++ b/chrome/browser/ui/autofill/payments/offer_notification_bubble_controller_impl.cc
@@ -6,7 +6,6 @@ #include <string> -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/coupons/coupon_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/autofill/autofill_bubble_base.h" @@ -20,6 +19,7 @@ #include "components/autofill/core/common/autofill_clock.h" #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_payments_features.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/strings/grit/components_strings.h" #include "content/public/browser/navigation_handle.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/ui/autofill/payments/offer_notification_bubble_controller_impl_unittest.cc b/chrome/browser/ui/autofill/payments/offer_notification_bubble_controller_impl_unittest.cc index 1b341a64..d154819 100644 --- a/chrome/browser/ui/autofill/payments/offer_notification_bubble_controller_impl_unittest.cc +++ b/chrome/browser/ui/autofill/payments/offer_notification_bubble_controller_impl_unittest.cc
@@ -6,7 +6,6 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/coupons/coupon_service.h" #include "chrome/browser/ui/autofill/autofill_bubble_base.h" #include "chrome/browser/ui/browser_finder.h" @@ -15,6 +14,7 @@ #include "components/autofill/core/browser/autofill_test_utils.h" #include "components/autofill/core/browser/data_model/autofill_offer_data.h" #include "components/autofill/core/browser/test_autofill_clock.h" +#include "components/commerce/core/commerce_feature_list.h" #include "content/public/test/mock_navigation_handle.h" #include "content/public/test/navigation_simulator.h" #include "content/public/test/web_contents_tester.h"
diff --git a/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller.h b/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller.h index f30eed2..9dc9861 100644 --- a/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller.h +++ b/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller.h
@@ -53,7 +53,7 @@ virtual std::u16string GetLearnMoreLinkText() const = 0; // Returns the enrollment fields for the virtual card. - virtual VirtualCardEnrollmentFields* GetVirtualCardEnrollmentFields() + virtual const VirtualCardEnrollmentFields* GetVirtualCardEnrollmentFields() const = 0; // Returns the currently active virtual card enroll bubble view. Can be
diff --git a/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller_impl.cc b/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller_impl.cc index 126a50e..17550dc 100644 --- a/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller_impl.cc +++ b/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller_impl.cc
@@ -44,9 +44,17 @@ return VirtualCardEnrollBubbleControllerImpl::FromWebContents(web_contents); } -void VirtualCardEnrollBubbleControllerImpl::ShowBubble() { +void VirtualCardEnrollBubbleControllerImpl::ShowBubble( + const VirtualCardEnrollmentFields* virtual_card_enrollment_fields, + base::OnceClosure accept_virtual_card_callback, + base::OnceClosure decline_virtual_card_callback) { + // If bubble is already showing for another card, close it. if (bubble_view()) - return; + HideBubble(); + + virtual_card_enrollment_fields_ = virtual_card_enrollment_fields; + accept_virtual_card_callback_ = std::move(accept_virtual_card_callback); + decline_virtual_card_callback_ = std::move(decline_virtual_card_callback); is_user_gesture_ = false; Show(); @@ -102,7 +110,7 @@ IDS_AUTOFILL_VIRTUAL_CARD_ENROLLMENT_LEARN_MORE_LINK_LABEL); } -VirtualCardEnrollmentFields* +const VirtualCardEnrollmentFields* VirtualCardEnrollBubbleControllerImpl::GetVirtualCardEnrollmentFields() const { return virtual_card_enrollment_fields_.get(); } @@ -112,9 +120,19 @@ return bubble_view(); } -void VirtualCardEnrollBubbleControllerImpl::OnAcceptButton() {} +void VirtualCardEnrollBubbleControllerImpl::OnAcceptButton() { + std::move(accept_virtual_card_callback_).Run(); + decline_virtual_card_callback_.Reset(); -void VirtualCardEnrollBubbleControllerImpl::OnDeclineButton() {} + should_show_icon_ = false; +} + +void VirtualCardEnrollBubbleControllerImpl::OnDeclineButton() { + std::move(decline_virtual_card_callback_).Run(); + accept_virtual_card_callback_.Reset(); + + should_show_icon_ = false; +} void VirtualCardEnrollBubbleControllerImpl::OnLinkClicked(const GURL& url) { web_contents()->OpenURL(content::OpenURLParams( @@ -123,7 +141,10 @@ } void VirtualCardEnrollBubbleControllerImpl::OnBubbleClosed( - PaymentsBubbleClosedReason closed_reason) {} + PaymentsBubbleClosedReason closed_reason) { + set_bubble_view(nullptr); + UpdatePageActionIcon(); +} bool VirtualCardEnrollBubbleControllerImpl::IsIconVisible() const { return should_show_icon_;
diff --git a/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller_impl.h b/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller_impl.h index 5ed67e8..e9e19fa 100644 --- a/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller_impl.h +++ b/chrome/browser/ui/autofill/payments/virtual_card_enroll_bubble_controller_impl.h
@@ -26,8 +26,12 @@ ~VirtualCardEnrollBubbleControllerImpl() override; // Displays both the virtual card enroll bubble and its associated omnibox - // icon. - void ShowBubble(); + // icon. Sets virtual card enrollment fields as well as the closure for the + // accept and decline bubble events. + void ShowBubble( + const VirtualCardEnrollmentFields* virtual_card_enrollment_fields, + base::OnceClosure accept_virtual_card_callback, + base::OnceClosure decline_virtual_card_callback); // Shows the bubble again if the users clicks the omnibox icon. void ReshowBubble(); @@ -38,7 +42,8 @@ std::u16string GetAcceptButtonText() const override; std::u16string GetDeclineButtonText() const override; std::u16string GetLearnMoreLinkText() const override; - VirtualCardEnrollmentFields* GetVirtualCardEnrollmentFields() const override; + const VirtualCardEnrollmentFields* GetVirtualCardEnrollmentFields() + const override; AutofillBubbleBase* GetVirtualCardEnrollBubbleView() const override; void OnAcceptButton() override; @@ -60,7 +65,7 @@ VirtualCardEnrollBubbleControllerImpl>; // Contains more details regarding the sort of bubble to show the users. - std::unique_ptr<VirtualCardEnrollmentFields> virtual_card_enrollment_fields_; + raw_ptr<const VirtualCardEnrollmentFields> virtual_card_enrollment_fields_; // True if the icon should be showing on the webpage bool should_show_icon_ = false; @@ -69,6 +74,12 @@ // it means the bubble is a reshown bubble. bool is_user_gesture_ = false; + // Closure invoked when the user agrees to enroll in a virtual card. + base::OnceClosure accept_virtual_card_callback_; + + // Closure invoked when the user rejects enrolling in a virtual card. + base::OnceClosure decline_virtual_card_callback_; + WEB_CONTENTS_USER_DATA_KEY_DECL(); };
diff --git a/chrome/browser/ui/cocoa/tab_menu_bridge.h b/chrome/browser/ui/cocoa/tab_menu_bridge.h index 0603f23..1a14514 100644 --- a/chrome/browser/ui/cocoa/tab_menu_bridge.h +++ b/chrome/browser/ui/cocoa/tab_menu_bridge.h
@@ -9,6 +9,7 @@ #include "base/mac/scoped_nsobject.h" #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" +@class NSMutableArray; @class NSMenuItem; @class TabMenuListener; class TabStripModel; @@ -43,8 +44,8 @@ private: FRIEND_TEST_ALL_PREFIXES(TabMenuBridgeTest, ClickingMenuActivatesTab); - // These methods are used to make batch changes to the menu. - void RemoveAllDynamicItems(); + // These methods are used manage the dynamic menu items. + NSMutableArray* DynamicMenuItems(); void AddDynamicItemsFromModel(); // This method exists to be called back into from the Cocoa part of this
diff --git a/chrome/browser/ui/cocoa/tab_menu_bridge.mm b/chrome/browser/ui/cocoa/tab_menu_bridge.mm index 401cd34..b3478570 100644 --- a/chrome/browser/ui/cocoa/tab_menu_bridge.mm +++ b/chrome/browser/ui/cocoa/tab_menu_bridge.mm
@@ -47,6 +47,14 @@ item.image = tab_ui_helper->GetFavicon().AsNSImage(); } +void RemoveMenuItems(NSArray* menu_items) { + NSMenu* tab_menu = [[menu_items firstObject] menu]; + + for (NSMenuItem* item in menu_items) { + [tab_menu removeItem:item]; + } +} + } // namespace @interface TabMenuListener : NSObject @@ -86,35 +94,57 @@ TabMenuBridge::~TabMenuBridge() { if (model_) model_->RemoveObserver(this); - RemoveAllDynamicItems(); + RemoveMenuItems(DynamicMenuItems()); } void TabMenuBridge::BuildMenu() { DCHECK(model_); - RemoveAllDynamicItems(); AddDynamicItemsFromModel(); } -void TabMenuBridge::RemoveAllDynamicItems() { +NSMutableArray* TabMenuBridge::DynamicMenuItems() { + NSMenu* tabMenu = menu_item_.submenu; + NSMutableArray* array = [[[NSMutableArray alloc] + initWithCapacity:[tabMenu numberOfItems]] autorelease]; + for (NSMenuItem* item in menu_item_.submenu.itemArray) { if (item.target == menu_listener_.get()) - [menu_item_.submenu removeItem:item]; + [array addObject:item]; } + + return array; } void TabMenuBridge::AddDynamicItemsFromModel() { - dynamic_items_start_ = menu_item_.submenu.numberOfItems; + NSMutableArray* recyclable_items = DynamicMenuItems(); + NSMenu* tabMenu = menu_item_.submenu; + + dynamic_items_start_ = tabMenu.numberOfItems - recyclable_items.count; for (int i = 0; i < model_->count(); ++i) { - base::scoped_nsobject<NSMenuItem> item([[NSMenuItem alloc] - initWithTitle:@"" - action:@selector(activateTab:) - keyEquivalent:@""]); - [item setTarget:menu_listener_.get()]; - if (model_->active_index() == i) + base::scoped_nsobject<NSMenuItem> item; + + if (recyclable_items.count) { + item.reset([[recyclable_items firstObject] retain]); + [recyclable_items removeObjectAtIndex:0]; + [item setState:NSOffState]; + } else { + item.reset([[NSMenuItem alloc] initWithTitle:@"" + action:@selector(activateTab:) + keyEquivalent:@""]); + [item setTarget:menu_listener_.get()]; + } + + if (model_->active_index() == i) { [item setState:NSOnState]; + } UpdateItemForWebContents(item, model_->GetWebContentsAt(i)); - [menu_item_.submenu addItem:item.get()]; + + if ([item menu] == nil) { + [tabMenu addItem:item.get()]; + } } + + RemoveMenuItems(recyclable_items); } void TabMenuBridge::OnDynamicItemChosen(NSMenuItem* item) { @@ -144,9 +174,6 @@ return; } - // Rather than doing clever updating from |change|, just destroy the dynamic - // menu items and re-add them. - RemoveAllDynamicItems(); AddDynamicItemsFromModel(); }
diff --git a/chrome/browser/ui/cocoa/tab_menu_bridge_unittest.mm b/chrome/browser/ui/cocoa/tab_menu_bridge_unittest.mm index ab617721..e8e24ef 100644 --- a/chrome/browser/ui/cocoa/tab_menu_bridge_unittest.mm +++ b/chrome/browser/ui/cocoa/tab_menu_bridge_unittest.mm
@@ -206,6 +206,23 @@ ExpectDynamicTabsInMenuAre({"Tab 5", "Tab 3", "Tab 2"}); } +// Tests that dynamic menu items added by the bridge are removed on +// bridge destruction. +TEST_F(TabMenuBridgeTest, RemoveDynamicMenuItemsOnDestruct) { + std::unique_ptr<TabMenuBridge> bridge = + std::make_unique<TabMenuBridge>(model(), menu_root()); + bridge->BuildMenu(); + + AddModelTabNamed("Tab 1"); + AddModelTabNamed("Tab 2"); + AddModelTabNamed("Tab 3"); + ExpectDynamicTabsInMenuAre({"Tab 1", "Tab 2", "Tab 3"}); + + bridge.reset(); + + ExpectDynamicTabsInMenuAre({}); +} + TEST_F(TabMenuBridgeTest, ClickingMenuActivatesTab) { TabMenuBridge bridge(model(), menu_root()); bridge.BuildMenu();
diff --git a/chrome/browser/ui/signin/dice_web_signin_interceptor_delegate.cc b/chrome/browser/ui/signin/dice_web_signin_interceptor_delegate.cc index abdad0f..9d81d01 100644 --- a/chrome/browser/ui/signin/dice_web_signin_interceptor_delegate.cc +++ b/chrome/browser/ui/signin/dice_web_signin_interceptor_delegate.cc
@@ -16,7 +16,6 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" #include "components/signin/public/base/signin_metrics.h" #include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/core_account_id.h"
diff --git a/chrome/browser/ui/signin_intercept_first_run_experience_dialog.cc b/chrome/browser/ui/signin_intercept_first_run_experience_dialog.cc index 8a59000d..a949a42c 100644 --- a/chrome/browser/ui/signin_intercept_first_run_experience_dialog.cc +++ b/chrome/browser/ui/signin_intercept_first_run_experience_dialog.cc
@@ -14,10 +14,10 @@ #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/chrome_pages.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" #include "chrome/browser/ui/webui/signin/login_ui_service.h" #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" #include "chrome/browser/ui/webui/signin/profile_customization_ui.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #include "chrome/common/webui_url_constants.h" #include "components/signin/public/base/signin_metrics.h" #include "content/public/browser/navigation_handle.h" @@ -26,25 +26,25 @@ #include "ui/base/page_transition_types.h" #include "url/gurl.h" -// Delegate class for DiceTurnSyncOnHelper. Determines what will be the next +// Delegate class for TurnSyncOnHelper. Determines what will be the next // step for the first run based on Sync availabitily. class SigninInterceptFirstRunExperienceDialog::InterceptTurnSyncOnHelperDelegate - : public DiceTurnSyncOnHelper::Delegate, + : public TurnSyncOnHelper::Delegate, public LoginUIService::Observer { public: explicit InterceptTurnSyncOnHelperDelegate( base::WeakPtr<SigninInterceptFirstRunExperienceDialog> dialog); ~InterceptTurnSyncOnHelperDelegate() override; - // DiceTurnSyncOnHelper::Delegate: + // TurnSyncOnHelper::Delegate: void ShowLoginError(const SigninUIError& error) override; void ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + TurnSyncOnHelper::SigninChoiceCallback callback) override; void ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + TurnSyncOnHelper::SigninChoiceCallback callback) override; void ShowSyncConfirmation( base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) override; @@ -90,7 +90,7 @@ InterceptTurnSyncOnHelperDelegate::ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { NOTREACHED() << "Sign-in intercept shouldn't create a profile for an " "account known to Chrome"; } @@ -98,12 +98,12 @@ void SigninInterceptFirstRunExperienceDialog:: InterceptTurnSyncOnHelperDelegate::ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { // This is a brand new profile. Skip the enterprise confirmation. // TODO(crbug.com/1282157): Do not show the sync promo if either // - PromotionalTabsEnabled policy is set to False, or // - the user went through the Profile Separation dialog. - std::move(callback).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); + std::move(callback).Run(TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); } void SigninInterceptFirstRunExperienceDialog:: @@ -260,14 +260,14 @@ } void SigninInterceptFirstRunExperienceDialog::DoTurnOnSync() { - // DiceTurnSyncOnHelper deletes itself once done. - new DiceTurnSyncOnHelper( + // TurnSyncOnHelper deletes itself once done. + new TurnSyncOnHelper( browser_->profile(), signin_metrics::AccessPoint:: ACCESS_POINT_SIGNIN_INTERCEPT_FIRST_RUN_EXPERIENCE, signin_metrics::PromoAction::PROMO_ACTION_NO_SIGNIN_PROMO, signin_metrics::Reason::kSigninPrimaryAccount, account_id_, - DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT, + TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT, std::make_unique<InterceptTurnSyncOnHelperDelegate>( weak_ptr_factory_.GetWeakPtr()), base::OnceClosure());
diff --git a/chrome/browser/ui/signin_intercept_first_run_experience_dialog_browsertest.cc b/chrome/browser/ui/signin_intercept_first_run_experience_dialog_browsertest.cc index 3dbbfae..a0d7619 100644 --- a/chrome/browser/ui/signin_intercept_first_run_experience_dialog_browsertest.cc +++ b/chrome/browser/ui/signin_intercept_first_run_experience_dialog_browsertest.cc
@@ -17,9 +17,9 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/user_education/feature_promo_controller.h" #include "chrome/browser/ui/views/profiles/avatar_toolbar_button.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" #include "chrome/browser/ui/webui/signin/login_ui_service.h" #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #include "chrome/test/base/in_process_browser_test.h" #include "components/feature_engagement/public/feature_constants.h" #include "components/feature_engagement/public/tracker.h" @@ -372,7 +372,7 @@ } // Closes the fre dialog before the sync confirmation is shown. Tests that -// `DiceTurnSyncOnHelper` is eventually destroyed. +// `TurnSyncOnHelper` is eventually destroyed. IN_PROC_BROWSER_TEST_F(SigninInterceptFirstRunExperienceDialogBrowserTest, CloseDialogBeforeSyncConfirmationIsShown) { // It's important to use an enterprise email here in order to block the sync @@ -389,12 +389,12 @@ controller()->CloseModalSignin(); EXPECT_FALSE(controller()->ShowsModalDialog()); - // `DiceTurnSyncOnHelper` should be destroyed after the sync engine is up and + // `TurnSyncOnHelper` should be destroyed after the sync engine is up and // running. sync_service()->SetTransportState( syncer::SyncService::TransportState::ACTIVE); sync_service()->FireStateChanged(); - EXPECT_FALSE(DiceTurnSyncOnHelper::HasCurrentDiceTurnSyncOnHelperForTesting( + EXPECT_FALSE(TurnSyncOnHelper::HasCurrentTurnSyncOnHelperForTesting( browser()->profile())); // Sync is aborted. ExpectPrimaryAccountWithExactConsentLevel(signin::ConsentLevel::kSignin);
diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc index 75c07e7..05a1f22 100644 --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc
@@ -21,7 +21,6 @@ #include "chrome/browser/buildflags.h" #include "chrome/browser/captive_portal/captive_portal_service_factory.h" #include "chrome/browser/chrome_content_browser_client.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/shopping_list/shopping_data_provider.h" #include "chrome/browser/complex_tasks/task_tab_helper.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" @@ -104,6 +103,7 @@ #include "components/blocked_content/popup_opener_tab_helper.h" #include "components/captive_portal/core/buildflags.h" #include "components/commerce/content/metrics/commerce_metrics_tab_helper.h" +#include "components/commerce/core/commerce_feature_list.h" #include "components/content_settings/browser/page_specific_content_settings.h" #include "components/dom_distiller/core/dom_distiller_features.h" #include "components/download/content/factory/navigation_monitor_factory.h"
diff --git a/chrome/browser/ui/views/autofill/payments/offer_notification_bubble_views_test_base.cc b/chrome/browser/ui/views/autofill/payments/offer_notification_bubble_views_test_base.cc index 8f52aab..3684bf7f 100644 --- a/chrome/browser/ui/views/autofill/payments/offer_notification_bubble_views_test_base.cc +++ b/chrome/browser/ui/views/autofill/payments/offer_notification_bubble_views_test_base.cc
@@ -6,7 +6,6 @@ #include "chrome/browser/autofill/autofill_uitest_util.h" #include "chrome/browser/autofill/personal_data_manager_factory.h" -#include "chrome/browser/commerce/commerce_feature_list.h" #include "chrome/browser/commerce/coupons/coupon_service.h" #include "chrome/browser/commerce/coupons/coupon_service_factory.h" #include "chrome/browser/ui/browser.h" @@ -18,6 +17,7 @@ #include "components/autofill/content/browser/content_autofill_driver.h" #include "components/autofill/core/common/autofill_clock.h" #include "components/autofill/core/common/autofill_payments_features.h" +#include "components/commerce/core/commerce_feature_list.h" namespace autofill {
diff --git a/chrome/browser/ui/views/autofill/payments/virtual_card_enroll_bubble_views.cc b/chrome/browser/ui/views/autofill/payments/virtual_card_enroll_bubble_views.cc index 15fa37aa..3a81036 100644 --- a/chrome/browser/ui/views/autofill/payments/virtual_card_enroll_bubble_views.cc +++ b/chrome/browser/ui/views/autofill/payments/virtual_card_enroll_bubble_views.cc
@@ -47,11 +47,12 @@ set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); - const LegalMessageLines message_lines = - controller_->GetVirtualCardEnrollmentFields()->legal_message_lines; - if (!message_lines.empty()) { + // TODO(crbug.com/1281695): Add issuer legal message as well to the footnote. + const LegalMessageLines google_legal_message = + controller_->GetVirtualCardEnrollmentFields()->google_legal_message; + if (!google_legal_message.empty()) { legal_message_view_ = SetFootnoteView(std::make_unique<LegalMessageView>( - message_lines, + google_legal_message, base::BindRepeating(&VirtualCardEnrollBubbleViews::LegalMessageClicked, base::Unretained(this)))); legal_message_view_->SetID(DialogViewId::FOOTNOTE_VIEW); @@ -128,7 +129,7 @@ description_view->SetBetweenChildSpacing( provider->GetDistanceMetric(views::DISTANCE_RELATED_BUTTON_HORIZONTAL)); - VirtualCardEnrollmentFields* virtual_card_enrollment_fields = + const VirtualCardEnrollmentFields* virtual_card_enrollment_fields = controller_->GetVirtualCardEnrollmentFields(); CreditCard* card = virtual_card_enrollment_fields->credit_card.get(); gfx::Image* card_image = virtual_card_enrollment_fields->card_art_image.get(); @@ -206,4 +207,4 @@ controller()->OnLinkClicked(url); } -} // namespace autofill \ No newline at end of file +} // namespace autofill
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.cc b/chrome/browser/ui/views/media_router/cast_dialog_view.cc index 828252c6..13cef21 100644 --- a/chrome/browser/ui/views/media_router/cast_dialog_view.cc +++ b/chrome/browser/ui/views/media_router/cast_dialog_view.cc
@@ -129,8 +129,6 @@ if (model.media_sinks().empty()) { scroll_position_ = 0; ShowNoSinksView(); - if (sources_button_) - sources_button_->SetEnabled(false); } else { if (scroll_view_) scroll_position_ = scroll_view_->GetVisibleRect().y(); @@ -139,10 +137,16 @@ PopulateScrollView(model.media_sinks()); RestoreSinkListState(); metrics_.OnSinksLoaded(base::Time::Now()); - if (sources_button_) - sources_button_->SetEnabled(true); DisableUnsupportedSinks(); } + + // If access code casting is enabled, the sources button needs to be enabled + // so that user can set the source before invoking the access code casting + // flow. + if (sources_button_) + sources_button_->SetEnabled(!model.media_sinks().empty() || + IsAccessCodeCastingEnabled()); + dialog_title_ = model.dialog_header(); MaybeSizeToContents(); // Update the main action button. @@ -281,9 +285,7 @@ } void CastDialogView::MaybeShowAccessCodeCastButton() { - if (!base::FeatureList::IsEnabled(features::kAccessCodeCastUI)) - return; - if (!GetAccessCodeCastEnabledPref(profile_->GetPrefs())) + if (!IsAccessCodeCastingEnabled()) return; auto callback = base::BindRepeating(&CastDialogView::ShowAccessCodeCastDialog, @@ -484,6 +486,11 @@ return false; } +bool CastDialogView::IsAccessCodeCastingEnabled() const { + return base::FeatureList::IsEnabled(features::kAccessCodeCastUI) && + GetAccessCodeCastEnabledPref(profile_->GetPrefs()); +} + // static CastDialogView* CastDialogView::instance_ = nullptr;
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.h b/chrome/browser/ui/views/media_router/cast_dialog_view.h index 58327dc8..26cb499 100644 --- a/chrome/browser/ui/views/media_router/cast_dialog_view.h +++ b/chrome/browser/ui/views/media_router/cast_dialog_view.h
@@ -199,6 +199,10 @@ // Returns true if there are active Cast and DIAL sinks. bool HasCastAndDialSinks() const; + // Returns true iff feature is turned on and the access code casting policy + // has been enabled for this user. + bool IsAccessCodeCastingEnabled() const; + // The singleton dialog instance. This is a nullptr when a dialog is not // shown. static CastDialogView* instance_;
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc b/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc index 72da955..51fc3c9b5 100644 --- a/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc +++ b/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc
@@ -339,4 +339,24 @@ EXPECT_TRUE(access_code_cast_button()); } +// This test demonstrates that when the access code casting feature is +// available to the user, that the sources button is available even if no +// sinks are available. +TEST_F(CastDialogViewTest, AccessCodeEmptySinksSourcesAvailable) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature(features::kAccessCodeCastUI); + profile_.GetPrefs()->SetBoolean(prefs::kAccessCodeCastEnabled, false); + + CastDialogModel model; + InitializeDialogWithModel(model); + + // With policy disabled, button is still disabled even with feature enabled. + EXPECT_FALSE(sources_button()->GetEnabled()); + + // But with policy enabled, button is now enabled even with no sinks. + profile_.GetPrefs()->SetBoolean(prefs::kAccessCodeCastEnabled, true); + dialog_->OnModelUpdated(model); + EXPECT_TRUE(sources_button()->GetEnabled()); +} + } // namespace media_router
diff --git a/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc b/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc index 5a3bfdb..d2c28d3 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc
@@ -23,9 +23,9 @@ #include "chrome/browser/ui/views/profiles/profile_customization_bubble_sync_controller.h" #include "chrome/browser/ui/views/profiles/profile_customization_bubble_view.h" #include "chrome/browser/ui/views/profiles/profile_picker_turn_sync_on_delegate.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" #include "chrome/browser/ui/webui/signin/signin_url_utils.h" #include "chrome/browser/ui/webui/signin/sync_confirmation_ui.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #include "chrome/common/pref_names.h" #include "chrome/common/webui_url_constants.h" #include "components/signin/public/identity_manager/account_info.h" @@ -143,7 +143,7 @@ // Do nothing if the sign-in flow is aborted or if this has already been // called. Note that this can get called first time from a special case // handling (such as the Settings link) and than second time when the - // DiceTurnSyncOnHelper finishes. + // TurnSyncOnHelper finishes. if (is_finished_) return; is_finished_ = true; @@ -233,7 +233,7 @@ weak_ptr_factory_.GetWeakPtr(), BrowserOpenedCallback()); // Stop with the sign-in navigation and show a spinner instead. The spinner - // will be shown until DiceTurnSyncOnHelper (below) figures out whether it's a + // will be shown until TurnSyncOnHelper (below) figures out whether it's a // managed account and whether sync is disabled by policies (which in some // cases involves fetching policies and can take a couple of seconds). // @@ -253,12 +253,12 @@ FROM_HERE, extended_account_info_timeout_closure_.callback(), extended_account_info_timeout_); - // DiceTurnSyncOnHelper deletes itself once done. - new DiceTurnSyncOnHelper( + // TurnSyncOnHelper deletes itself once done. + new TurnSyncOnHelper( profile_, signin_metrics::AccessPoint::ACCESS_POINT_USER_MANAGER, signin_metrics::PromoAction::PROMO_ACTION_NO_SIGNIN_PROMO, signin_metrics::Reason::kSigninPrimaryAccount, account_info.account_id, - DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT, + TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT, std::make_unique<ProfilePickerTurnSyncOnDelegate>( weak_ptr_factory_.GetWeakPtr(), profile_), std::move(sync_consent_completed_closure));
diff --git a/chrome/browser/ui/views/profiles/profile_picker_turn_sync_on_delegate.cc b/chrome/browser/ui/views/profiles/profile_picker_turn_sync_on_delegate.cc index b26cda1..9dc47745 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_turn_sync_on_delegate.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_turn_sync_on_delegate.cc
@@ -78,28 +78,28 @@ // Open the browser and when it's done, show the login error. if (controller_) { controller_->FinishAndOpenBrowser(base::BindOnce( - &DiceTurnSyncOnHelper::Delegate::ShowLoginErrorForBrowser, error)); + &TurnSyncOnHelper::Delegate::ShowLoginErrorForBrowser, error)); } } void ProfilePickerTurnSyncOnDelegate::ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { // A brand new profile cannot have a conflict in sync accounts. NOTREACHED(); } void ProfilePickerTurnSyncOnDelegate::ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { enterprise_account_ = true; // In this flow, the enterprise confirmation is replaced by an enterprise // welcome screen. Knowing if sync is enabled is needed for the screen. Thus, // it is delayed until either ShowSyncConfirmation() or // ShowSyncDisabledConfirmation() gets called. // Assume an implicit "Continue" here. - std::move(callback).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); + std::move(callback).Run(TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); return; } @@ -194,7 +194,7 @@ EnterpriseProfileWelcomeUI::ScreenType type, bool proceed) { if (!proceed) { - // The callback provided by DiceTurnSyncOnHelper must be called, UI_CLOSED + // The callback provided by TurnSyncOnHelper must be called, UI_CLOSED // makes sure the final callback does not get called. It does not matter // what happens to sync as the signed-in profile creation gets cancelled // right after.
diff --git a/chrome/browser/ui/views/profiles/profile_picker_turn_sync_on_delegate.h b/chrome/browser/ui/views/profiles/profile_picker_turn_sync_on_delegate.h index 1b083c1..edcf209 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_turn_sync_on_delegate.h +++ b/chrome/browser/ui/views/profiles/profile_picker_turn_sync_on_delegate.h
@@ -11,16 +11,16 @@ #include "chrome/browser/profiles/profile_metrics.h" #include "chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.h" #include "chrome/browser/ui/views/profiles/profile_picker_view.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" #include "chrome/browser/ui/webui/signin/enterprise_profile_welcome_ui.h" #include "chrome/browser/ui/webui/signin/login_ui_service.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" class Profile; class SigninUIError; // Handles turning on sync for signed-in profile creation flow, embedded in the // profile picker. -class ProfilePickerTurnSyncOnDelegate : public DiceTurnSyncOnHelper::Delegate, +class ProfilePickerTurnSyncOnDelegate : public TurnSyncOnHelper::Delegate, public LoginUIService::Observer { public: ProfilePickerTurnSyncOnDelegate( @@ -33,15 +33,15 @@ const ProfilePickerTurnSyncOnDelegate&) = delete; private: - // DiceTurnSyncOnHelper::Delegate: + // TurnSyncOnHelper::Delegate: void ShowLoginError(const SigninUIError& error) override; void ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + TurnSyncOnHelper::SigninChoiceCallback callback) override; void ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + TurnSyncOnHelper::SigninChoiceCallback callback) override; void ShowSyncConfirmation( base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) override;
diff --git a/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc b/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc index f00d200c..0acd06f 100644 --- a/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc +++ b/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc
@@ -671,6 +671,8 @@ base::test::ScopedFeatureList scoped_feature_list_; }; +// TODO(crbug/1288442): re-enable these tests +#if !BUILDFLAG(IS_CHROMEOS) // This test fixture will run the PRE_ test with the feature disabled, then the // main test with the feature enabled. If a FH app was installed when the // feature was disabled, then the feature becomes enabled, it should be @@ -742,5 +744,6 @@ EXPECT_EQ(0, added_count_); EXPECT_EQ(1, removed_count_); } +#endif // !BUILDFLAG(IS_CHROMEOS) } // namespace web_app
diff --git a/chrome/browser/ui/webui/access_code_cast/access_code_cast_handler.cc b/chrome/browser/ui/webui/access_code_cast/access_code_cast_handler.cc index 082dbe5e..6fafb38 100644 --- a/chrome/browser/ui/webui/access_code_cast/access_code_cast_handler.cc +++ b/chrome/browser/ui/webui/access_code_cast/access_code_cast_handler.cc
@@ -308,6 +308,19 @@ } } + // If there is already a route for this sink_id, then terminate the existing + // route before starting a new one. + auto routes = media_router_->GetCurrentRoutes(); + auto route_it = std::find_if(routes.begin(), routes.end(), + [this](const MediaRoute& route) { + return route.media_sink_id() == *sink_id_; + }); + const MediaRoute* current_route = + route_it == routes.end() ? nullptr : &*route_it; + if (current_route) { + media_router_->TerminateRoute(current_route->media_route_id()); + } + media_router_->CreateRoute( params->source_id, sink_id_.value(), params->origin, web_contents_, base::BindOnce(&AccessCodeCastHandler::OnRouteResponse,
diff --git a/chrome/browser/ui/webui/access_code_cast/access_code_cast_handler_unittest.cc b/chrome/browser/ui/webui/access_code_cast/access_code_cast_handler_unittest.cc index daa4b73..2a4882d8 100644 --- a/chrome/browser/ui/webui/access_code_cast/access_code_cast_handler_unittest.cc +++ b/chrome/browser/ui/webui/access_code_cast/access_code_cast_handler_unittest.cc
@@ -102,6 +102,9 @@ InitializeMockMediaRouter(); + cast_sink_1_ = CreateCastSink(1); + cast_sink_2_ = CreateCastSink(2); + CreateSessionServiceTabHelper(web_contents()); CreateHandler({MediaCastMode::DESKTOP_MIRROR}); @@ -163,15 +166,14 @@ CreateHandler(cast_modes); set_screen_capture_allowed_for_testing(true); - MediaSinkInternal cast_sink1 = CreateCastSink(1); for (MediaSinksObserver* sinks_observer : media_sinks_observers_) { - sinks_observer->OnSinksUpdated({cast_sink1.sink()}, + sinks_observer->OnSinksUpdated({cast_sink_1().sink()}, std::vector<url::Origin>()); } - handler()->set_sink_id_for_testing(cast_sink1.sink().id()); + handler()->set_sink_id_for_testing(cast_sink_1().sink().id()); EXPECT_CALL(*router(), - CreateRouteInternal(source.id(), cast_sink1.sink().id(), _, + CreateRouteInternal(source.id(), cast_sink_1().sink().id(), _, web_contents(), _, timeout, false)); handler()->CastToSink(mock_callback.Get()); @@ -184,18 +186,17 @@ CreateHandler({MediaCastMode::PRESENTATION, MediaCastMode::TAB_MIRROR}, std::move(start_presentation_context)); - MediaSinkInternal cast_sink1 = CreateCastSink(1); for (MediaSinksObserver* sinks_observer : media_sinks_observers_) { - sinks_observer->OnSinksUpdated({cast_sink1.sink()}, + sinks_observer->OnSinksUpdated({cast_sink_1().sink()}, {request.frame_origin}); } - handler()->set_sink_id_for_testing(cast_sink1.sink().id()); + handler()->set_sink_id_for_testing(cast_sink_1().sink().id()); auto source = MediaSource::ForPresentationUrl(*(request.presentation_urls.begin())); EXPECT_CALL(*router(), - CreateRouteInternal(source.id(), cast_sink1.sink().id(), + CreateRouteInternal(source.id(), cast_sink_1().sink().id(), request.frame_origin, web_contents(), _, base::Seconds(20), false)); handler()->CastToSink(mock_callback.Get()); @@ -211,6 +212,9 @@ presentation_request, std::move(success_cb), std::move(error_cb)); } + const MediaSinkInternal& cast_sink_1() { return cast_sink_1_; } + const MediaSinkInternal& cast_sink_2() { return cast_sink_2_; } + private: void InitializeMockMediaRouter() { router_ = static_cast<MockMediaRouter*>( @@ -236,6 +240,10 @@ media_sinks_observers_.erase(it); } }); + + ON_CALL(*router_, GetCurrentRoutes()) + .WillByDefault(Return(std::vector<MediaRoute>())); + // Handler so MockMediaRouter will respond to requests to create a route. // Will construct a RouteRequestResult based on the set result code and // then call the handler's callback, which should call the page's callback. @@ -294,6 +302,8 @@ std::vector<MediaSinksObserver*> media_sinks_observers_; RouteRequestResult::ResultCode result_code_ = RouteRequestResult::ResultCode::OK; + MediaSinkInternal cast_sink_1_; + MediaSinkInternal cast_sink_2_; }; TEST_F(AccessCodeCastHandlerTest, DiscoveryDeviceMissingWithOk) { @@ -319,12 +329,11 @@ handler()->OnAccessCodeValidated(discovery_device_proto, AddSinkResultCode::OK); - MediaSinkInternal cast_sink1 = CreateCastSink(1); - handler()->HandleSinkPresentInMediaRouter(cast_sink1, true); + handler()->HandleSinkPresentInMediaRouter(cast_sink_1(), true); // Validate that the sink id of the discovered device is stored for later // casting. - EXPECT_EQ(cast_sink1.sink().id(), handler()->sink_id_); + EXPECT_EQ(cast_sink_1().sink().id(), handler()->sink_id_); } TEST_F(AccessCodeCastHandlerTest, InvalidDiscoveryDevice) { @@ -360,11 +369,10 @@ EXPECT_CALL(mock_callback, Run(AddSinkResultCode::OK)); handler()->SetSinkCallbackForTesting(mock_callback.Get()); - MediaSinkInternal cast_sink1 = CreateCastSink(1); - MediaSinkWithCastModes sink_with_cast_modes(cast_sink1.sink()); + MediaSinkWithCastModes sink_with_cast_modes(cast_sink_1().sink()); sink_with_cast_modes.cast_modes = {MediaCastMode::DESKTOP_MIRROR}; - handler()->set_sink_id_for_testing(cast_sink1.sink().id()); + handler()->set_sink_id_for_testing(cast_sink_1().sink().id()); handler()->OnResultsUpdated({sink_with_cast_modes}); } @@ -375,11 +383,9 @@ EXPECT_CALL(mock_callback, Run(_)).Times(Exactly(0)); handler()->SetSinkCallbackForTesting(mock_callback.Get()); - MediaSinkInternal cast_sink1 = CreateCastSink(1); - handler()->set_sink_id_for_testing(cast_sink1.sink().id()); + handler()->set_sink_id_for_testing(cast_sink_1().sink().id()); - MediaSinkInternal cast_sink2 = CreateCastSink(2); - MediaSinkWithCastModes sink_with_cast_modes(cast_sink2.sink()); + MediaSinkWithCastModes sink_with_cast_modes(cast_sink_2().sink()); sink_with_cast_modes.cast_modes = {MediaCastMode::DESKTOP_MIRROR}; handler()->OnResultsUpdated({sink_with_cast_modes}); @@ -478,4 +484,42 @@ mock_callback); } +// Starting a casting session on a sink that has an existing route will cause +// the current route to be terminate before the new route is created. +TEST_F(AccessCodeCastHandlerTest, TerminateExistingRoute) { + MediaSource existing_source = MediaSource::ForTab( + sessions::SessionTabHelper::IdForTab(web_contents()).id()); + MediaRoute::Id route_id = MediaRoute::GetMediaRouteId( + "presentation", cast_sink_1().id(), existing_source); + MediaRoute existing_route(route_id, existing_source, cast_sink_1().id(), + "TerminateExistingRoute", false); + EXPECT_CALL(*router(), GetCurrentRoutes()) + .WillOnce(Return(std::vector<MediaRoute>{existing_route})); + EXPECT_CALL(*router(), TerminateRoute(route_id)); + + set_expected_cast_result(RouteRequestResult::ResultCode::OK); + MockCastToSinkCallback mock_callback; + EXPECT_CALL(mock_callback, Run(RouteRequestResultCode::OK)); + StartDesktopMirroring(MediaSource::ForUnchosenDesktop(), mock_callback); +} + +// Starting a casting session when there are routes that exist for other sinks. +// Demonstrate that those routes aren't terminated. +TEST_F(AccessCodeCastHandlerTest, IgnoreOtherRoutes) { + MediaSource existing_source = MediaSource::ForTab( + sessions::SessionTabHelper::IdForTab(web_contents()).id()); + MediaRoute::Id route_id = MediaRoute::GetMediaRouteId( + "presentation", cast_sink_2().id(), existing_source); + MediaRoute existing_route(route_id, existing_source, cast_sink_2().id(), + "TerminateExistingRoute", false); + EXPECT_CALL(*router(), GetCurrentRoutes()) + .WillOnce(Return(std::vector<MediaRoute>{existing_route})); + EXPECT_CALL(*router(), TerminateRoute(_)).Times(0); + + set_expected_cast_result(RouteRequestResult::ResultCode::OK); + MockCastToSinkCallback mock_callback; + EXPECT_CALL(mock_callback, Run(RouteRequestResultCode::OK)); + StartDesktopMirroring(MediaSource::ForUnchosenDesktop(), mock_callback); +} + } // namespace media_router
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc index 48cd0950..f0365380 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
@@ -52,13 +52,13 @@ #include "chrome/browser/ui/tab_modal_confirm_dialog.h" #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h" #include "chrome/browser/ui/webui/signin/login_ui_service.h" #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" #include "chrome/browser/ui/webui/signin/signin_ui_error.h" #include "chrome/browser/ui/webui/signin/signin_utils.h" #include "chrome/browser/ui/webui/signin/signin_utils_desktop.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "chrome/grit/chromium_strings.h" @@ -113,13 +113,13 @@ } } -// Specific implementation of DiceTurnSyncOnHelper::Delegate for forced +// Specific implementation of TurnSyncOnHelper::Delegate for forced // signin flows. Some confirmation prompts are skipped. -class ForcedSigninDiceTurnSyncOnHelperDelegate - : public DiceTurnSyncOnHelperDelegateImpl { +class ForcedSigninTurnSyncOnHelperDelegate + : public TurnSyncOnHelperDelegateImpl { public: - explicit ForcedSigninDiceTurnSyncOnHelperDelegate(Browser* browser) - : DiceTurnSyncOnHelperDelegateImpl(browser) {} + explicit ForcedSigninTurnSyncOnHelperDelegate(Browser* browser) + : TurnSyncOnHelperDelegateImpl(browser) {} protected: void ShouldEnterpriseConfirmationPromptForNewProfile( @@ -132,7 +132,7 @@ void ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override { + TurnSyncOnHelper::SigninChoiceCallback callback) override { NOTREACHED(); } }; @@ -455,15 +455,14 @@ signin_metrics::SourceForRefreshTokenOperation:: kInlineLoginHandler_Signin); - std::unique_ptr<DiceTurnSyncOnHelper::Delegate> delegate = - std::make_unique<ForcedSigninDiceTurnSyncOnHelperDelegate>(browser); + std::unique_ptr<TurnSyncOnHelper::Delegate> delegate = + std::make_unique<ForcedSigninTurnSyncOnHelperDelegate>(browser); - new DiceTurnSyncOnHelper( + new TurnSyncOnHelper( profile_, signin::GetAccessPointForEmbeddedPromoURL(current_url_), signin_metrics::PromoAction::PROMO_ACTION_NO_SIGNIN_PROMO, signin::GetSigninReasonForEmbeddedPromoURL(current_url_), account_id, - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT, - std::move(delegate), + TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT, std::move(delegate), base::BindOnce(&OnSigninComplete, profile_, email_, password_, is_force_sign_in_with_usermanager_)); }
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper.cc similarity index 80% rename from chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc rename to chrome/browser/ui/webui/signin/turn_sync_on_helper.cc index 9269150..022a8d9 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #include <utility> @@ -56,49 +56,46 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) #include "chrome/browser/signin/dice_signed_in_profile_creator.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.h" #endif namespace { -const void* const kCurrentDiceTurnSyncOnHelperKey = - &kCurrentDiceTurnSyncOnHelperKey; +const void* const kCurrentTurnSyncOnHelperKey = &kCurrentTurnSyncOnHelperKey; bool g_show_sync_enabled_ui_for_testing_ = false; // A helper class to watch profile lifetime. -class DiceTurnSyncOnHelperShutdownNotifierFactory +class TurnSyncOnHelperShutdownNotifierFactory : public BrowserContextKeyedServiceShutdownNotifierFactory { public: - DiceTurnSyncOnHelperShutdownNotifierFactory( - const DiceTurnSyncOnHelperShutdownNotifierFactory&) = delete; - DiceTurnSyncOnHelperShutdownNotifierFactory& operator=( - const DiceTurnSyncOnHelperShutdownNotifierFactory&) = delete; + TurnSyncOnHelperShutdownNotifierFactory( + const TurnSyncOnHelperShutdownNotifierFactory&) = delete; + TurnSyncOnHelperShutdownNotifierFactory& operator=( + const TurnSyncOnHelperShutdownNotifierFactory&) = delete; - static DiceTurnSyncOnHelperShutdownNotifierFactory* GetInstance() { - static base::NoDestructor<DiceTurnSyncOnHelperShutdownNotifierFactory> - factory; + static TurnSyncOnHelperShutdownNotifierFactory* GetInstance() { + static base::NoDestructor<TurnSyncOnHelperShutdownNotifierFactory> factory; return factory.get(); } private: - friend class base::NoDestructor<DiceTurnSyncOnHelperShutdownNotifierFactory>; + friend class base::NoDestructor<TurnSyncOnHelperShutdownNotifierFactory>; - DiceTurnSyncOnHelperShutdownNotifierFactory() + TurnSyncOnHelperShutdownNotifierFactory() : BrowserContextKeyedServiceShutdownNotifierFactory( - "DiceTurnSyncOnHelperShutdownNotifier") { + "TurnSyncOnHelperShutdownNotifier") { DependsOn(IdentityManagerFactory::GetInstance()); DependsOn(SyncServiceFactory::GetInstance()); DependsOn(UnifiedConsentServiceFactory::GetInstance()); DependsOn(policy::UserPolicySigninServiceFactory::GetInstance()); } - ~DiceTurnSyncOnHelperShutdownNotifierFactory() override {} + ~TurnSyncOnHelperShutdownNotifierFactory() override {} }; // User input handler for the signin confirmation dialog. class SigninDialogDelegate : public ui::ProfileSigninConfirmationDelegate { public: - explicit SigninDialogDelegate( - DiceTurnSyncOnHelper::SigninChoiceCallback callback) + explicit SigninDialogDelegate(TurnSyncOnHelper::SigninChoiceCallback callback) : callback_(std::move(callback)) { DCHECK(callback_); } @@ -108,66 +105,64 @@ void OnCancelSignin() override { DCHECK(callback_); - std::move(callback_).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_CANCEL); + std::move(callback_).Run(TurnSyncOnHelper::SIGNIN_CHOICE_CANCEL); } void OnContinueSignin() override { DCHECK(callback_); - std::move(callback_).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); + std::move(callback_).Run(TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); } void OnSigninWithNewProfile() override { DCHECK(callback_); - std::move(callback_).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE); + std::move(callback_).Run(TurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE); } private: - DiceTurnSyncOnHelper::SigninChoiceCallback callback_; + TurnSyncOnHelper::SigninChoiceCallback callback_; }; -struct CurrentDiceTurnSyncOnHelperUserData - : public base::SupportsUserData::Data { - DiceTurnSyncOnHelper* current_helper = nullptr; +struct CurrentTurnSyncOnHelperUserData : public base::SupportsUserData::Data { + TurnSyncOnHelper* current_helper = nullptr; }; -DiceTurnSyncOnHelper* GetCurrentDiceTurnSyncOnHelper(Profile* profile) { +TurnSyncOnHelper* GetCurrentTurnSyncOnHelper(Profile* profile) { base::SupportsUserData::Data* data = - profile->GetUserData(kCurrentDiceTurnSyncOnHelperKey); + profile->GetUserData(kCurrentTurnSyncOnHelperKey); if (!data) return nullptr; - CurrentDiceTurnSyncOnHelperUserData* wrapper = - static_cast<CurrentDiceTurnSyncOnHelperUserData*>(data); - DiceTurnSyncOnHelper* helper = wrapper->current_helper; + CurrentTurnSyncOnHelperUserData* wrapper = + static_cast<CurrentTurnSyncOnHelperUserData*>(data); + TurnSyncOnHelper* helper = wrapper->current_helper; DCHECK(helper); return helper; } -void SetCurrentDiceTurnSyncOnHelper(Profile* profile, - DiceTurnSyncOnHelper* helper) { +void SetCurrentTurnSyncOnHelper(Profile* profile, TurnSyncOnHelper* helper) { if (!helper) { - DCHECK(profile->GetUserData(kCurrentDiceTurnSyncOnHelperKey)); - profile->RemoveUserData(kCurrentDiceTurnSyncOnHelperKey); + DCHECK(profile->GetUserData(kCurrentTurnSyncOnHelperKey)); + profile->RemoveUserData(kCurrentTurnSyncOnHelperKey); return; } - DCHECK(!profile->GetUserData(kCurrentDiceTurnSyncOnHelperKey)); - std::unique_ptr<CurrentDiceTurnSyncOnHelperUserData> wrapper = - std::make_unique<CurrentDiceTurnSyncOnHelperUserData>(); + DCHECK(!profile->GetUserData(kCurrentTurnSyncOnHelperKey)); + std::unique_ptr<CurrentTurnSyncOnHelperUserData> wrapper = + std::make_unique<CurrentTurnSyncOnHelperUserData>(); wrapper->current_helper = helper; - profile->SetUserData(kCurrentDiceTurnSyncOnHelperKey, std::move(wrapper)); + profile->SetUserData(kCurrentTurnSyncOnHelperKey, std::move(wrapper)); } } // namespace // static -void DiceTurnSyncOnHelper::Delegate::ShowLoginErrorForBrowser( +void TurnSyncOnHelper::Delegate::ShowLoginErrorForBrowser( const SigninUIError& error, Browser* browser) { LoginUIServiceFactory::GetForProfile(browser->profile()) ->DisplayLoginResult(browser, error); } -DiceTurnSyncOnHelper::DiceTurnSyncOnHelper( +TurnSyncOnHelper::TurnSyncOnHelper( Profile* profile, signin_metrics::AccessPoint signin_access_point, signin_metrics::PromoAction signin_promo_action, @@ -187,9 +182,9 @@ identity_manager_->FindExtendedAccountInfoByAccountId(account_id)), scoped_callback_runner_(std::move(callback)), shutdown_subscription_( - DiceTurnSyncOnHelperShutdownNotifierFactory::GetInstance() + TurnSyncOnHelperShutdownNotifierFactory::GetInstance() ->Get(profile) - ->Subscribe(base::BindOnce(&DiceTurnSyncOnHelper::AbortAndDelete, + ->Subscribe(base::BindOnce(&TurnSyncOnHelper::AbortAndDelete, base::Unretained(this)))) { DCHECK(delegate_); DCHECK(profile_); @@ -211,7 +206,7 @@ if (HasCanOfferSigninError()) { // Do not self-destruct synchronously in the constructor. base::SequencedTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&DiceTurnSyncOnHelper::AbortAndDelete, + FROM_HERE, base::BindOnce(&TurnSyncOnHelper::AbortAndDelete, weak_pointer_factory_.GetWeakPtr())); return; } @@ -229,12 +224,12 @@ profile_->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername); delegate_->ShowMergeSyncDataConfirmation( last_email, account_info_.email, - base::BindOnce(&DiceTurnSyncOnHelper::OnMergeAccountConfirmation, + base::BindOnce(&TurnSyncOnHelper::OnMergeAccountConfirmation, weak_pointer_factory_.GetWeakPtr())); } #if BUILDFLAG(ENABLE_DICE_SUPPORT) -DiceTurnSyncOnHelper::DiceTurnSyncOnHelper( +TurnSyncOnHelper::TurnSyncOnHelper( Profile* profile, Browser* browser, signin_metrics::AccessPoint signin_access_point, @@ -242,23 +237,22 @@ signin_metrics::Reason signin_reason, const CoreAccountId& account_id, SigninAbortedMode signin_aborted_mode) - : DiceTurnSyncOnHelper( - profile, - signin_access_point, - signin_promo_action, - signin_reason, - account_id, - signin_aborted_mode, - std::make_unique<DiceTurnSyncOnHelperDelegateImpl>(browser), - base::OnceClosure()) {} + : TurnSyncOnHelper(profile, + signin_access_point, + signin_promo_action, + signin_reason, + account_id, + signin_aborted_mode, + std::make_unique<TurnSyncOnHelperDelegateImpl>(browser), + base::OnceClosure()) {} #endif -DiceTurnSyncOnHelper::~DiceTurnSyncOnHelper() { - DCHECK_EQ(this, GetCurrentDiceTurnSyncOnHelper(profile_)); - SetCurrentDiceTurnSyncOnHelper(profile_, nullptr); +TurnSyncOnHelper::~TurnSyncOnHelper() { + DCHECK_EQ(this, GetCurrentTurnSyncOnHelper(profile_)); + SetCurrentTurnSyncOnHelper(profile_, nullptr); } -bool DiceTurnSyncOnHelper::HasCanOfferSigninError() { +bool TurnSyncOnHelper::HasCanOfferSigninError() { SigninUIError can_offer_error = CanOfferSignin(profile_, account_info_.gaia, account_info_.email); if (can_offer_error.IsOk()) @@ -269,7 +263,7 @@ return true; } -void DiceTurnSyncOnHelper::OnMergeAccountConfirmation(SigninChoice choice) { +void TurnSyncOnHelper::OnMergeAccountConfirmation(SigninChoice choice) { switch (choice) { case SIGNIN_CHOICE_NEW_PROFILE: base::RecordAction( @@ -293,8 +287,7 @@ } } -void DiceTurnSyncOnHelper::OnEnterpriseAccountConfirmation( - SigninChoice choice) { +void TurnSyncOnHelper::OnEnterpriseAccountConfirmation(SigninChoice choice) { enterprise_account_confirmed_ = choice == SIGNIN_CHOICE_CONTINUE || choice == SIGNIN_CHOICE_NEW_PROFILE; signin_util::RecordEnterpriseProfileCreationUserChoice( @@ -323,7 +316,7 @@ } } -void DiceTurnSyncOnHelper::TurnSyncOnWithProfileMode(ProfileMode profile_mode) { +void TurnSyncOnHelper::TurnSyncOnWithProfileMode(ProfileMode profile_mode) { switch (profile_mode) { case ProfileMode::CURRENT_PROFILE: { // If this is a new signin (no account authenticated yet) try loading @@ -333,7 +326,7 @@ policy::UserPolicySigninServiceFactory::GetForProfile(profile_); policy_service->RegisterForPolicyWithAccountId( account_info_.email, account_info_.account_id, - base::BindOnce(&DiceTurnSyncOnHelper::OnRegisteredForPolicy, + base::BindOnce(&TurnSyncOnHelper::OnRegisteredForPolicy, weak_pointer_factory_.GetWeakPtr())); break; } @@ -348,8 +341,8 @@ } } -void DiceTurnSyncOnHelper::OnRegisteredForPolicy(const std::string& dm_token, - const std::string& client_id) { +void TurnSyncOnHelper::OnRegisteredForPolicy(const std::string& dm_token, + const std::string& client_id) { // If there's no token for the user (policy registration did not succeed) just // finish signing in. if (dm_token.empty()) { @@ -369,7 +362,7 @@ // Allow user to create a new profile before continuing with sign-in. delegate_->ShowEnterpriseAccountConfirmation( account_info_, - base::BindOnce(&DiceTurnSyncOnHelper::OnEnterpriseAccountConfirmation, + base::BindOnce(&TurnSyncOnHelper::OnEnterpriseAccountConfirmation, weak_pointer_factory_.GetWeakPtr())); return; } @@ -378,7 +371,7 @@ LoadPolicyWithCachedCredentials(); } -void DiceTurnSyncOnHelper::LoadPolicyWithCachedCredentials() { +void TurnSyncOnHelper::LoadPolicyWithCachedCredentials() { DCHECK(!dm_token_.empty()); DCHECK(!client_id_.empty()); policy::UserPolicySigninService* policy_service = @@ -387,11 +380,11 @@ AccountIdFromAccountInfo(account_info_), dm_token_, client_id_, profile_->GetDefaultStoragePartition() ->GetURLLoaderFactoryForBrowserProcess(), - base::BindOnce(&DiceTurnSyncOnHelper::OnPolicyFetchComplete, + base::BindOnce(&TurnSyncOnHelper::OnPolicyFetchComplete, weak_pointer_factory_.GetWeakPtr())); } -void DiceTurnSyncOnHelper::OnPolicyFetchComplete(bool success) { +void TurnSyncOnHelper::OnPolicyFetchComplete(bool success) { // For now, we allow signin to complete even if the policy fetch fails. If // we ever want to change this behavior, we could call // PrimaryAccountMutator::ClearPrimaryAccount() here instead. @@ -407,7 +400,7 @@ SigninAndShowSyncConfirmationUI(); } -void DiceTurnSyncOnHelper::OnProviderUpdatePropagated( +void TurnSyncOnHelper::OnProviderUpdatePropagated( policy::ConfigurationPolicyProvider* provider) { if (provider != profile_->GetUserCloudPolicyManager()) return; @@ -421,7 +414,7 @@ ->RemoveProviderUpdateObserver(this); } -void DiceTurnSyncOnHelper::CreateNewSignedInProfile() { +void TurnSyncOnHelper::CreateNewSignedInProfile() { #if BUILDFLAG(ENABLE_DICE_SUPPORT) DCHECK(!dice_signed_in_profile_creator_); // Unretained is fine because the profile creator is owned by this. @@ -430,20 +423,20 @@ profile_, account_info_.account_id, /*local_profile_name=*/std::u16string(), /*icon_index=*/absl::nullopt, /*use_guest=*/false, - base::BindOnce(&DiceTurnSyncOnHelper::OnNewSignedInProfileCreated, + base::BindOnce(&TurnSyncOnHelper::OnNewSignedInProfileCreated, base::Unretained(this))); #else NOTIMPLEMENTED() << "Creating profiles is not yet supported on lacros."; #endif } -syncer::SyncService* DiceTurnSyncOnHelper::GetSyncService() { +syncer::SyncService* TurnSyncOnHelper::GetSyncService() { return SyncServiceFactory::IsSyncAllowed(profile_) ? SyncServiceFactory::GetForProfile(profile_) : nullptr; } -void DiceTurnSyncOnHelper::OnNewSignedInProfileCreated(Profile* new_profile) { +void TurnSyncOnHelper::OnNewSignedInProfileCreated(Profile* new_profile) { #if BUILDFLAG(ENABLE_DICE_SUPPORT) DCHECK(dice_signed_in_profile_creator_); dice_signed_in_profile_creator_.reset(); @@ -474,7 +467,7 @@ #endif } -void DiceTurnSyncOnHelper::SigninAndShowSyncConfirmationUI() { +void TurnSyncOnHelper::SigninAndShowSyncConfirmationUI() { // Signin. auto* primary_account_mutator = identity_manager_->GetPrimaryAccountMutator(); primary_account_mutator->SetPrimaryAccount(account_info_.account_id, @@ -538,34 +531,33 @@ ShowSyncConfirmationUI(); } -void DiceTurnSyncOnHelper::SyncStartupCompleted() { +void TurnSyncOnHelper::SyncStartupCompleted() { DCHECK(sync_startup_tracker_); sync_startup_tracker_.reset(); ShowSyncConfirmationUI(); } -void DiceTurnSyncOnHelper::SyncStartupFailed() { +void TurnSyncOnHelper::SyncStartupFailed() { DCHECK(sync_startup_tracker_); sync_startup_tracker_.reset(); ShowSyncConfirmationUI(); } // static -void DiceTurnSyncOnHelper::SetShowSyncEnabledUiForTesting( +void TurnSyncOnHelper::SetShowSyncEnabledUiForTesting( bool show_sync_enabled_ui_for_testing) { g_show_sync_enabled_ui_for_testing_ = show_sync_enabled_ui_for_testing; } // static -bool DiceTurnSyncOnHelper::HasCurrentDiceTurnSyncOnHelperForTesting( - Profile* profile) { - return !!GetCurrentDiceTurnSyncOnHelper(profile); +bool TurnSyncOnHelper::HasCurrentTurnSyncOnHelperForTesting(Profile* profile) { + return !!GetCurrentTurnSyncOnHelper(profile); } -void DiceTurnSyncOnHelper::ShowSyncConfirmationUI() { +void TurnSyncOnHelper::ShowSyncConfirmationUI() { if (g_show_sync_enabled_ui_for_testing_ || GetSyncService()) { delegate_->ShowSyncConfirmation( - base::BindOnce(&DiceTurnSyncOnHelper::FinishSyncSetupAndDelete, + base::BindOnce(&TurnSyncOnHelper::FinishSyncSetupAndDelete, weak_pointer_factory_.GetWeakPtr())); } else { // The sync disabled dialog has an explicit "sign-out" label for the @@ -579,12 +571,12 @@ account_info_.email); delegate_->ShowSyncDisabledConfirmation( is_managed_account, - base::BindOnce(&DiceTurnSyncOnHelper::FinishSyncSetupAndDelete, + base::BindOnce(&TurnSyncOnHelper::FinishSyncSetupAndDelete, weak_pointer_factory_.GetWeakPtr())); } } -void DiceTurnSyncOnHelper::FinishSyncSetupAndDelete( +void TurnSyncOnHelper::FinishSyncSetupAndDelete( LoginUIService::SyncConfirmationUIClosedResult result) { unified_consent::UnifiedConsentService* consent_service = UnifiedConsentServiceFactory::GetForProfile(profile_); @@ -640,29 +632,28 @@ delete this; } -void DiceTurnSyncOnHelper::SwitchToProfile(Profile* new_profile) { +void TurnSyncOnHelper::SwitchToProfile(Profile* new_profile) { DCHECK(!sync_blocker_); DCHECK(!sync_startup_tracker_); policy::UserPolicySigninServiceFactory::GetForProfile(profile_) ->ShutdownUserCloudPolicyManager(); - SetCurrentDiceTurnSyncOnHelper(profile_, nullptr); // Detach from old profile + SetCurrentTurnSyncOnHelper(profile_, nullptr); // Detach from old profile profile_ = new_profile; AttachToProfile(); identity_manager_ = IdentityManagerFactory::GetForProfile(profile_); shutdown_subscription_ = - DiceTurnSyncOnHelperShutdownNotifierFactory::GetInstance() + TurnSyncOnHelperShutdownNotifierFactory::GetInstance() ->Get(profile_) - ->Subscribe(base::BindOnce(&DiceTurnSyncOnHelper::AbortAndDelete, + ->Subscribe(base::BindOnce(&TurnSyncOnHelper::AbortAndDelete, base::Unretained(this))); delegate_->SwitchToProfile(new_profile); } -void DiceTurnSyncOnHelper::AttachToProfile() { +void TurnSyncOnHelper::AttachToProfile() { // Delete any current helper. - DiceTurnSyncOnHelper* current_helper = - GetCurrentDiceTurnSyncOnHelper(profile_); + TurnSyncOnHelper* current_helper = GetCurrentTurnSyncOnHelper(profile_); if (current_helper) { // If the existing flow was using the same account, keep the account. if (current_helper->account_info_.account_id == account_info_.account_id) @@ -671,13 +662,13 @@ ->ShutdownUserCloudPolicyManager(); current_helper->AbortAndDelete(); } - DCHECK(!GetCurrentDiceTurnSyncOnHelper(profile_)); + DCHECK(!GetCurrentTurnSyncOnHelper(profile_)); // Set this as the current helper. - SetCurrentDiceTurnSyncOnHelper(profile_, this); + SetCurrentTurnSyncOnHelper(profile_, this); } -void DiceTurnSyncOnHelper::AbortAndDelete() { +void TurnSyncOnHelper::AbortAndDelete() { #if BUILDFLAG(ENABLE_DICE_SUPPORT) if (signin_aborted_mode_ == SigninAbortedMode::REMOVE_ACCOUNT) { policy::UserPolicySigninServiceFactory::GetForProfile(profile_) @@ -688,7 +679,7 @@ accounts_mutator->RemoveAccount( account_info_.account_id, signin_metrics::SourceForRefreshTokenOperation:: - kDiceTurnOnSyncHelper_Abort); + kTurnOnSyncHelper_Abort); } #else // TODO(https://crbug.com/1260291): Implement on Lacros.
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h b/chrome/browser/ui/webui/signin/turn_sync_on_helper.h similarity index 83% rename from chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h rename to chrome/browser/ui/webui/signin/turn_sync_on_helper.h index cacada0..d862fa8 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_WEBUI_SIGNIN_DICE_TURN_SYNC_ON_HELPER_H_ -#define CHROME_BROWSER_UI_WEBUI_SIGNIN_DICE_TURN_SYNC_ON_HELPER_H_ +#ifndef CHROME_BROWSER_UI_WEBUI_SIGNIN_TURN_SYNC_ON_HELPER_H_ +#define CHROME_BROWSER_UI_WEBUI_SIGNIN_TURN_SYNC_ON_HELPER_H_ #include <memory> #include <string> @@ -39,15 +39,12 @@ namespace syncer { class SyncService; class SyncSetupInProgressHandle; -} +} // namespace syncer // Handles details of setting the primary account with IdentityManager and // turning on sync for an account for which there is already a refresh token. -// TODO(crbug.com/1248047): Rename this to TurnSyncOnHelper to reflect this can -// also be used with mirror. -class DiceTurnSyncOnHelper - : public SyncStartupTracker::Observer, - public policy::PolicyService::ProviderUpdateObserver { +class TurnSyncOnHelper : public SyncStartupTracker::Observer, + public policy::PolicyService::ProviderUpdateObserver { public: // Behavior when the signin is aborted (by an error or cancelled by the user). // The mode has no effect on the sync-is-disabled flow where cancelling always @@ -138,28 +135,28 @@ // in the token service. // |callback| is called at the end of the flow (i.e. after the user closes the // sync confirmation dialog). - DiceTurnSyncOnHelper(Profile* profile, - signin_metrics::AccessPoint signin_access_point, - signin_metrics::PromoAction signin_promo_action, - signin_metrics::Reason signin_reason, - const CoreAccountId& account_id, - SigninAbortedMode signin_aborted_mode, - std::unique_ptr<Delegate> delegate, - base::OnceClosure callback); + TurnSyncOnHelper(Profile* profile, + signin_metrics::AccessPoint signin_access_point, + signin_metrics::PromoAction signin_promo_action, + signin_metrics::Reason signin_reason, + const CoreAccountId& account_id, + SigninAbortedMode signin_aborted_mode, + std::unique_ptr<Delegate> delegate, + base::OnceClosure callback); #if BUILDFLAG(ENABLE_DICE_SUPPORT) // Convenience constructor using the default delegate and empty callback. - DiceTurnSyncOnHelper(Profile* profile, - Browser* browser, - signin_metrics::AccessPoint signin_access_point, - signin_metrics::PromoAction signin_promo_action, - signin_metrics::Reason signin_reason, - const CoreAccountId& account_id, - SigninAbortedMode signin_aborted_mode); + TurnSyncOnHelper(Profile* profile, + Browser* browser, + signin_metrics::AccessPoint signin_access_point, + signin_metrics::PromoAction signin_promo_action, + signin_metrics::Reason signin_reason, + const CoreAccountId& account_id, + SigninAbortedMode signin_aborted_mode); #endif - DiceTurnSyncOnHelper(const DiceTurnSyncOnHelper&) = delete; - DiceTurnSyncOnHelper& operator=(const DiceTurnSyncOnHelper&) = delete; + TurnSyncOnHelper(const TurnSyncOnHelper&) = delete; + TurnSyncOnHelper& operator=(const TurnSyncOnHelper&) = delete; // SyncStartupTracker::Observer: void SyncStartupCompleted() override; @@ -169,11 +166,11 @@ static void SetShowSyncEnabledUiForTesting( bool show_sync_enabled_ui_for_testing); - // Returns true if a `DiceTurnSyncOnHelper` is currently active for `profile`. - static bool HasCurrentDiceTurnSyncOnHelperForTesting(Profile* profile); + // Returns true if a `TurnSyncOnHelper` is currently active for `profile`. + static bool HasCurrentTurnSyncOnHelperForTesting(Profile* profile); private: - friend class base::DeleteHelper<DiceTurnSyncOnHelper>; + friend class base::DeleteHelper<TurnSyncOnHelper>; enum class ProfileMode { // Attempts to sign the user in |profile_|. Note that if the account to be @@ -186,8 +183,8 @@ NEW_PROFILE }; - // DiceTurnSyncOnHelper deletes itself. - ~DiceTurnSyncOnHelper() override; + // TurnSyncOnHelper deletes itself. + ~TurnSyncOnHelper() override; // Handles can offer sign-in errors. It returns true if there is an error, // and false otherwise. @@ -246,7 +243,7 @@ // Switch to a new profile after exporting the token. void SwitchToProfile(Profile* new_profile); - // Only one DiceTurnSyncOnHelper can be attached per profile. This deletes + // Only one TurnSyncOnHelper can be attached per profile. This deletes // any other helper attached to the profile. void AttachToProfile(); @@ -284,7 +281,7 @@ base::CallbackListSubscription shutdown_subscription_; bool enterprise_account_confirmed_ = false; - base::WeakPtrFactory<DiceTurnSyncOnHelper> weak_pointer_factory_{this}; + base::WeakPtrFactory<TurnSyncOnHelper> weak_pointer_factory_{this}; }; -#endif // CHROME_BROWSER_UI_WEBUI_SIGNIN_DICE_TURN_SYNC_ON_HELPER_H_ +#endif // CHROME_BROWSER_UI_WEBUI_SIGNIN_TURN_SYNC_ON_HELPER_H_
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc similarity index 74% rename from chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc rename to chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc index df4fc98..162be7c 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.h" #include "base/bind.h" #include "base/check.h" @@ -51,30 +51,30 @@ } // Converts SigninEmailConfirmationDialog::Action to -// DiceTurnSyncOnHelper::SigninChoice and invokes |callback| on it. -void OnEmailConfirmation(DiceTurnSyncOnHelper::SigninChoiceCallback callback, +// TurnSyncOnHelper::SigninChoice and invokes |callback| on it. +void OnEmailConfirmation(TurnSyncOnHelper::SigninChoiceCallback callback, SigninEmailConfirmationDialog::Action action) { DCHECK(callback) << "This function should be called only once."; switch (action) { case SigninEmailConfirmationDialog::START_SYNC: - std::move(callback).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); + std::move(callback).Run(TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE); return; case SigninEmailConfirmationDialog::CREATE_NEW_USER: - std::move(callback).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE); + std::move(callback).Run(TurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE); return; case SigninEmailConfirmationDialog::CLOSE: - std::move(callback).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_CANCEL); + std::move(callback).Run(TurnSyncOnHelper::SIGNIN_CHOICE_CANCEL); return; } NOTREACHED(); } void OnProfileCheckComplete(const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback, + TurnSyncOnHelper::SigninChoiceCallback callback, base::WeakPtr<Browser> browser, bool prompt_for_new_profile) { if (!browser) { - std::move(callback).Run(DiceTurnSyncOnHelper::SIGNIN_CHOICE_CANCEL); + std::move(callback).Run(TurnSyncOnHelper::SIGNIN_CHOICE_CANCEL); return; } ProfileAttributesEntry* entry = @@ -84,50 +84,47 @@ browser->signin_view_controller()->ShowModalEnterpriseConfirmationDialog( account_info, GenerateNewProfileColor(entry).color, base::BindOnce( - [](DiceTurnSyncOnHelper::SigninChoiceCallback callback, - Browser* browser, bool prompt_for_new_profile, - bool create_profile) { + [](TurnSyncOnHelper::SigninChoiceCallback callback, Browser* browser, + bool prompt_for_new_profile, bool create_profile) { browser->signin_view_controller()->CloseModalSignin(); std::move(callback).Run( create_profile ? prompt_for_new_profile - ? DiceTurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE - : DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE - : DiceTurnSyncOnHelper::SIGNIN_CHOICE_CANCEL); + ? TurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE + : TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE + : TurnSyncOnHelper::SIGNIN_CHOICE_CANCEL); }, std::move(callback), browser.get(), prompt_for_new_profile)); } } // namespace -DiceTurnSyncOnHelperDelegateImpl::DiceTurnSyncOnHelperDelegateImpl( - Browser* browser) +TurnSyncOnHelperDelegateImpl::TurnSyncOnHelperDelegateImpl(Browser* browser) : browser_(browser), profile_(browser_->profile()) { DCHECK(browser); DCHECK(profile_); BrowserList::AddObserver(this); } -DiceTurnSyncOnHelperDelegateImpl::~DiceTurnSyncOnHelperDelegateImpl() { +TurnSyncOnHelperDelegateImpl::~TurnSyncOnHelperDelegateImpl() { BrowserList::RemoveObserver(this); } -void DiceTurnSyncOnHelperDelegateImpl::ShowLoginError( - const SigninUIError& error) { +void TurnSyncOnHelperDelegateImpl::ShowLoginError(const SigninUIError& error) { DCHECK(!error.IsOk()); - DiceTurnSyncOnHelper::Delegate::ShowLoginErrorForBrowser(error, browser_); + TurnSyncOnHelper::Delegate::ShowLoginErrorForBrowser(error, browser_); } -void DiceTurnSyncOnHelperDelegateImpl:: +void TurnSyncOnHelperDelegateImpl:: ShouldEnterpriseConfirmationPromptForNewProfile( Profile* profile, base::OnceCallback<void(bool)> callback) { ui::CheckShouldPromptForNewProfile(profile, std::move(callback)); } -void DiceTurnSyncOnHelperDelegateImpl::ShowEnterpriseAccountConfirmation( +void TurnSyncOnHelperDelegateImpl::ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { browser_ = EnsureBrowser(browser_, profile_); // Checking whether to show the prompt for a new profile is sometimes // asynchronous. @@ -136,7 +133,7 @@ std::move(callback), browser_->AsWeakPtr())); } -void DiceTurnSyncOnHelperDelegateImpl::ShowSyncConfirmation( +void TurnSyncOnHelperDelegateImpl::ShowSyncConfirmation( base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) { DCHECK(callback); @@ -147,7 +144,7 @@ browser_->signin_view_controller()->ShowModalSyncConfirmationDialog(); } -void DiceTurnSyncOnHelperDelegateImpl::ShowSyncDisabledConfirmation( +void TurnSyncOnHelperDelegateImpl::ShowSyncDisabledConfirmation( bool is_managed_account, base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) { @@ -155,10 +152,10 @@ ShowSyncConfirmation(std::move(callback)); } -void DiceTurnSyncOnHelperDelegateImpl::ShowMergeSyncDataConfirmation( +void TurnSyncOnHelperDelegateImpl::ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { DCHECK(callback); browser_ = EnsureBrowser(browser_, profile_); browser_->signin_view_controller()->ShowModalSigninEmailConfirmationDialog( @@ -166,17 +163,17 @@ base::BindOnce(&OnEmailConfirmation, std::move(callback))); } -void DiceTurnSyncOnHelperDelegateImpl::ShowSyncSettings() { +void TurnSyncOnHelperDelegateImpl::ShowSyncSettings() { browser_ = EnsureBrowser(browser_, profile_); chrome::ShowSettingsSubPage(browser_, chrome::kSyncSetupSubPage); } -void DiceTurnSyncOnHelperDelegateImpl::SwitchToProfile(Profile* new_profile) { +void TurnSyncOnHelperDelegateImpl::SwitchToProfile(Profile* new_profile) { profile_ = new_profile; browser_ = nullptr; } -void DiceTurnSyncOnHelperDelegateImpl::OnSyncConfirmationUIClosed( +void TurnSyncOnHelperDelegateImpl::OnSyncConfirmationUIClosed( LoginUIService::SyncConfirmationUIClosedResult result) { DCHECK(sync_confirmation_callback_); // Treat closing the ui as an implicit ABORT_SYNC action. @@ -186,7 +183,7 @@ std::move(sync_confirmation_callback_).Run(result); } -void DiceTurnSyncOnHelperDelegateImpl::OnBrowserRemoved(Browser* browser) { +void TurnSyncOnHelperDelegateImpl::OnBrowserRemoved(Browser* browser) { if (browser == browser_) browser_ = nullptr; }
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h b/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.h similarity index 64% rename from chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h rename to chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.h index 2b94d623..d1fc2c2e 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.h
@@ -2,51 +2,50 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_WEBUI_SIGNIN_DICE_TURN_SYNC_ON_HELPER_DELEGATE_IMPL_H_ -#define CHROME_BROWSER_UI_WEBUI_SIGNIN_DICE_TURN_SYNC_ON_HELPER_DELEGATE_IMPL_H_ +#ifndef CHROME_BROWSER_UI_WEBUI_SIGNIN_TURN_SYNC_ON_HELPER_DELEGATE_IMPL_H_ +#define CHROME_BROWSER_UI_WEBUI_SIGNIN_TURN_SYNC_ON_HELPER_DELEGATE_IMPL_H_ #include "base/callback_forward.h" #include "base/memory/raw_ptr.h" #include "base/scoped_observation.h" #include "chrome/browser/ui/browser_list_observer.h" #include "chrome/browser/ui/sync/profile_signin_confirmation_helper.h" -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" #include "chrome/browser/ui/webui/signin/login_ui_service.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" class Browser; class Profile; class SigninUIError; struct AccountInfo; -// Default implementation for DiceTurnSyncOnHelper::Delegate. -class DiceTurnSyncOnHelperDelegateImpl : public DiceTurnSyncOnHelper::Delegate, - public BrowserListObserver, - public LoginUIService::Observer { +// Default implementation for TurnSyncOnHelper::Delegate. +class TurnSyncOnHelperDelegateImpl : public TurnSyncOnHelper::Delegate, + public BrowserListObserver, + public LoginUIService::Observer { public: - explicit DiceTurnSyncOnHelperDelegateImpl(Browser* browser); + explicit TurnSyncOnHelperDelegateImpl(Browser* browser); - DiceTurnSyncOnHelperDelegateImpl(const DiceTurnSyncOnHelperDelegateImpl&) = + TurnSyncOnHelperDelegateImpl(const TurnSyncOnHelperDelegateImpl&) = delete; + TurnSyncOnHelperDelegateImpl& operator=(const TurnSyncOnHelperDelegateImpl&) = delete; - DiceTurnSyncOnHelperDelegateImpl& operator=( - const DiceTurnSyncOnHelperDelegateImpl&) = delete; - ~DiceTurnSyncOnHelperDelegateImpl() override; + ~TurnSyncOnHelperDelegateImpl() override; protected: void ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + TurnSyncOnHelper::SigninChoiceCallback callback) override; virtual void ShouldEnterpriseConfirmationPromptForNewProfile( Profile* profile, base::OnceCallback<void(bool)> callback); private: - // DiceTurnSyncOnHelper::Delegate: + // TurnSyncOnHelper::Delegate: void ShowLoginError(const SigninUIError& error) override; void ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + TurnSyncOnHelper::SigninChoiceCallback callback) override; void ShowSyncConfirmation( base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) override; @@ -72,4 +71,4 @@ scoped_login_ui_service_observation_{this}; }; -#endif // CHROME_BROWSER_UI_WEBUI_SIGNIN_DICE_TURN_SYNC_ON_HELPER_DELEGATE_IMPL_H_ +#endif // CHROME_BROWSER_UI_WEBUI_SIGNIN_TURN_SYNC_ON_HELPER_DELEGATE_IMPL_H_
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc similarity index 85% rename from chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc rename to chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc index 6c113734..378dcb0 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" +#include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h" #include <utility> @@ -58,7 +58,7 @@ using ::testing::AtLeast; using ::testing::Return; -class DiceTurnSyncOnHelperTest; +class TurnSyncOnHelperTest; namespace { @@ -80,23 +80,22 @@ Profile::Delegate* delegate); // Dummy delegate forwarding all the calls the test fixture. -// Owned by the DiceTurnOnSyncHelper. -class TestDiceTurnSyncOnHelperDelegate : public DiceTurnSyncOnHelper::Delegate { +// Owned by the TurnOnSyncHelper. +class TestTurnSyncOnHelperDelegate : public TurnSyncOnHelper::Delegate { public: - explicit TestDiceTurnSyncOnHelperDelegate( - DiceTurnSyncOnHelperTest* test_fixture); - ~TestDiceTurnSyncOnHelperDelegate() override; + explicit TestTurnSyncOnHelperDelegate(TurnSyncOnHelperTest* test_fixture); + ~TestTurnSyncOnHelperDelegate() override; private: - // DiceTurnSyncOnHelper::Delegate: + // TurnSyncOnHelper::Delegate: void ShowLoginError(const SigninUIError& error) override; void ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + TurnSyncOnHelper::SigninChoiceCallback callback) override; void ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + TurnSyncOnHelper::SigninChoiceCallback callback) override; void ShowSyncConfirmation( base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) override; @@ -107,7 +106,7 @@ void ShowSyncSettings() override; void SwitchToProfile(Profile* new_profile) override; - raw_ptr<DiceTurnSyncOnHelperTest> test_fixture_; + raw_ptr<TurnSyncOnHelperTest> test_fixture_; }; // Simple ProfileManager creating testing profiles and allowing to register a @@ -223,11 +222,9 @@ } // namespace -class DiceTurnSyncOnHelperTest : public testing::Test { +class TurnSyncOnHelperTest : public testing::Test { public: - DiceTurnSyncOnHelperTest() - : local_state_(TestingBrowserProcess::GetGlobal()) { - } + TurnSyncOnHelperTest() : local_state_(TestingBrowserProcess::GetGlobal()) {} void SetUp() override { EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); @@ -252,7 +249,7 @@ EXPECT_FALSE(initial_device_id_.empty()); } - ~DiceTurnSyncOnHelperTest() override { + ~TurnSyncOnHelperTest() override { DCHECK_GT(delegate_destroyed_, 0); ClearProfile(); base::RunLoop().RunUntilIdle(); @@ -297,11 +294,11 @@ SyncServiceFactory::GetForProfile(profile)); } - DiceTurnSyncOnHelper* CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode mode) { - return new DiceTurnSyncOnHelper( + TurnSyncOnHelper* CreateTurnOnSyncHelper( + TurnSyncOnHelper::SigninAbortedMode mode) { + return new TurnSyncOnHelper( profile(), kAccessPoint, kSigninPromoAction, kSigninReason, account_id_, - mode, std::make_unique<TestDiceTurnSyncOnHelperDelegate>(this), + mode, std::make_unique<TestTurnSyncOnHelperDelegate>(this), base::DoNothing()); } @@ -332,7 +329,7 @@ void SetExpectationsForSyncStartupCompletedForNextProfileCreated() { profile_manager()->NextProfileCreatedCallback(base::BindOnce( - &DiceTurnSyncOnHelperTest::SetExpectationsForSyncStartupCompleted, + &TurnSyncOnHelperTest::SetExpectationsForSyncStartupCompleted, base::Unretained(this))); } @@ -401,7 +398,7 @@ EXPECT_EQ(expected_sync_settings_shown_, sync_settings_shown_); } - // Functions called by the DiceTurnSyncOnHelper::Delegate: + // Functions called by the TurnSyncOnHelper::Delegate: void OnShowLoginError(const SigninUIError& error) { EXPECT_FALSE(sync_confirmation_shown_); EXPECT_FALSE(error.IsOk()); @@ -413,7 +410,7 @@ void OnShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { EXPECT_FALSE(sync_confirmation_shown_); EXPECT_FALSE(previous_email.empty()); EXPECT_FALSE(new_email.empty()); @@ -429,7 +426,7 @@ void OnShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { EXPECT_FALSE(sync_confirmation_shown_); EXPECT_FALSE(account_info.email.empty()); EXPECT_TRUE(enterprise_confirmation_email_.empty()) @@ -496,10 +493,10 @@ enum SyncDisabledConfirmation { kNotShown, kShownManaged, kShownNonManaged }; // Delegate behavior. - DiceTurnSyncOnHelper::SigninChoice merge_data_choice_ = - DiceTurnSyncOnHelper::SIGNIN_CHOICE_CANCEL; - DiceTurnSyncOnHelper::SigninChoice enterprise_choice_ = - DiceTurnSyncOnHelper::SIGNIN_CHOICE_CANCEL; + TurnSyncOnHelper::SigninChoice merge_data_choice_ = + TurnSyncOnHelper::SIGNIN_CHOICE_CANCEL; + TurnSyncOnHelper::SigninChoice enterprise_choice_ = + TurnSyncOnHelper::SIGNIN_CHOICE_CANCEL; LoginUIService::SyncConfirmationUIClosedResult sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult::ABORT_SYNC; bool run_delegate_callbacks_ = true; @@ -544,41 +541,40 @@ bool sync_settings_shown_ = false; }; -TestDiceTurnSyncOnHelperDelegate::TestDiceTurnSyncOnHelperDelegate( - DiceTurnSyncOnHelperTest* test_fixture) +TestTurnSyncOnHelperDelegate::TestTurnSyncOnHelperDelegate( + TurnSyncOnHelperTest* test_fixture) : test_fixture_(test_fixture) {} -TestDiceTurnSyncOnHelperDelegate::~TestDiceTurnSyncOnHelperDelegate() { +TestTurnSyncOnHelperDelegate::~TestTurnSyncOnHelperDelegate() { test_fixture_->OnDelegateDestroyed(); } -void TestDiceTurnSyncOnHelperDelegate::ShowLoginError( - const SigninUIError& error) { +void TestTurnSyncOnHelperDelegate::ShowLoginError(const SigninUIError& error) { test_fixture_->OnShowLoginError(error); } -void TestDiceTurnSyncOnHelperDelegate::ShowMergeSyncDataConfirmation( +void TestTurnSyncOnHelperDelegate::ShowMergeSyncDataConfirmation( const std::string& previous_email, const std::string& new_email, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { test_fixture_->OnShowMergeSyncDataConfirmation(previous_email, new_email, std::move(callback)); } -void TestDiceTurnSyncOnHelperDelegate::ShowEnterpriseAccountConfirmation( +void TestTurnSyncOnHelperDelegate::ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) { + TurnSyncOnHelper::SigninChoiceCallback callback) { test_fixture_->OnShowEnterpriseAccountConfirmation(account_info, std::move(callback)); } -void TestDiceTurnSyncOnHelperDelegate::ShowSyncConfirmation( +void TestTurnSyncOnHelperDelegate::ShowSyncConfirmation( base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) { test_fixture_->OnShowSyncConfirmation(std::move(callback)); } -void TestDiceTurnSyncOnHelperDelegate::ShowSyncDisabledConfirmation( +void TestTurnSyncOnHelperDelegate::ShowSyncDisabledConfirmation( bool is_managed_account, base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) { @@ -586,32 +582,30 @@ std::move(callback)); } -void TestDiceTurnSyncOnHelperDelegate::ShowSyncSettings() { +void TestTurnSyncOnHelperDelegate::ShowSyncSettings() { test_fixture_->OnShowSyncSettings(); } -void TestDiceTurnSyncOnHelperDelegate::SwitchToProfile(Profile* new_profile) { +void TestTurnSyncOnHelperDelegate::SwitchToProfile(Profile* new_profile) { test_fixture_->SwitchToProfile(new_profile); } // Check that the invalid account is supported. -TEST_F(DiceTurnSyncOnHelperTest, InvalidAccount) { +TEST_F(TurnSyncOnHelperTest, InvalidAccount) { UseInvalidAccount(); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); base::RunLoop().RunUntilIdle(); CheckDelegateCalls(); } // Tests that the login error is displayed and that the account is kept. -TEST_F(DiceTurnSyncOnHelperTest, CanOfferSigninErrorKeepAccount) { +TEST_F(TurnSyncOnHelperTest, CanOfferSigninErrorKeepAccount) { // Set expectations. expected_login_error_ = SigninUIError::Other(kEmail); // Configure the test. profile()->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false); // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); base::RunLoop().RunUntilIdle(); // Check expectations. EXPECT_FALSE( @@ -623,14 +617,13 @@ // TODO(https://crbug.com/1260291): Enable this test on Lacros. #if !BUILDFLAG(IS_CHROMEOS_LACROS) // Tests that the login error is displayed and that the account is removed. -TEST_F(DiceTurnSyncOnHelperTest, CanOfferSigninErrorRemoveAccount) { +TEST_F(TurnSyncOnHelperTest, CanOfferSigninErrorRemoveAccount) { // Set expectations. expected_login_error_ = SigninUIError::Other(kEmail); // Configure the test. profile()->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false); // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); base::RunLoop().RunUntilIdle(); // Check expectations. EXPECT_FALSE( @@ -642,7 +635,7 @@ // Tests that the sync disabled message is displayed and that the account is // removed upon the ABORT_SYNC action. -TEST_F(DiceTurnSyncOnHelperTest, SyncDisabledAbortRemoveAccount) { +TEST_F(TurnSyncOnHelperTest, SyncDisabledAbortRemoveAccount) { // Set expectations. expected_sync_disabled_confirmation_ = kShownNonManaged; SetExpectationsForSyncDisabled(profile()); @@ -653,8 +646,7 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); base::RunLoop().RunUntilIdle(); // Check expectations. CheckSyncAborted(/*has_primary_account=*/false); @@ -663,7 +655,7 @@ // Tests that the sync disabled message is displayed and that the account is // removed upon the ABORT_SYNC action (despite SigninAbortedMode::KEEP_ACCOUNT). -TEST_F(DiceTurnSyncOnHelperTest, SyncDisabledAbortKeepAccount) { +TEST_F(TurnSyncOnHelperTest, SyncDisabledAbortKeepAccount) { // Set expectations. expected_sync_disabled_confirmation_ = kShownNonManaged; SetExpectationsForSyncDisabled(profile()); @@ -674,8 +666,7 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); base::RunLoop().RunUntilIdle(); // Check expectations. CheckSyncAborted(/*has_primary_account=*/false); @@ -684,7 +675,7 @@ // Tests that the sync disabled message is displayed and that the account is // kept upon the SYNC_WITH_DEFAULT_SETTINGS action. -TEST_F(DiceTurnSyncOnHelperTest, SyncDisabledContinueKeepAccount) { +TEST_F(TurnSyncOnHelperTest, SyncDisabledContinueKeepAccount) { // Set expectations. expected_sync_disabled_confirmation_ = kShownNonManaged; SetExpectationsForSyncDisabled(profile()); @@ -695,8 +686,7 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); base::RunLoop().RunUntilIdle(); // Check expectations. EXPECT_TRUE( @@ -707,7 +697,7 @@ // Tests that the sync disabled message is displayed and that the account is // kept upon the SYNC_WITH_DEFAULT_SETTINGS action. -TEST_F(DiceTurnSyncOnHelperTest, SyncDisabledManagedContinueKeepAccount) { +TEST_F(TurnSyncOnHelperTest, SyncDisabledManagedContinueKeepAccount) { // Reset the account info to be an enterprise account. UseEnterpriseAccount(); // Set expectations. @@ -720,8 +710,7 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); base::RunLoop().RunUntilIdle(); // Check expectations. EXPECT_TRUE( @@ -733,7 +722,7 @@ // TODO(https://crbug.com/1260291): Enable this test on Lacros. #if !BUILDFLAG(IS_CHROMEOS_LACROS) // Aborts the flow after the cross account dialog. -TEST_F(DiceTurnSyncOnHelperTest, CrossAccountAbort) { +TEST_F(TurnSyncOnHelperTest, CrossAccountAbort) { // Set expectations. expected_merge_data_previous_email_ = kPreviousEmail; expected_merge_data_new_email_ = kEmail; @@ -741,8 +730,7 @@ profile()->GetPrefs()->SetString(prefs::kGoogleServicesLastUsername, kPreviousEmail); // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); @@ -751,7 +739,7 @@ } // Aborts the flow after the cross account dialog. -TEST_F(DiceTurnSyncOnHelperTest, CrossAccountAbortAlreadyManaged) { +TEST_F(TurnSyncOnHelperTest, CrossAccountAbortAlreadyManaged) { // Set expectations. expected_merge_data_previous_email_ = kPreviousEmail; expected_merge_data_new_email_ = kEmail; @@ -762,8 +750,7 @@ user_policy_signin_service()->set_client_id("bar"); chrome::enterprise_util::SetUserAcceptedAccountManagement(profile(), true); // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); @@ -773,41 +760,39 @@ #endif // Merge data after the cross account dialog. -TEST_F(DiceTurnSyncOnHelperTest, CrossAccountContinue) { +TEST_F(TurnSyncOnHelperTest, CrossAccountContinue) { // Set expectations. expected_merge_data_previous_email_ = kPreviousEmail; expected_merge_data_new_email_ = kEmail; expected_sync_confirmation_shown_ = true; SetExpectationsForSyncStartupCompleted(profile()); // Configure the test. - merge_data_choice_ = DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; + merge_data_choice_ = TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; profile()->GetPrefs()->SetString(prefs::kGoogleServicesLastUsername, kPreviousEmail); // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. CheckSyncAborted(/*has_primary_account=*/false); CheckDelegateCalls(); } // Merge data after the cross account dialog. -TEST_F(DiceTurnSyncOnHelperTest, CrossAccountContinueAlreadyManaged) { +TEST_F(TurnSyncOnHelperTest, CrossAccountContinueAlreadyManaged) { // Set expectations. expected_merge_data_previous_email_ = kPreviousEmail; expected_merge_data_new_email_ = kEmail; expected_sync_confirmation_shown_ = true; SetExpectationsForSyncStartupCompleted(profile()); // Configure the test. - merge_data_choice_ = DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; + merge_data_choice_ = TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; profile()->GetPrefs()->SetString(prefs::kGoogleServicesLastUsername, kPreviousEmail); user_policy_signin_service()->set_dm_token("foo"); user_policy_signin_service()->set_client_id("bar"); chrome::enterprise_util::SetUserAcceptedAccountManagement(profile(), true); // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. // This was already a signed-in and managed enterprise account so we keep the // user signed-in, overriding SigninAbortedMode::REMOVE_ACCOUNT. @@ -818,7 +803,7 @@ // TODO(https://crbug.com/1260291): Enable these tests on Lacros. #if !BUILDFLAG(IS_CHROMEOS_LACROS) // Create a new profile after the cross account dialog and show the signin page. -TEST_F(DiceTurnSyncOnHelperTest, CrossAccountNewProfile) { +TEST_F(TurnSyncOnHelperTest, CrossAccountNewProfile) { // Set expectations. expected_merge_data_previous_email_ = kPreviousEmail; expected_merge_data_new_email_ = kEmail; @@ -826,12 +811,11 @@ expected_sync_confirmation_shown_ = true; SetExpectationsForSyncStartupCompletedForNextProfileCreated(); // Configure the test. - merge_data_choice_ = DiceTurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE; + merge_data_choice_ = TurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE; profile()->GetPrefs()->SetString(prefs::kGoogleServicesLastUsername, kPreviousEmail); // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); // Check expectations. base::RunLoop().RunUntilIdle(); // Profile creation is asynchronous. EXPECT_FALSE( @@ -843,15 +827,14 @@ } // Abort after the enterprise confirmation prompt. -TEST_F(DiceTurnSyncOnHelperTest, EnterpriseConfirmationAbort) { +TEST_F(TurnSyncOnHelperTest, EnterpriseConfirmationAbort) { // Set expectations. expected_enterprise_confirmation_email_ = kEmail; // Configure the test. user_policy_signin_service()->set_dm_token("foo"); user_policy_signin_service()->set_client_id("bar"); // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); @@ -861,17 +844,16 @@ #endif // Continue after the enterprise confirmation prompt. -TEST_F(DiceTurnSyncOnHelperTest, DISABLED_EnterpriseConfirmationContinue) { +TEST_F(TurnSyncOnHelperTest, DISABLED_EnterpriseConfirmationContinue) { // Set expectations. expected_enterprise_confirmation_email_ = kEmail; expected_sync_confirmation_shown_ = true; // Configure the test. user_policy_signin_service()->set_dm_token("foo"); user_policy_signin_service()->set_client_id("bar"); - enterprise_choice_ = DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; + enterprise_choice_ = TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); @@ -882,7 +864,7 @@ // TODO(https://crbug.com/1260291): Enable this test on Lacros. #if !BUILDFLAG(IS_CHROMEOS_LACROS) // Continue with a new profile after the enterprise confirmation prompt. -TEST_F(DiceTurnSyncOnHelperTest, EnterpriseConfirmationNewProfile) { +TEST_F(TurnSyncOnHelperTest, EnterpriseConfirmationNewProfile) { // Set expectations. expected_enterprise_confirmation_email_ = kEmail; expected_switched_to_new_profile_ = true; @@ -891,10 +873,9 @@ // Configure the test. user_policy_signin_service()->set_dm_token("foo"); user_policy_signin_service()->set_client_id("bar"); - enterprise_choice_ = DiceTurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE; + enterprise_choice_ = TurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE; // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. base::RunLoop().RunUntilIdle(); // Profile creation is asynchronous. EXPECT_FALSE( @@ -905,7 +886,7 @@ // Test that the unconsented primary account is kept if the user creates a new // account and cancels sync activation. -TEST_F(DiceTurnSyncOnHelperTest, SignedInAccountUndoSyncKeepAccount) { +TEST_F(TurnSyncOnHelperTest, SignedInAccountUndoSyncKeepAccount) { // Set expectations. expected_enterprise_confirmation_email_ = kEnterpriseEmail; expected_switched_to_new_profile_ = true; @@ -916,14 +897,13 @@ // Configure the test. user_policy_signin_service()->set_dm_token("foo"); user_policy_signin_service()->set_client_id("bar"); - enterprise_choice_ = DiceTurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE; + enterprise_choice_ = TurnSyncOnHelper::SIGNIN_CHOICE_NEW_PROFILE; UseEnterpriseAccount(); identity_manager()->GetPrimaryAccountMutator()->SetPrimaryAccount( account_id(), signin::ConsentLevel::kSignin); // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); // Check expectations. base::RunLoop().RunUntilIdle(); // Profile creation is asynchronous. EXPECT_FALSE( @@ -941,7 +921,7 @@ // Test that the unconsented primary account is kept if the user creates a new // account and cancels sync activation. -TEST_F(DiceTurnSyncOnHelperTest, SignedInAccountUndoSyncRemoveAccount) { +TEST_F(TurnSyncOnHelperTest, SignedInAccountUndoSyncRemoveAccount) { // Set expectations. expected_enterprise_confirmation_email_ = kEnterpriseEmail; expected_sync_confirmation_shown_ = true; @@ -951,14 +931,13 @@ // Configure the test. user_policy_signin_service()->set_dm_token("foo"); user_policy_signin_service()->set_client_id("bar"); - enterprise_choice_ = DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; + enterprise_choice_ = TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; UseEnterpriseAccount(); identity_manager()->GetPrimaryAccountMutator()->SetPrimaryAccount( account_id(), signin::ConsentLevel::kSignin); // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // This was already a signed-in and managed enterprise account so we keep the // user signed-in, overriding SigninAbortedMode::REMOVE_ACCOUNT. CheckSyncAborted(/*has_primary_account=*/true); @@ -967,7 +946,7 @@ #endif // Tests that the sync confirmation is shown and the user can abort. -TEST_F(DiceTurnSyncOnHelperTest, UndoSync) { +TEST_F(TurnSyncOnHelperTest, UndoSync) { // Set expectations. expected_sync_confirmation_shown_ = true; SetExpectationsForSyncStartupCompleted(profile()); @@ -976,15 +955,14 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. CheckSyncAborted(/*has_primary_account=*/false); CheckDelegateCalls(); } // Tests that the sync settings page is shown. -TEST_F(DiceTurnSyncOnHelperTest, ConfigureSync) { +TEST_F(TurnSyncOnHelperTest, ConfigureSync) { // Set expectations. expected_sync_confirmation_shown_ = true; expected_sync_settings_shown_ = true; @@ -1000,8 +978,7 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. EXPECT_TRUE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); @@ -1010,7 +987,7 @@ } // Tests that the user is signed in and Sync configuration is complete. -TEST_F(DiceTurnSyncOnHelperTest, StartSync) { +TEST_F(TurnSyncOnHelperTest, StartSync) { // Set expectations. expected_sync_confirmation_shown_ = true; SetExpectationsForSyncStartupCompleted(profile()); @@ -1023,8 +1000,7 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. EXPECT_TRUE(identity_manager()->HasAccountWithRefreshToken(account_id())); EXPECT_EQ(account_id(), identity_manager()->GetPrimaryAccountId( @@ -1035,7 +1011,7 @@ // Tests that the user is signed in and Sync configuration is complete. // Also tests that turning sync on enables URL-keyed anonymized data collection. // Regression test for http://crbug.com/812546 -TEST_F(DiceTurnSyncOnHelperTest, ShowSyncDialogForEndConsumerAccount) { +TEST_F(TurnSyncOnHelperTest, ShowSyncDialogForEndConsumerAccount) { // Set expectations. expected_sync_confirmation_shown_ = true; sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: @@ -1054,8 +1030,7 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check expectations. EXPECT_TRUE(identity_manager()->HasAccountWithRefreshToken(account_id())); @@ -1068,7 +1043,7 @@ // For users on a cloud managed device, tests that the user is signed in only // after Sync engine starts. // Regression test for http://crbug.com/812546 -TEST_F(DiceTurnSyncOnHelperTest, +TEST_F(TurnSyncOnHelperTest, ShowSyncDialogBlockedUntilSyncStartupCompletedForCloudManagedDevices) { // Simulate a managed browser. policy::ScopedManagementServiceOverrideForTesting browser_management( @@ -1082,8 +1057,8 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - DiceTurnSyncOnHelper* dice_sync_starter = CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + TurnSyncOnHelper* sync_starter = CreateTurnOnSyncHelper( + TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check that the primary account was set with IdentityManager, but the sync // confirmation dialog was not yet shown. @@ -1099,14 +1074,14 @@ SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)); sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: SYNC_WITH_DEFAULT_SETTINGS; - dice_sync_starter->SyncStartupCompleted(); + sync_starter->SyncStartupCompleted(); CheckDelegateCalls(); } // For enterprise user, tests that the user is signed in only after Sync engine // starts. // Regression test for http://crbug.com/812546 -TEST_F(DiceTurnSyncOnHelperTest, +TEST_F(TurnSyncOnHelperTest, ShowSyncDialogBlockedUntilSyncStartupCompletedForEnterpriseAccount) { // Reset the account info to be an enterprise account. UseEnterpriseAccount(); @@ -1118,8 +1093,8 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - DiceTurnSyncOnHelper* dice_sync_starter = CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + TurnSyncOnHelper* sync_starter = CreateTurnOnSyncHelper( + TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check that the primary account was set with IdentityManager, but the sync // confirmation dialog was not yet shown. @@ -1135,14 +1110,14 @@ SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)); sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: SYNC_WITH_DEFAULT_SETTINGS; - dice_sync_starter->SyncStartupCompleted(); + sync_starter->SyncStartupCompleted(); CheckDelegateCalls(); } // For enterprise user, tests that the user is signed in only after Sync engine // fails to start. // Regression test for http://crbug.com/812546 -TEST_F(DiceTurnSyncOnHelperTest, +TEST_F(TurnSyncOnHelperTest, ShowSyncDialogBlockedUntilSyncStartupFailedForEnterpriseAccount) { // Reset the account info to be an enterprise account. UseEnterpriseAccount(); @@ -1154,8 +1129,8 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - DiceTurnSyncOnHelper* dice_sync_starter = CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + TurnSyncOnHelper* sync_starter = CreateTurnOnSyncHelper( + TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check that the primary account was added to the token service and in the // sign-in manager. @@ -1171,14 +1146,14 @@ SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)); sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: SYNC_WITH_DEFAULT_SETTINGS; - dice_sync_starter->SyncStartupFailed(); + sync_starter->SyncStartupFailed(); CheckDelegateCalls(); } // For users on a cloud managed device, tests that the user is signed in only // after Sync engine fails to start. // Regression test for http://crbug.com/812546 -TEST_F(DiceTurnSyncOnHelperTest, +TEST_F(TurnSyncOnHelperTest, ShowSyncDialogBlockedUntilSyncStartupFailedForCloudManagedDevices) { // Simulate a managed platform. policy::ScopedManagementServiceOverrideForTesting platform_management( @@ -1192,8 +1167,8 @@ // Signin flow. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - DiceTurnSyncOnHelper* dice_sync_starter = CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + TurnSyncOnHelper* sync_starter = CreateTurnOnSyncHelper( + TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check that the primary account was set with IdentityManager, but the sync // confirmation dialog was not yet shown. @@ -1209,12 +1184,12 @@ SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)); sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: SYNC_WITH_DEFAULT_SETTINGS; - dice_sync_starter->SyncStartupFailed(); + sync_starter->SyncStartupFailed(); CheckDelegateCalls(); } // Checks that the profile can be deleted in the middle of the flow. -TEST_F(DiceTurnSyncOnHelperTest, ProfileDeletion) { +TEST_F(TurnSyncOnHelperTest, ProfileDeletion) { run_delegate_callbacks_ = false; // Delegate is hanging. // Show the enterprise confirmation dialog. @@ -1222,10 +1197,9 @@ expected_sync_confirmation_shown_ = true; user_policy_signin_service()->set_dm_token("foo"); user_policy_signin_service()->set_client_id("bar"); - enterprise_choice_ = DiceTurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; + enterprise_choice_ = TurnSyncOnHelper::SIGNIN_CHOICE_CONTINUE; // Signin flow. - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Delegate is now hanging at the enterprise confirmation dialog. // Dialog has been shown. @@ -1237,16 +1211,15 @@ // Delete the profile. ClearProfile(); - // DiceTurnSyncOnHelper was destroyed. + // TurnSyncOnHelper was destroyed. EXPECT_EQ(1, delegate_destroyed()); } // Checks that an existing instance is deleted when a new one is created. -TEST_F(DiceTurnSyncOnHelperTest, AbortExisting) { +TEST_F(TurnSyncOnHelperTest, AbortExisting) { // Create a first instance, stuck on policy requests. user_policy_signin_service()->set_is_hanging(true); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); // Check that it did not complete. EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); @@ -1259,8 +1232,7 @@ sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: SYNC_WITH_DEFAULT_SETTINGS; SetExpectationsForSyncStartupCompleted(profile()); - CreateDiceTurnOnSyncHelper( - DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); + CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); // Check that it completed. CheckDelegateCalls(); EXPECT_TRUE(
diff --git a/chrome/browser/url_param_filter/OWNERS b/chrome/browser/url_param_filter/OWNERS new file mode 100644 index 0000000..9e04438 --- /dev/null +++ b/chrome/browser/url_param_filter/OWNERS
@@ -0,0 +1,3 @@ +bcb@chromium.org +bcl@chromium.org +mreichhoff@chromium.org \ No newline at end of file
diff --git a/chrome/browser/url_param_filter/url_param_filter_classification.proto b/chrome/browser/url_param_filter/url_param_filter_classification.proto new file mode 100644 index 0000000..0fdceed --- /dev/null +++ b/chrome/browser/url_param_filter/url_param_filter_classification.proto
@@ -0,0 +1,28 @@ +// Copyright 2022 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. + +syntax = "proto2"; + +option optimize_for = LITE_RUNTIME; + +package url_param_filter; + +message FilterParameter { + optional string name = 1; // required, eg. the "foo" in "?foo=bar" +} + +message FilterClassification { + enum SiteRole { + SITE_ROLE_UNKNOWN = 0; + SOURCE = 1; + DESTINATION = 2; + } + optional string site = 1; // eTLD+1, required + optional SiteRole site_role = 2; // required + repeated FilterParameter parameters = 3; +} + +message FilterClassifications { + repeated FilterClassification classifications = 1; +}
diff --git a/chrome/browser/url_param_filter/url_param_filterer.cc b/chrome/browser/url_param_filter/url_param_filterer.cc new file mode 100644 index 0000000..76ccef84 --- /dev/null +++ b/chrome/browser/url_param_filter/url_param_filterer.cc
@@ -0,0 +1,108 @@ +// Copyright 2022 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/url_param_filter/url_param_filterer.h" + +#include <vector> + +#include "base/strings/strcat.h" +#include "base/strings/string_util.h" +#include "chrome/browser/url_param_filter/url_param_filter_classification.pb.h" +#include "net/base/escape.h" +#include "net/base/registry_controlled_domains/registry_controlled_domain.h" +#include "net/base/url_util.h" +#include "url/gurl.h" + +namespace url_param_filter { + +namespace { +// Get the ETLD+1 of the URL, which means any subdomain is treated equivalently. +std::string GetEtldPlusOne(const GURL& gurl) { + return net::registry_controlled_domains::GetDomainAndRegistry( + gurl, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); +} + +// Add the params classified as requiring filtering into the given parameter +// set. +void AddParams(std::set<std::string>& parameter_set, + url_param_filter::FilterClassification classification) { + for (auto i : classification.parameters()) { + parameter_set.insert(i.name()); + } +} + +// Filter a given URL according to the passed-in classifications, optionally +// checking any encoded, nested URLs. +GURL FilterUrl(const GURL& source_url, + const GURL& destination_url, + const ClassificationMap& source_classification_map, + const ClassificationMap& destination_classification_map, + bool check_nested) { + GURL result = GURL{destination_url}; + + std::string source_etld_plus1 = GetEtldPlusOne(source_url); + std::string destination_etld_plus1 = GetEtldPlusOne(destination_url); + + std::set<std::string> blocked_parameters; + // Check whether source eTLD+1 has params classified as requiring filtering. + // If so, and the params are present on the destination URL, or any nested + // URLs, remove them. + auto source_classification_result = + source_classification_map.find(source_etld_plus1); + if (source_classification_result != source_classification_map.end()) { + AddParams(blocked_parameters, source_classification_result->second); + } + auto destination_classification_result = + destination_classification_map.find(destination_etld_plus1); + if (destination_classification_result != + destination_classification_map.end()) { + AddParams(blocked_parameters, destination_classification_result->second); + } + // Return quickly if there are no parameters we care about. + if (blocked_parameters.size() == 0) { + return result; + } + + std::vector<std::string> query_parts; + for (net::QueryIterator it(result); !it.IsAtEnd(); it.Advance()) { + const std::string key = std::string{it.GetKey()}; + // If we don't find the given param in our set of blocked parameters, we can + // add it to the result safely. + if (blocked_parameters.find(base::ToLowerASCII(key)) == + blocked_parameters.end()) { + std::string value = std::string{it.GetValue()}; + if (check_nested) { + GURL nested = GURL{net::UnescapeBinaryURLComponent(value)}; + if (nested.is_valid()) { + GURL modified = + FilterUrl(destination_url, nested, source_classification_map, + destination_classification_map, false); + // If a nested URL contains a param we must filter, do so now. + if (nested != modified) { + value = + net::EscapeQueryParamValue(modified.spec(), /*use_plus=*/false); + } + } + } + query_parts.push_back(base::StrCat({key, "=", value})); + } + } + + std::string new_query = base::JoinString(query_parts, "&"); + GURL::Replacements replacements; + replacements.SetQueryStr(new_query); + result = result.ReplaceComponents(replacements); + return result; +} +} // anonymous namespace + +GURL FilterUrl(const GURL& source_url, + const GURL& destination_url, + const ClassificationMap& source_classification_map, + const ClassificationMap& destination_classification_map) { + return FilterUrl(source_url, destination_url, source_classification_map, + destination_classification_map, true); +} + +} // namespace url_param_filter
diff --git a/chrome/browser/url_param_filter/url_param_filterer.h b/chrome/browser/url_param_filter/url_param_filterer.h new file mode 100644 index 0000000..4eae5c9 --- /dev/null +++ b/chrome/browser/url_param_filter/url_param_filterer.h
@@ -0,0 +1,24 @@ +// Copyright 2022 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_URL_PARAM_FILTER_URL_PARAM_FILTERER_H_ +#define CHROME_BROWSER_URL_PARAM_FILTER_URL_PARAM_FILTERER_H_ + +#include <unordered_map> +#include "chrome/browser/url_param_filter/url_param_filter_classification.pb.h" +#include "url/gurl.h" + +namespace url_param_filter { +using ClassificationMap = + std::unordered_map<std::string, url_param_filter::FilterClassification>; + +// Filter the destination URL according to the parameter classifications for the +// source and destination URLs. +GURL FilterUrl(const GURL& source_url, + const GURL& destination_url, + const ClassificationMap& source_classification_map, + const ClassificationMap& destination_classification_map); + +} // namespace url_param_filter +#endif // CHROME_BROWSER_URL_PARAM_FILTER_URL_PARAM_FILTERER_H_
diff --git a/chrome/browser/url_param_filter/url_param_filterer_unittest.cc b/chrome/browser/url_param_filter/url_param_filterer_unittest.cc new file mode 100644 index 0000000..6cbbf08 --- /dev/null +++ b/chrome/browser/url_param_filter/url_param_filterer_unittest.cc
@@ -0,0 +1,239 @@ +// Copyright 2022 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/url_param_filter/url_param_filterer.h" + +#include <string> + +#include "chrome/browser/url_param_filter/url_param_filter_classification.pb.h" +#include "testing/gtest/include/gtest/gtest.h" + +class UrlParamFiltererTest : public ::testing::Test {}; + +url_param_filter::ClassificationMap CreateClassificationMap( + std::map<std::string, std::vector<std::string>> source) { + url_param_filter::ClassificationMap result; + for (auto i : source) { + url_param_filter::FilterClassification classification; + for (auto j : i.second) { + url_param_filter::FilterParameter* parameter = + classification.add_parameters(); + parameter->set_name(j); + } + result[i.first] = classification; + } + return result; +} +TEST_F(UrlParamFiltererTest, FilterUrlEmptyClassifications) { + GURL source = GURL{"http://source.xyz"}; + GURL expected = GURL{"https://destination.xyz?nochange=asdf"}; + // If no classifications are passed in, don't modify the destination URL. + GURL result = url_param_filter::FilterUrl( + source, expected, url_param_filter::ClassificationMap(), + url_param_filter::ClassificationMap()); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, FilterUrlNoChanges) { + GURL source = GURL{"http://source.xyz"}; + GURL expected = GURL{"https://destination.xyz?nochange=asdf"}; + url_param_filter::ClassificationMap source_classification_map = + CreateClassificationMap({{"source.xyz", {"plzblock"}}}); + url_param_filter::ClassificationMap destination_classification_map = + CreateClassificationMap({{"destination.xyz", {"plzblock1"}}}); + + // If classifications are passed in, but the destination URL doesn't contain + // any blocked params, don't modify it. + GURL result = + url_param_filter::FilterUrl(source, expected, source_classification_map, + destination_classification_map); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, FilterUrlSourceBlocked) { + GURL source = GURL{"https://source.xyz"}; + GURL destination = GURL{"https://destination.xyz?plzblock=123&nochange=asdf"}; + url_param_filter::ClassificationMap source_classification_map = + CreateClassificationMap({{"source.xyz", {"plzblock"}}}); + + // Navigations from source.xyz with a param called plzblock should have that + // param removed, regardless of destination. + GURL expected = GURL{"https://destination.xyz?nochange=asdf"}; + GURL result = url_param_filter::FilterUrl( + source, destination, source_classification_map, + url_param_filter::ClassificationMap()); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, FilterUrlMultipleSourceBlocked) { + GURL source = GURL{"https://source.xyz"}; + GURL destination = + GURL{"https://destination.xyz?plzblock=123&plzblock1=321&nochange=asdf"}; + url_param_filter::ClassificationMap source_classification_map = + CreateClassificationMap({{"source.xyz", {"plzblock", "plzblock1"}}}); + + // Navigations from source.xyz with a param called plzblock or plzblock1 + // should have those params removed, regardless of destination. + GURL expected = GURL{"https://destination.xyz?nochange=asdf"}; + GURL result = url_param_filter::FilterUrl( + source, destination, source_classification_map, + url_param_filter::ClassificationMap()); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, FilterUrlDestinationBlocked) { + GURL source = GURL{"https://source.xyz"}; + GURL destination = GURL{"https://destination.xyz?plzblock=123&nochange=asdf"}; + url_param_filter::ClassificationMap destination_classification_map = + CreateClassificationMap({{"destination.xyz", {"plzblock"}}}); + + // Navigations to destination.xyz with a param called plzblock should have + // that param removed, regardless of source. + GURL expected = GURL{"https://destination.xyz?nochange=asdf"}; + GURL result = url_param_filter::FilterUrl( + source, destination, url_param_filter::ClassificationMap(), + destination_classification_map); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, FilterUrlMultipleDestinationBlocked) { + GURL source = GURL{"https://source.xyz"}; + GURL destination = + GURL{"https://destination.xyz?plzblock=123&plzblock1=321&nochange=asdf"}; + url_param_filter::ClassificationMap destination_classification_map = + CreateClassificationMap({{"destination.xyz", {"plzblock", "plzblock1"}}}); + + // Navigations to destination.xyz with a param called plzblock and/or + // plzblock1 should have those param removed, regardless of source. + GURL expected = GURL{"https://destination.xyz?nochange=asdf"}; + GURL result = url_param_filter::FilterUrl( + source, destination, url_param_filter::ClassificationMap(), + destination_classification_map); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, FilterUrlSourceAndDestinationBlocked) { + GURL source = GURL{"https://source.xyz"}; + GURL destination = + GURL{"https://destination.xyz?plzblock=123&plzblock1=321&nochange=asdf"}; + url_param_filter::ClassificationMap source_classification_map = + CreateClassificationMap({{"source.xyz", {"plzblock"}}}); + url_param_filter::ClassificationMap destination_classification_map = + CreateClassificationMap({{"destination.xyz", {"plzblock1"}}}); + + // Both source and destination have associated URL param filtering rules. Only + // nochange should remain. + GURL expected = GURL{"https://destination.xyz?nochange=asdf"}; + GURL result = url_param_filter::FilterUrl(source, destination, + source_classification_map, + destination_classification_map); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, + FilterUrlSourceAndDestinationBlockedCheckOrderingPreserved) { + GURL source = GURL{"https://source.xyz"}; + GURL destination = GURL{ + "https://" + "destination.xyz?plzblock=123&plzblock1=321&nochange=asdf&laternochange=" + "fdsa"}; + url_param_filter::ClassificationMap source_classification_map = + CreateClassificationMap({{"source.xyz", {"plzblock"}}}); + url_param_filter::ClassificationMap destination_classification_map = + CreateClassificationMap({{"destination.xyz", {"plzblock1"}}}); + + // Both source and destination have associated URL param filtering rules. Only + // nochange should remain. + GURL expected = + GURL{"https://destination.xyz?nochange=asdf&laternochange=fdsa"}; + GURL result = url_param_filter::FilterUrl(source, destination, + source_classification_map, + destination_classification_map); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, FilterUrlSubdomainsApplied) { + GURL source = GURL{"https://subdomain.source.xyz"}; + GURL destination = GURL{ + "https://" + "subdomain.destination.xyz?plzblock=123&plzblock1=321&nochange=asdf"}; + url_param_filter::ClassificationMap source_classification_map = + CreateClassificationMap({{"source.xyz", {"plzblock"}}}); + url_param_filter::ClassificationMap destination_classification_map = + CreateClassificationMap({{"destination.xyz", {"plzblock1"}}}); + + GURL expected = GURL{"https://subdomain.destination.xyz?nochange=asdf"}; + GURL result = url_param_filter::FilterUrl(source, destination, + source_classification_map, + destination_classification_map); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, FilterUrlCaseIgnored) { + GURL source = GURL{"https://source.xyz"}; + GURL destination = + GURL{"https://destination.xyz?PlZbLoCk=123&PLZBLOCK1=321&nochange=asdf"}; + url_param_filter::ClassificationMap source_classification_map = + CreateClassificationMap({{"source.xyz", {"plzblock"}}}); + url_param_filter::ClassificationMap destination_classification_map = + CreateClassificationMap({{"destination.xyz", {"plzblock1"}}}); + + // The disallowed params PlZbLoCk and PLZBLOCK1 should be removed. + GURL expected = GURL{"https://destination.xyz?nochange=asdf"}; + GURL result = url_param_filter::FilterUrl(source, destination, + source_classification_map, + destination_classification_map); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, FilterUrlWithNestedUrl) { + GURL source = GURL{"https://source.xyz"}; + GURL destination = GURL{ + "https://" + "subdomain.source.xyz?destination=https%3A%2F%2Fdestination.xyz%2F%" + "3Fplzblock1%" + "3D123%26nochange%3Dasdf&PLZBLOCK1=321&nochange=asdf"}; + url_param_filter::ClassificationMap source_classification_map = + CreateClassificationMap({{"source.xyz", {"plzblock"}}}); + url_param_filter::ClassificationMap destination_classification_map = + CreateClassificationMap( + {{"destination.xyz", {"plzblock1"}}, {"source.xyz", {"plzblock1"}}}); + + // The nested URL pattern is commonly observed; we do not want the parameter + // to leak. + GURL expected = GURL{ + "https://" + "subdomain.source.xyz?destination=https%3A%2F%2Fdestination.xyz%2F%" + "3Fnochange%" + "3Dasdf&nochange=asdf"}; + GURL result = url_param_filter::FilterUrl(source, destination, + source_classification_map, + destination_classification_map); + ASSERT_EQ(result, expected); +} + +TEST_F(UrlParamFiltererTest, FilterUrlWithNestedUrlNotNeedingFiltering) { + GURL source = GURL{"https://source.xyz"}; + GURL destination = GURL{ + "https://" + "subdomain.source.xyz?destination=https%3A%2F%2Fdestination.xyz%2F%" + "3Fnochange%" + "3Dasdf&PLZBLOCK1=321&nochange=asdf"}; + url_param_filter::ClassificationMap source_classification_map = + CreateClassificationMap({{"source.xyz", {"plzblock"}}}); + url_param_filter::ClassificationMap destination_classification_map = + CreateClassificationMap( + {{"destination.xyz", {"plzblock1"}}, {"source.xyz", {"plzblock1"}}}); + + // The nested URL does not have filtered parameters and should be left alone. + GURL expected = GURL{ + "https://" + "subdomain.source.xyz?destination=https%3A%2F%2Fdestination.xyz%2F%" + "3Fnochange%" + "3Dasdf&nochange=asdf"}; + GURL result = url_param_filter::FilterUrl(source, destination, + source_classification_map, + destination_classification_map); + ASSERT_EQ(result, expected); +}
diff --git a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc index a84fccf8..af2d07f 100644 --- a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc +++ b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc
@@ -195,6 +195,10 @@ } } +bool IsNoteTakingWebApp(const web_app::WebApp& web_app) { + return web_app.note_taking_new_note_url().is_valid(); +} + } // namespace void UninstallImpl(WebAppProvider* provider, @@ -590,7 +594,11 @@ // Add the intent filters for PWAs. base::Extend(app->intent_filters, apps_util::CreateWebAppIntentFilters( - *web_app, registrar().GetAppScope(web_app->app_id()))); + web_app->app_id(), IsNoteTakingWebApp(*web_app), + registrar().GetAppScope(web_app->app_id()), + registrar().GetAppShareTarget(web_app->app_id()), + provider_->os_integration_manager().GetEnabledFileHandlers( + web_app->app_id()))); #if BUILDFLAG(IS_CHROMEOS_ASH) if (web_app->app_id() == crostini::kCrostiniTerminalSystemAppId) { @@ -1143,6 +1151,14 @@ return is_shutting_down_; } +void WebAppPublisherHelper::OnWebAppFileHandlerApprovalStateChanged( + const AppId& app_id) { + const WebApp* web_app = GetWebApp(app_id); + if (web_app && Accepts(app_id)) { + delegate_->PublishWebApp(ConvertWebApp(web_app)); + } +} + void WebAppPublisherHelper::OnWebAppInstalled(const AppId& app_id) { const WebApp* web_app = GetWebApp(app_id); if (web_app && Accepts(app_id)) {
diff --git a/chrome/browser/web_applications/app_service/web_app_publisher_helper.h b/chrome/browser/web_applications/app_service/web_app_publisher_helper.h index 56f69c7..e254012 100644 --- a/chrome/browser/web_applications/app_service/web_app_publisher_helper.h +++ b/chrome/browser/web_applications/app_service/web_app_publisher_helper.h
@@ -273,6 +273,7 @@ base::StringPiece old_name) override; void OnWebAppWillBeUninstalled(const AppId& app_id) override; void OnAppRegistrarDestroyed() override; + void OnWebAppFileHandlerApprovalStateChanged(const AppId& app_id) override; void OnWebAppLocallyInstalledStateChanged(const AppId& app_id, bool is_locally_installed) override; void OnWebAppLastLaunchTimeChanged(
diff --git a/chrome/browser/web_applications/app_service/web_apps_publisher_host_browsertest.cc b/chrome/browser/web_applications/app_service/web_apps_publisher_host_browsertest.cc index 98b5c2d6..2203458b 100644 --- a/chrome/browser/web_applications/app_service/web_apps_publisher_host_browsertest.cc +++ b/chrome/browser/web_applications/app_service/web_apps_publisher_host_browsertest.cc
@@ -20,6 +20,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/task/single_thread_task_runner.h" #include "base/test/bind.h" +#include "base/test/scoped_feature_list.h" #include "base/threading/thread_restrictions.h" #include "base/values.h" #include "chrome/browser/apps/app_service/app_icon/app_icon_factory.h" @@ -130,6 +131,49 @@ return content::EvalJs(web_contents, script); } +// Returns whether there are file view filters among the given list of intent +// filters. +bool HasFileViewFilters( + const std::vector<apps::mojom::IntentFilterPtr>& intent_filters) { + for (const auto& intent_filter : intent_filters) { + bool has_action_view = false; + bool has_mime_type = false; + bool has_file_extension = false; + + for (const auto& condition : intent_filter->conditions) { + switch (condition->condition_type) { + case apps::mojom::ConditionType::kAction: + if (condition->condition_values.size() == 1 && + condition->condition_values.back()->value == + apps_util::kIntentActionView) { + has_action_view = true; + } + break; + case apps::mojom::ConditionType::kFile: + for (const auto& condition_value : condition->condition_values) { + if (condition_value->match_type == + apps::mojom::PatternMatchType::kMimeType) { + has_mime_type = true; + } else if (condition_value->match_type == + apps::mojom::PatternMatchType::kFileExtension) { + has_file_extension = true; + } + } + break; + default: + // NOOP + break; + } + } + + if (has_action_view && (has_mime_type || has_file_extension)) { + return true; + } + } + + return false; +} + } // namespace class WebAppsPublisherHostBrowserTest : public WebAppControllerBrowserTest { @@ -928,4 +972,41 @@ EXPECT_EQ("_sample.mp4", ReadTextContent(web_contents, "video_filename")); } +// Regression test for crbug.com/1266642 +IN_PROC_BROWSER_TEST_F(WebAppsPublisherHostBrowserTest, + PublishOnlyEnabledFileHandlers) { + ASSERT_TRUE(embedded_test_server()->Start()); + auto app_id = InstallWebAppFromManifest( + browser(), + embedded_test_server()->GetURL("/web_app_file_handling/basic_app.html")); + + // Have to call it explicitly due to usage of + // OsIntegrationManager::ScopedSuppressForTesting + provider() + .os_integration_manager() + .file_handler_manager_for_testing() + .EnableAndRegisterOsFileHandlers(app_id); + + MockAppPublisher mock_app_publisher; + WebAppsPublisherHost web_apps_publisher_host(profile()); + web_apps_publisher_host.SetPublisherForTesting(&mock_app_publisher); + web_apps_publisher_host.Init(); + mock_app_publisher.Wait(); + EXPECT_EQ(mock_app_publisher.get_deltas().size(), 1U); + + EXPECT_TRUE(HasFileViewFilters( + mock_app_publisher.get_deltas().back()->intent_filters)); + + EXPECT_EQ(ApiApprovalState::kRequiresPrompt, + provider().registrar().GetAppFileHandlerApprovalState(app_id)); + provider().sync_bridge().SetAppFileHandlerApprovalState( + app_id, ApiApprovalState::kDisallowed); + + mock_app_publisher.Wait(); + EXPECT_EQ(mock_app_publisher.get_deltas().size(), 2U); + + EXPECT_FALSE(HasFileViewFilters( + mock_app_publisher.get_deltas().back()->intent_filters)); +} + } // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_file_handler_manager.cc b/chrome/browser/web_applications/web_app_file_handler_manager.cc index dadeb3e4..37b1aa5 100644 --- a/chrome/browser/web_applications/web_app_file_handler_manager.cc +++ b/chrome/browser/web_applications/web_app_file_handler_manager.cc
@@ -236,8 +236,9 @@ bool WebAppFileHandlerManager::ShouldOsIntegrationBeEnabled( const AppId& app_id) const { - return GetRegistrar() && - GetRegistrar()->ExpectThatFileHandlersAreRegisteredWithOs(app_id); + return !ShouldRegisterFileHandlersWithOs() || + (GetRegistrar() && + GetRegistrar()->ExpectThatFileHandlersAreRegisteredWithOs(app_id)); } const WebAppRegistrar* WebAppFileHandlerManager::GetRegistrar() const {
diff --git a/chrome/browser/web_applications/web_app_file_handler_manager_unittest.cc b/chrome/browser/web_applications/web_app_file_handler_manager_unittest.cc index b0b399e..947962f 100644 --- a/chrome/browser/web_applications/web_app_file_handler_manager_unittest.cc +++ b/chrome/browser/web_applications/web_app_file_handler_manager_unittest.cc
@@ -14,6 +14,7 @@ #include "chrome/browser/web_applications/test/fake_web_app_registry_controller.h" #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/test/web_app_test_utils.h" +#include "chrome/browser/web_applications/web_app_file_handler_registration.h" #include "components/services/app_service/public/cpp/file_handler.h" #include "testing/gmock/include/gmock/gmock-matchers.h" #include "testing/gtest/include/gtest/gtest.h" @@ -199,6 +200,11 @@ }; TEST_F(WebAppFileHandlerManagerTest, FileHandlersAreNotAvailableUnlessEnabled) { + // TODO(crbug/1288442): re-enable this test + if (!ShouldRegisterFileHandlersWithOs()) { + GTEST_SKIP(); + } + file_handler_manager().InstallFileHandler(app_id(), GURL("https://app.site/handle-foo"), {{"application/foo", {".foo"}}},
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index bfa6823..a94fc202 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1643716582-7dca657287268f61f1b1cd5b30b9ce2a59909105.profdata +chrome-linux-main-1643738083-2aa85f3bba9b0b5fb301707a94a45137748d6646.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 6f094c73..edd40f9f 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1643716582-b9883d2b9fee52c8faae9a4330519c7928b33041.profdata +chrome-win32-main-1643727305-b6f154e2ecb7077c3c091c586b1c3058491bccf0.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 0094350..3626cfb 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1643716582-33f00b1fa5916ab55291dc24da9d26fe4366d2e4.profdata +chrome-win64-main-1643727305-1e6ebae9350bff56d95ac27e45d9cf5eb4bb0aad.profdata
diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json index 44fef6f..8681c4c6 100644 --- a/chrome/common/extensions/api/_permission_features.json +++ b/chrome/common/extensions/api/_permission_features.json
@@ -466,12 +466,12 @@ "dependencies": ["behavior:imprivata_extension"], "extension_types": ["extension","login_screen_extension"], "location": "policy", - "platforms": ["chromeos"] + "platforms": ["chromeos", "lacros"] }, { "channel": "stable", "extension_types": ["extension","login_screen_extension"], "location": "policy", - "platforms": ["chromeos"], + "platforms": ["chromeos", "lacros"], "allowlist": [ "7FE4A999359A456C4B0FB7B7AD85CEA29CA50519", // Login screen APIs test extension "3F5995FE79A861F019C6F093BEF98D73FA9D3A5F" // Login screen APIs in-sesesion test extension
diff --git a/chrome/common/extensions/api/api_sources.gni b/chrome/common/extensions/api/api_sources.gni index f80c7f36..0bbe9359 100644 --- a/chrome/common/extensions/api/api_sources.gni +++ b/chrome/common/extensions/api/api_sources.gni
@@ -80,6 +80,7 @@ "enterprise_platform_keys.idl", "enterprise_platform_keys_internal.idl", "file_browser_handler_internal.json", + "login.idl", "login_state.idl", "platform_keys_internal.idl", "platform_keys.idl", @@ -105,7 +106,6 @@ "file_system_provider_internal.idl", "input_ime.json", "input_method_private.json", - "login.idl", "login_screen_storage.idl", "login_screen_ui.idl", "speech_recognition_private.idl",
diff --git a/chrome/common/extensions/api/login.idl b/chrome/common/extensions/api/login.idl index e1bf896e..6d4c6b51 100644 --- a/chrome/common/extensions/api/login.idl +++ b/chrome/common/extensions/api/login.idl
@@ -3,7 +3,7 @@ // found in the LICENSE file. // Use the <code>chrome.login</code> API to launch and exit user sessions. -[platforms=("chromeos"), +[platforms=("chromeos", "lacros"), implemented_in="chrome/browser/chromeos/extensions/login_screen/login/login_api.h"] namespace login { callback VoidCallback = void ();
diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn index e9026db1..f664cf0 100644 --- a/chrome/renderer/BUILD.gn +++ b/chrome/renderer/BUILD.gn
@@ -254,7 +254,6 @@ deps += [ "//components/pdf/common", "//components/pdf/renderer", - "//pdf:features", ] if (is_linux || is_chromeos) {
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index b91adcc7..86e10b0 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -205,8 +205,6 @@ #include "chrome/renderer/pdf/chrome_pdf_internal_plugin_delegate.h" #include "components/pdf/common/internal_plugin_helpers.h" #include "components/pdf/renderer/internal_plugin_renderer_helpers.h" -#include "components/pdf/renderer/pdf_find_in_page.h" -#include "pdf/pdf_features.h" #endif // BUILDFLAG(ENABLE_PDF) #if BUILDFLAG(ENABLE_PLUGINS) @@ -712,14 +710,6 @@ } #endif -#if BUILDFLAG(ENABLE_PDF) - if (base::FeatureList::IsEnabled(chrome_pdf::features::kPdfUnseasoned)) { - associated_interfaces->AddInterface( - base::BindRepeating(&pdf::PdfFindInPageFactory::BindReceiver, - render_frame->GetRoutingID())); - } -#endif - #if BUILDFLAG(IS_WIN) if (render_frame->IsMainFrame()) { associated_interfaces->AddInterface(base::BindRepeating(
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 802bd74..b63fec3 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -1103,7 +1103,6 @@ "//chrome/browser/apps/app_service:test_support", "//chrome/browser/breadcrumbs:browser_tests", "//chrome/browser/browsing_data:constants", - "//chrome/browser/commerce:feature_list", "//chrome/browser/continuous_search:browser_tests", "//chrome/browser/devtools", "//chrome/browser/devtools:test_support", @@ -1164,13 +1163,13 @@ "//components/cast_channel", "//components/cbor", "//components/certificate_transparency", + "//components/commerce/core:feature_list", "//components/constrained_window", "//components/content_settings/browser", "//components/content_settings/common:mojom", "//components/cookie_config", "//components/country_codes", "//components/crash/content/browser/error_reporting:mock_crash_endpoint", - "//components/data_reduction_proxy/core/browser:test_support", "//components/dom_distiller/content/browser", "//components/dom_distiller/content/browser:test_support", "//components/dom_distiller/content/renderer", @@ -1547,9 +1546,6 @@ "../browser/content_settings/sound_content_setting_observer_browsertest.cc", "../browser/crash_recovery_browsertest.cc", "../browser/custom_handlers/protocol_handler_registry_browsertest.cc", - "../browser/data_saver/data_saver_browsertest.cc", - "../browser/data_saver/data_saver_holdback_browsertest.cc", - "../browser/data_saver/data_saver_webapis_browsertest.cc", "../browser/device_api/managed_configuration_api_browsertest.cc", "../browser/devtools/device/adb/adb_client_socket_browsertest.cc", "../browser/devtools/device/adb/mock_adb_server.cc", @@ -4551,7 +4547,6 @@ "../browser/content_settings/page_specific_content_settings_unittest.cc", "../browser/content_settings/sound_content_setting_observer_unittest.cc", "../browser/custom_handlers/chrome_protocol_handler_registry_unittest.cc", - "../browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_unittest.cc", "../browser/download/bubble/download_display_controller_unittest.cc", "../browser/download/chrome_download_manager_delegate_unittest.cc", "../browser/download/deferred_client_wrapper_unittest.cc", @@ -4866,6 +4861,7 @@ "../browser/ui/webui/local_state/local_state_ui_unittest.cc", "../browser/ui/webui/log_web_ui_url_unittest.cc", "../browser/update_client/chrome_update_query_params_delegate_unittest.cc", + "../browser/url_param_filter/url_param_filterer_unittest.cc", "../browser/visibility_timer_tab_helper_unittest.cc", "../browser/vr/vr_tab_helper_unittest.cc", "../browser/webid/federated_identity_active_session_permission_context_unittest.cc", @@ -5207,10 +5203,10 @@ "//chrome/browser:buildflags", "//chrome/browser:permissions_proto", "//chrome/browser:theme_properties", + "//chrome/browser:url_param_filter_classification_proto", "//chrome/browser/breadcrumbs", "//chrome/browser/breadcrumbs:unit_tests", "//chrome/browser/browsing_data:constants", - "//chrome/browser/commerce:feature_list", "//chrome/browser/commerce/shopping_list:unit_tests", "//chrome/browser/devtools", "//chrome/browser/feature_guide/notifications:unit_tests", @@ -5277,6 +5273,7 @@ "//components/captive_portal/core:buildflags", "//components/cast_channel:cast_channel", "//components/cast_channel:test_support", + "//components/commerce/core:feature_list", "//components/component_updater:test_support", "//components/content_settings/browser", "//components/content_settings/browser:test_support", @@ -5285,7 +5282,6 @@ "//components/country_codes", "//components/custom_handlers", "//components/custom_handlers:test_support", - "//components/data_reduction_proxy/core/browser:test_support", "//components/download/public/background_service/test:test_support", "//components/drive", "//components/drive:test_support", @@ -5738,7 +5734,7 @@ if (is_win || is_mac || (is_linux || is_chromeos_lacros)) { sources += [ "../browser/ui/profile_picker_unittest.cc", - "../browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc", + "../browser/ui/webui/signin/turn_sync_on_helper_unittest.cc", ] } @@ -7960,6 +7956,8 @@ # including CrashKeys in reports. sources -= [ "../common/crash_keys_unittest.cc" ] + sources += [ "../browser/fuchsia/element_manager_impl_unittest.cc" ] + data += [ "//testing/buildbot/filters/fuchsia.unit_tests.filter" ] additional_manifest_fragments = [ @@ -8086,7 +8084,6 @@ "//chrome/app:command_ids", "//chrome/browser", "//chrome/browser:browser_process", - "//chrome/browser/commerce:feature_list", "//chrome/browser/devtools", "//chrome/browser/profiles:profile", "//chrome/browser/ui", @@ -8109,6 +8106,7 @@ "//components/bookmarks/browser", "//components/captive_portal/content", "//components/captive_portal/core:buildflags", + "//components/commerce/core:feature_list", "//components/content_settings/core/browser", "//components/embedder_support", "//components/feature_engagement",
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index f9b26f9..12dfd56 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -6952,19 +6952,7 @@ ] }, "DataCompressionProxyEnabled": { - "os": [ - "android" - ], - "policy_pref_mapping_tests": [ - { - "policies": { - "DataCompressionProxyEnabled": false - }, - "prefs": { - "spdy_proxy.enabled": {} - } - } - ] + "reason_for_missing_test": "Policy was removed" }, "ForceEphemeralProfiles": { "reason_for_missing_test": "TODO(crbug.com/1213429) add test case" @@ -18005,5 +17993,44 @@ } } ] + }, + "WindowPlacementAlwaysAllowed": { + "os": [ + "win", + "linux", + "mac", + "chromeos_ash", + "chromeos_lacros" + ], + "policy_pref_mapping_tests": [ + { + "policies": {}, + "prefs": { + "window_placement_always_allowed": { + "default_value": false + } + } + }, + { + "policies": { + "WindowPlacementAlwaysAllowed": false + }, + "prefs": { + "window_placement_always_allowed": { + "value": false + } + } + }, + { + "policies": { + "WindowPlacementAlwaysAllowed": true + }, + "prefs": { + "window_placement_always_allowed": { + "value": true + } + } + } + ] } }
diff --git a/chrome/test/data/webui/chromeos/firmware_update/BUILD.gn b/chrome/test/data/webui/chromeos/firmware_update/BUILD.gn index 6b90edc..f3fa299 100644 --- a/chrome/test/data/webui/chromeos/firmware_update/BUILD.gn +++ b/chrome/test/data/webui/chromeos/firmware_update/BUILD.gn
@@ -71,6 +71,7 @@ "//ash/webui/firmware_update_ui/resources:update_card", "//ui/webui/resources/cr_elements/cr_button:cr_button.m", "//ui/webui/resources/cr_elements/cr_dialog:cr_dialog.m", + "//ui/webui/resources/js:load_time_data.m", ] externs_list = [ "$externs_path/mocha-2.5.js" ] }
diff --git a/chrome/test/data/webui/chromeos/firmware_update/firmware_update_test.js b/chrome/test/data/webui/chromeos/firmware_update/firmware_update_test.js index 02f791f4..748065f 100644 --- a/chrome/test/data/webui/chromeos/firmware_update/firmware_update_test.js +++ b/chrome/test/data/webui/chromeos/firmware_update/firmware_update_test.js
@@ -12,6 +12,7 @@ import {getUpdateProvider, setUpdateControllerForTesting, setUpdateProviderForTesting} from 'chrome://accessory-update/mojo_interface_provider.js'; import {mojoString16ToString} from 'chrome://accessory-update/mojo_utils.js'; import {UpdateCardElement} from 'chrome://accessory-update/update_card.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; import {flushTasks} from '../../test_util.js'; @@ -161,7 +162,8 @@ assertEquals(UpdateState.kUpdating, getUpdateState()); const fakeFirmwareUpdate = getFirmwareUpdateFromDialog(); assertEquals( - `Updating ${mojoString16ToString(fakeFirmwareUpdate.deviceName)}`, + loadTimeData.getStringF( + 'updating', mojoString16ToString(fakeFirmwareUpdate.deviceName)), getUpdateDialogTitle().innerText.trim()); // Allow firmware update to complete. await controller.getUpdateCompletedPromiseForTesting(); @@ -169,8 +171,9 @@ assertEquals(UpdateState.kSuccess, getUpdateState()); assertTrue(getUpdateDialog().open); assertEquals( - `Your ${ - mojoString16ToString(fakeFirmwareUpdate.deviceName)} is up to date`, + loadTimeData.getStringF( + 'deviceUpToDate', + mojoString16ToString(fakeFirmwareUpdate.deviceName)), getUpdateDialogTitle().innerText.trim()); }); @@ -187,7 +190,8 @@ assertEquals(UpdateState.kUpdating, getUpdateState()); const fakeFirmwareUpdate = getFirmwareUpdateFromDialog(); assertEquals( - `Updating ${mojoString16ToString(fakeFirmwareUpdate.deviceName)}`, + loadTimeData.getStringF( + 'updating', mojoString16ToString(fakeFirmwareUpdate.deviceName)), getUpdateDialogTitle().innerText.trim()); // Allow firmware update to complete. await controller.getUpdateCompletedPromiseForTesting(); @@ -195,8 +199,9 @@ assertEquals(UpdateState.kFailed, getUpdateState()); assertTrue(getUpdateDialog().open); assertEquals( - `Failed to update ${ - mojoString16ToString(fakeFirmwareUpdate.deviceName)}`, + loadTimeData.getStringF( + 'updateFailedTitleText', + mojoString16ToString(fakeFirmwareUpdate.deviceName)), getUpdateDialogTitle().innerText.trim()); }); @@ -215,7 +220,8 @@ assertEquals(UpdateState.kUpdating, getUpdateState()); const fakeUpdate = getFirmwareUpdateFromDialog(); assertEquals( - `Updating ${mojoString16ToString(fakeUpdate.deviceName)}`, + loadTimeData.getStringF( + 'updating', mojoString16ToString(fakeUpdate.deviceName)), getUpdateDialogTitle().innerText.trim()); // Allow firmware update to complete. await controller.getUpdateCompletedPromiseForTesting();
diff --git a/chromeos/chromeos_strings.grd b/chromeos/chromeos_strings.grd index 9d3dba6..537c00d 100644 --- a/chromeos/chromeos_strings.grd +++ b/chromeos/chromeos_strings.grd
@@ -2614,11 +2614,14 @@ <message name="IDS_FIRMWARE_UPDATE_BUTTON_A11Y_LABEL" desc="A11y Label for button to start the firmware update."> Update <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph> </message> + <message name="IDS_FIRMWARE_OK_BUTTON_TEXT" desc="Label for button shown when an install fails."> + OK + </message> <message name="IDS_FIRMWARE_UPDATING_TEXT" desc="Label for showing that a device is being updated."> - Updating <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph> + Updating firmware on <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph> </message> <message name="IDS_FIRMWARE_DEVICE_UP_TO_DATE_TEXT" desc="Label for when a device is up to date."> - Your <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph> is up to date + Your <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph> is now up to date </message> <message name="IDS_FIRMWARE_HAS_BEEN_UPDATED_TEXT" desc="Label for displaying which version the device has been updated to."> Firmware <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph> has been updated to version <ph name="VERSION">$2<ex>2.0.12</ex></ph> @@ -2627,29 +2630,28 @@ While the firmware is updating, do not unplug this external device or shut down your computer. You can minimize this window. This update may take a few minutes and your external device may not work during this time. </message> <message name="IDS_FIRMWARE_INSTALLING_TEXT" desc="Label that displays what percentage of the update has been installed."> - Installing - <ph name="PERCENTAGE_VALUE">$1<ex>94</ex></ph>% + Updating (<ph name="PERCENTAGE_VALUE">$1<ex>94</ex></ph>% complete) </message> <message name="IDS_FIRMWARE_UP_TO_DATE_TEXT" desc="Label shown when no firmware updates are available."> - All peripherals are up to date + All firmware is up to date </message> <message name="IDS_FIRMWARE_VERSION_TEXT" desc="Label for the update's version."> Version <ph name="VERSION">$1<ex>3.0.2</ex></ph> </message> - <!-- TODO(michaelcheco): Update strings after UX review. --> - <message translateable="false" name="IDS_FIRMWARE_RESTARTING_TITLE_TEXT" desc="Label for showing that a device is being restarted."> + <message name="IDS_FIRMWARE_RESTARTING_TITLE_TEXT" desc="Label for showing that a device is being restarted."> Restarting <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph> </message> - <message translateable="false" name="IDS_FIRMWARE_RESTARTING_BODY_TEXT" desc="Label for communicating information about what actions a user can take during a device restart."> - Your device is restarting, you can minimize window but do not unplug your device. This may take a few minutes. + <message name="IDS_FIRMWARE_RESTARTING_BODY_TEXT" desc="Label for communicating information about what actions a user can take during a device restart."> + While restarting, do not unplug this external device or shut down your computer. You can minimize this window. This may take a few minutes and your external device may not work during this time. </message> - <message translateable="false" name="IDS_FIRMWARE_RESTARTING_FOOTER_TEXT" desc="Label shown when a device is being restarted."> - Restarting ... + <message name="IDS_FIRMWARE_RESTARTING_FOOTER_TEXT" desc="Label shown when a device is being restarted."> + Restarting... </message> - <message translateable="false" name="IDS_FIRMWARE_UPDATE_FAILED_TITLE_TEXT" desc="Label shown when an update fails."> - Failed to update <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph> + <message name="IDS_FIRMWARE_UPDATE_FAILED_TITLE_TEXT" desc="Label shown when an update fails."> + Can't update <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph> </message> - <message translateable="false" name="IDS_FIRMWARE_UPDATE_FAILED_BODY_TEXT" desc="Label for communicating information about why an update failed."> - Update failed + <message name="IDS_FIRMWARE_UPDATE_FAILED_BODY_TEXT" desc="Label for communicating information about why an update failed."> + Something went wrong. Try again. </message> <message name="IDS_CONFIRMATION_TITLE_TEXT" desc="Label for the confirmation dialog title."> Update firmware on <ph name="DEVICE_NAME">$1<ex>Logitech keyboard</ex></ph>
diff --git a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_DEVICE_UP_TO_DATE_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_DEVICE_UP_TO_DATE_TEXT.png.sha1 index 416a2c461..3b1b1dc 100644 --- a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_DEVICE_UP_TO_DATE_TEXT.png.sha1 +++ b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_DEVICE_UP_TO_DATE_TEXT.png.sha1
@@ -1 +1 @@ -eeb9a317e7c1a463aa7e50401202e7a1c57c626e \ No newline at end of file +3db61c5d1f8c66e4b58e760594467bd7fb0adbb0 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_INSTALLING_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_INSTALLING_TEXT.png.sha1 index 947663d..9b72817a 100644 --- a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_INSTALLING_TEXT.png.sha1 +++ b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_INSTALLING_TEXT.png.sha1
@@ -1 +1 @@ -547ccff2209eb9e2e7c7a0886563ab0b3d6d0712 \ No newline at end of file +910e681614d7fa39b77032008a72090bf5f7b90f \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_OK_BUTTON_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_OK_BUTTON_TEXT.png.sha1 new file mode 100644 index 0000000..cec99b6 --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_OK_BUTTON_TEXT.png.sha1
@@ -0,0 +1 @@ +267ede65d3fff8874d404ddb0ea621f0d9d65b31 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_RESTARTING_BODY_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_RESTARTING_BODY_TEXT.png.sha1 new file mode 100644 index 0000000..7cb09fc --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_RESTARTING_BODY_TEXT.png.sha1
@@ -0,0 +1 @@ +18d57dfc046a38e0004085ae743852d5a1d958a1 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_RESTARTING_FOOTER_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_RESTARTING_FOOTER_TEXT.png.sha1 new file mode 100644 index 0000000..7cb09fc --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_RESTARTING_FOOTER_TEXT.png.sha1
@@ -0,0 +1 @@ +18d57dfc046a38e0004085ae743852d5a1d958a1 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_RESTARTING_TITLE_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_RESTARTING_TITLE_TEXT.png.sha1 new file mode 100644 index 0000000..7cb09fc --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_RESTARTING_TITLE_TEXT.png.sha1
@@ -0,0 +1 @@ +18d57dfc046a38e0004085ae743852d5a1d958a1 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UPDATE_FAILED_BODY_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UPDATE_FAILED_BODY_TEXT.png.sha1 new file mode 100644 index 0000000..cec99b6 --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UPDATE_FAILED_BODY_TEXT.png.sha1
@@ -0,0 +1 @@ +267ede65d3fff8874d404ddb0ea621f0d9d65b31 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UPDATE_FAILED_TITLE_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UPDATE_FAILED_TITLE_TEXT.png.sha1 new file mode 100644 index 0000000..cec99b6 --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UPDATE_FAILED_TITLE_TEXT.png.sha1
@@ -0,0 +1 @@ +267ede65d3fff8874d404ddb0ea621f0d9d65b31 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UPDATING_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UPDATING_TEXT.png.sha1 index 947663d..9b72817a 100644 --- a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UPDATING_TEXT.png.sha1 +++ b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UPDATING_TEXT.png.sha1
@@ -1 +1 @@ -547ccff2209eb9e2e7c7a0886563ab0b3d6d0712 \ No newline at end of file +910e681614d7fa39b77032008a72090bf5f7b90f \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UP_TO_DATE_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UP_TO_DATE_TEXT.png.sha1 index 1abc3aa..6d07865 100644 --- a/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UP_TO_DATE_TEXT.png.sha1 +++ b/chromeos/chromeos_strings_grd/IDS_FIRMWARE_UP_TO_DATE_TEXT.png.sha1
@@ -1 +1 @@ -9c92a6bebf3322c3f093d75188aada094ff64c8f \ No newline at end of file +21d284f26efbeb38eea8cf6c1374ce618fe77bf4 \ No newline at end of file
diff --git a/chromeos/crosapi/mojom/BUILD.gn b/chromeos/crosapi/mojom/BUILD.gn index 095fe31f..d07345dc 100644 --- a/chromeos/crosapi/mojom/BUILD.gn +++ b/chromeos/crosapi/mojom/BUILD.gn
@@ -41,6 +41,7 @@ "kiosk_session_service.mojom", "launcher_search.mojom", "local_printer.mojom", + "login.mojom", "login_state.mojom", "message_center.mojom", "metrics_reporting.mojom",
diff --git a/chromeos/crosapi/mojom/crosapi.mojom b/chromeos/crosapi/mojom/crosapi.mojom index 4a3740f3..a0e139a 100644 --- a/chromeos/crosapi/mojom/crosapi.mojom +++ b/chromeos/crosapi/mojom/crosapi.mojom
@@ -34,6 +34,7 @@ import "chromeos/crosapi/mojom/keystore_service.mojom"; import "chromeos/crosapi/mojom/launcher_search.mojom"; import "chromeos/crosapi/mojom/local_printer.mojom"; +import "chromeos/crosapi/mojom/login.mojom"; import "chromeos/crosapi/mojom/login_state.mojom"; import "chromeos/crosapi/mojom/policy_service.mojom"; import "chromeos/crosapi/mojom/message_center.mojom"; @@ -94,8 +95,8 @@ // please note the milestone when you added it, to help us reason about // compatibility between the client applications and older ash-chrome binaries. // -// Next version: 63 -// Next method id: 67 +// Next version: 64 +// Next method id: 68 [Stable, Uuid="8b79c34f-2bf8-4499-979a-b17cac522c1e", RenamedFrom="crosapi.mojom.AshChromeService"] interface Crosapi { @@ -274,6 +275,10 @@ // Added in M91. [MinVersion=25] BindLocalPrinter@30(pending_receiver<LocalPrinter> receiver); + // Binds the login service. + // Added in M99. + [MinVersion=63] BindLogin@67(pending_receiver<Login> receiver); + // Binds the login state service. [MinVersion=57] BindLoginState@61(pending_receiver<LoginState> receiver);
diff --git a/chromeos/crosapi/mojom/login.mojom b/chromeos/crosapi/mojom/login.mojom new file mode 100644 index 0000000..2f9eaf4f --- /dev/null +++ b/chromeos/crosapi/mojom/login.mojom
@@ -0,0 +1,65 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module crosapi.mojom; + +// This API allows Lacros to call the chrome.login extension API. +[Stable, Uuid="639e9f04-981f-46d1-91da-583c2958265b"] +interface Login { + // Launches a managed guest session if one is set up via the admin console. + // If there are several managed guest sessions set up, it will launch the + // first available one. + // If a password is provided, the Managed Guest Session will be lockable and + // can be unlocked by providing the same password to + // |UnlockManagedGuestSession()|. + LaunchManagedGuestSession@0(string? password) => (string? error); + + // Exits the current session. If |data_for_next_login_attempt| is provided, + // stores data which can be read by |FetchDataForNextLoginAttempt()|. + ExitCurrentSession@1(string? data_for_next_login_attempt) => (string? error); + + // Reads the |data_for_next_login_attempt| set by |ExitCurrentSession()|. + // Clears the previously stored data after reading so it can only be read + // once. + FetchDataForNextLoginAttempt@2() => (string data); + + // Locks a managed guest session if it was launched with a password from + // |LaunchManagedGuestSession()|. + LockManagedGuestSession@3() => (string? error); + + // Unlocks a managed guest session which was launched by + // |LaunchManagedGuestSession()| with a password. The session will unlock if + // |password| matches the one provided to |LaunchManagedGuestSession()|. + UnlockManagedGuestSession@4(string password) => (string? error); + + // Starts a ChromeOS Managed Guest Session which will host the shared user + // sessions. An initial shared session is entered with |password| as the + // password. When this shared session is locked, it can only be unlocked by + // calling |UnlockSharedSession()| with the same password. + LaunchSharedManagedGuestSession@5(string password) => (string? error); + + // Enters the shared session with the given password. If the session is + // locked, it can only be unlocked by calling |UnlockSharedSession()| with + // the same password. + // Fails if there is already a shared session running. Can only be called + // from the lock screen. + EnterSharedSession@6(string password) => (string? error); + + // Unlocks the shared session with the provided password. Fails if the + // password does not match the one provided to + // |LaunchSharedManagedGuestSession()| or |EnterSharedSession()|. + // Fails if there is no existing shared session. Can only be called from the + // lock screen. + UnlockSharedSession@7(string password) => (string? error); + + // Ends the shared session. Security- and privacy-sensitive data in the + // session will be cleaned up on a best effort basis. + // Can be called from both the lock screen or in session. + // Fails if there is no existing shared session. + EndSharedSession@8() => (string? error); + + // Sets data for the next login attempt. The data can be retrieved by + // calling |FetchDataForNextLoginAttempt()|. + SetDataForNextLoginAttempt@9(string data_for_next_login_attempt) => (); +};
diff --git a/chromeos/lacros/lacros_service.cc b/chromeos/lacros/lacros_service.cc index 7e4fa9b5..f4b9092 100644 --- a/chromeos/lacros/lacros_service.cc +++ b/chromeos/lacros/lacros_service.cc
@@ -43,6 +43,7 @@ #include "chromeos/crosapi/mojom/kiosk_session_service.mojom.h" #include "chromeos/crosapi/mojom/launcher_search.mojom.h" #include "chromeos/crosapi/mojom/local_printer.mojom.h" +#include "chromeos/crosapi/mojom/login.mojom.h" #include "chromeos/crosapi/mojom/login_state.mojom.h" #include "chromeos/crosapi/mojom/message_center.mojom.h" #include "chromeos/crosapi/mojom/metrics_reporting.mojom.h" @@ -294,6 +295,8 @@ ConstructRemote<crosapi::mojom::LocalPrinter, &crosapi::mojom::Crosapi::BindLocalPrinter, Crosapi::MethodMinVersions::kBindLocalPrinterMinVersion>(); + ConstructRemote<crosapi::mojom::Login, &crosapi::mojom::Crosapi::BindLogin, + Crosapi::MethodMinVersions::kBindLoginMinVersion>(); ConstructRemote<crosapi::mojom::LoginState, &crosapi::mojom::Crosapi::BindLoginState, Crosapi::MethodMinVersions::kBindLoginStateMinVersion>();
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt index e3c4b79..e9c4cfa 100644 --- a/chromeos/profiles/orderfile.newest.txt +++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@ -chromeos-chrome-orderfile-field-99-4827.0-1643020945-benchmark-99.0.4844.11-r1.orderfile.xz +chromeos-chrome-orderfile-field-99-4827.0-1643020945-benchmark-99.0.4844.13-r1.orderfile.xz
diff --git a/chromeos/services/tts/google_tts_stream.cc b/chromeos/services/tts/google_tts_stream.cc index aa5413417..09f8d70 100644 --- a/chromeos/services/tts/google_tts_stream.cc +++ b/chromeos/services/tts/google_tts_stream.cc
@@ -70,7 +70,8 @@ } GoogleTtsStream::~GoogleTtsStream() { - libchrometts_.GoogleTtsShutdown(); + if (!is_in_process_teardown_) + libchrometts_.GoogleTtsShutdown(); } bool GoogleTtsStream::IsBound() const {
diff --git a/chromeos/services/tts/google_tts_stream.h b/chromeos/services/tts/google_tts_stream.h index c6c88dba..5c87b72 100644 --- a/chromeos/services/tts/google_tts_stream.h +++ b/chromeos/services/tts/google_tts_stream.h
@@ -26,6 +26,10 @@ bool IsBound() const; + void set_is_in_process_teardown(bool value) { + is_in_process_teardown_ = value; + } + private: // mojom::GoogleTtsStream: void InstallVoice(const std::string& voice_name, @@ -58,6 +62,9 @@ // Plays raw tts audio samples. TtsPlayer tts_player_; + // Whether the tts service process is tearing down. + bool is_in_process_teardown_ = false; + base::WeakPtrFactory<GoogleTtsStream> weak_factory_{this}; };
diff --git a/chromeos/services/tts/tts_service.cc b/chromeos/services/tts/tts_service.cc index 5766b335..6dc2be6a 100644 --- a/chromeos/services/tts/tts_service.cc +++ b/chromeos/services/tts/tts_service.cc
@@ -68,8 +68,11 @@ if ((!google_tts_stream_ || !google_tts_stream_->IsBound()) && (!playback_tts_stream_ || !playback_tts_stream_->IsBound())) { service_receiver_.reset(); - if (!keep_process_alive_for_testing_) + if (!keep_process_alive_for_testing_) { + if (google_tts_stream_) + google_tts_stream_->set_is_in_process_teardown(true); exit(0); + } } }
diff --git a/components/BUILD.gn b/components/BUILD.gn index 8fbb593..a22845f5 100644 --- a/components/BUILD.gn +++ b/components/BUILD.gn
@@ -400,7 +400,6 @@ deps += [ "//components/crash/content/browser:unit_tests", "//components/crash/core/app:unit_tests", - "//components/data_reduction_proxy/core/browser:unit_tests", ] }
diff --git a/components/autofill/core/browser/autofill_client.cc b/components/autofill/core/browser/autofill_client.cc index 1481edf..9dadbb7d 100644 --- a/components/autofill/core/browser/autofill_client.cc +++ b/components/autofill/core/browser/autofill_client.cc
@@ -8,6 +8,7 @@ #include "build/build_config.h" #include "components/autofill/core/browser/autofill_ablation_study.h" #include "components/autofill/core/browser/payments/credit_card_access_manager.h" +#include "components/autofill/core/browser/payments/virtual_card_enrollment_manager.h" #include "components/autofill/core/browser/single_field_form_fill_router.h" #include "components/autofill/core/browser/ui/suggestion.h" #include "components/version_info/channel.h" @@ -82,6 +83,14 @@ return nullptr; } +void AutofillClient::ShowVirtualCardEnrollDialog( + const raw_ptr<VirtualCardEnrollmentFields> virtual_card_enrollment_fields, + base::OnceClosure accept_virtual_card_callback, + base::OnceClosure decline_virtual_card_callback) { + // This is overridden by platform subclasses. Currently only + // ChromeAutofillClient (Chrome Desktop and Clank) implements this. +} + #if !BUILDFLAG(IS_IOS) std::unique_ptr<webauthn::InternalAuthenticator> AutofillClient::CreateCreditCardInternalAuthenticator(
diff --git a/components/autofill/core/browser/autofill_client.h b/components/autofill/core/browser/autofill_client.h index b2896b8..a6fd229c 100644 --- a/components/autofill/core/browser/autofill_client.h +++ b/components/autofill/core/browser/autofill_client.h
@@ -78,6 +78,7 @@ class SingleFieldFormFillRouter; class StrikeDatabase; struct Suggestion; +struct VirtualCardEnrollmentFields; class VirtualCardEnrollmentManager; enum class WebauthnDialogCallbackType; enum class WebauthnDialogState; @@ -419,6 +420,12 @@ virtual raw_ptr<VirtualCardEnrollmentManager> GetVirtualCardEnrollmentManager(); + // Shows a dialog for the user to enroll in a virtual card. + virtual void ShowVirtualCardEnrollDialog( + const raw_ptr<VirtualCardEnrollmentFields> virtual_card_enrollment_fields, + base::OnceClosure accept_virtual_card_callback, + base::OnceClosure decline_virtual_card_callback); + #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) // Returns the list of allowed merchants and BIN ranges for virtual cards. virtual std::vector<std::string> GetAllowedMerchantsForVirtualCards() = 0;
diff --git a/components/autofill/core/browser/form_data_importer.h b/components/autofill/core/browser/form_data_importer.h index a5eae552..eeb80950 100644 --- a/components/autofill/core/browser/form_data_importer.h +++ b/components/autofill/core/browser/form_data_importer.h
@@ -56,7 +56,7 @@ FormDataImporter(const FormDataImporter&) = delete; FormDataImporter& operator=(const FormDataImporter&) = delete; - ~FormDataImporter(); + virtual ~FormDataImporter(); // Imports the form data, submitted by the user, into // |personal_data_manager_|. If a new credit card was detected and
diff --git a/components/autofill/core/browser/payments/credit_card_save_manager.cc b/components/autofill/core/browser/payments/credit_card_save_manager.cc index 478437f..3b6a1b7f 100644 --- a/components/autofill/core/browser/payments/credit_card_save_manager.cc +++ b/components/autofill/core/browser/payments/credit_card_save_manager.cc
@@ -35,6 +35,7 @@ #include "components/autofill/core/browser/metrics/autofill_metrics.h" #include "components/autofill/core/browser/payments/payments_client.h" #include "components/autofill/core/browser/payments/payments_util.h" +#include "components/autofill/core/browser/payments/virtual_card_enrollment_manager.h" #include "components/autofill/core/browser/personal_data_manager.h" #include "components/autofill/core/browser/strike_database.h" #include "components/autofill/core/browser/validation.h" @@ -335,6 +336,29 @@ // |personal_data_manager_|. PDM uses this information to update the avatar // button UI. personal_data_manager_->OnCreditCardSaved(/*is_local_card=*/false); + + if (base::FeatureList::IsEnabled( + features::kAutofillEnableUpdateVirtualCardEnrollment)) { + // After a card is successfully saved to the server, we can now offer + // the user to enroll it as a virtual card. |upload_card_response_details| + // has fields in the response that will be required for server requests in + // the virtual card enrollment flow, so we set them here and start the + // flow. + if (upload_card_response_details.virtual_card_enrollment_state == + CreditCard::VirtualCardEnrollmentState::UNENROLLED_AND_ELIGIBLE) { + DCHECK(!upload_card_response_details.card_art_url.is_empty()); + DCHECK(upload_card_response_details.instrument_id.has_value()); + raw_ptr<CreditCard> uploaded_card = &upload_request_.card; + uploaded_card->set_card_art_url( + upload_card_response_details.card_art_url); + uploaded_card->set_virtual_card_enrollment_state( + upload_card_response_details.virtual_card_enrollment_state); + uploaded_card->set_instrument_id( + upload_card_response_details.instrument_id.value()); + client_->GetVirtualCardEnrollmentManager()->OfferVirtualCardEnroll( + uploaded_card, VirtualCardEnrollmentSource::kUpstream); + } + } } else if (show_save_prompt_.has_value() && show_save_prompt_.value()) { // If the upload failed and the bubble was actually shown (NOT just the // icon), count that as a strike against offering upload in the future.
diff --git a/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc b/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc index 06c4436..eb12f8e 100644 --- a/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc +++ b/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc
@@ -346,6 +346,7 @@ scoped_refptr<AutofillWebDataService> database_; MockPersonalDataManager personal_data_; syncer::TestSyncService sync_service_; + // TODO(crbug.com/1291003): Refactor to use the real CreditCardSaveManager. // Ends up getting owned (and destroyed) by TestFormDataImporter: raw_ptr<TestCreditCardSaveManager> credit_card_save_manager_; // Ends up getting owned (and destroyed) by TestAutofillClient: @@ -5191,4 +5192,57 @@ AutofillMetrics::UPLOAD_NOT_OFFERED_INVALID_LEGAL_MESSAGE); } +// Tests that the fields in the card are set correctly and virtual card +// enrollment is offered when a card becomes eligible after upload. +TEST_F(CreditCardSaveManagerTest, OnDidUploadCard_VirtualCardEnrollment) { + for (CreditCard::VirtualCardEnrollmentState enrollment_state : + {CreditCard::VirtualCardEnrollmentState::UNENROLLED, + CreditCard::VirtualCardEnrollmentState::UNENROLLED_AND_ELIGIBLE, + CreditCard::VirtualCardEnrollmentState::ENROLLED}) { + for (bool is_update_virtual_card_enrollment_enabled : {true, false}) { + base::test::ScopedFeatureList feature_list; + if (is_update_virtual_card_enrollment_enabled) { + feature_list.InitAndEnableFeature( + features::kAutofillEnableUpdateVirtualCardEnrollment); + } else { + feature_list.InitAndDisableFeature( + features::kAutofillEnableUpdateVirtualCardEnrollment); + } + payments::PaymentsClient::UploadCardResponseDetails + upload_card_response_details; + upload_card_response_details.card_art_url = + GURL("https://www.example.com/"); + upload_card_response_details.instrument_id = 3; + upload_card_response_details.virtual_card_enrollment_state = + enrollment_state; + + credit_card_save_manager_->set_upload_request_card(test::GetCreditCard()); + credit_card_save_manager_->OnDidUploadCard( + AutofillClient::PaymentsRpcResult::kSuccess, + upload_card_response_details); + + CreditCard uploaded_card = + credit_card_save_manager_->upload_request()->card; + + // The condition inside of this if-statement is true if virtual card + // enrollment should be offered. + if (is_update_virtual_card_enrollment_enabled && + enrollment_state == + CreditCard::VirtualCardEnrollmentState::UNENROLLED_AND_ELIGIBLE) { + EXPECT_EQ(uploaded_card.card_art_url(), + upload_card_response_details.card_art_url); + EXPECT_EQ(uploaded_card.instrument_id(), + upload_card_response_details.instrument_id); + EXPECT_EQ(uploaded_card.virtual_card_enrollment_state(), + upload_card_response_details.virtual_card_enrollment_state); + } else { + EXPECT_TRUE(uploaded_card.card_art_url().is_empty()); + EXPECT_EQ(uploaded_card.instrument_id(), 0); + EXPECT_EQ(uploaded_card.virtual_card_enrollment_state(), + CreditCard::VirtualCardEnrollmentState::UNSPECIFIED); + } + } + } +} + } // namespace autofill
diff --git a/components/autofill/core/browser/payments/payments_client.cc b/components/autofill/core/browser/payments/payments_client.cc index 9d546a1..d77b83e 100644 --- a/components/autofill/core/browser/payments/payments_client.cc +++ b/components/autofill/core/browser/payments/payments_client.cc
@@ -700,9 +700,10 @@ const absl::optional<int> instrument_id = response.FindIntKey("instrument_id"); - upload_card_response_details_.instrument_id = - instrument_id.has_value() ? static_cast<int64_t>(instrument_id.value()) - : 0; + if (instrument_id.has_value()) { + upload_card_response_details_.instrument_id = + static_cast<int64_t>(instrument_id.value()); + } const auto* virtual_card_metadata = response.FindKeyOfType( "virtual_card_metadata", base::Value::Type::DICTIONARY);
diff --git a/components/autofill/core/browser/payments/payments_client.h b/components/autofill/core/browser/payments/payments_client.h index 5f74501..3070434 100644 --- a/components/autofill/core/browser/payments/payments_client.h +++ b/components/autofill/core/browser/payments/payments_client.h
@@ -287,8 +287,9 @@ // |instrument_id| is used by the server as an identifier for the card that // was uploaded. Currently, we have it in the UploadCardResponseDetails so // that we can send it in the GetDetailsForEnrollRequest in the virtual card - // enrollment flow. - int64_t instrument_id = 0; + // enrollment flow. Should never be empty, if using this field use DCHECKs + // to ensure it is populated. + absl::optional<int64_t> instrument_id; // |virtual_card_enrollment_state| is used to determine whether we want to // pursue further action with the credit card that was uploaded regarding // virtual card enrollment. For example, if the state is @@ -302,7 +303,8 @@ // art. Since chrome sync does not instantly sync the card art with the url, // the actual card art image might not always be present. Flows that use // |card_art_url| need to make sure they handle the case where the image has - // not been synced yet. + // not been synced yet. For virtual card eligible cards this should not be + // empty. If using this field use DCHECKs to ensure it is populated. GURL card_art_url; };
diff --git a/components/autofill/core/browser/payments/payments_client_unittest.cc b/components/autofill/core/browser/payments/payments_client_unittest.cc index 8f8b622..c61e1b57 100644 --- a/components/autofill/core/browser/payments/payments_client_unittest.cc +++ b/components/autofill/core/browser/payments/payments_client_unittest.cc
@@ -1159,7 +1159,7 @@ ReturnResponse(net::HTTP_OK, "{}"); EXPECT_EQ(AutofillClient::PaymentsRpcResult::kSuccess, result_); EXPECT_TRUE(upload_card_response_details_.server_id.empty()); - EXPECT_TRUE(upload_card_response_details_.instrument_id == 0); + EXPECT_FALSE(upload_card_response_details_.instrument_id.has_value()); EXPECT_TRUE(upload_card_response_details_.virtual_card_enrollment_state == CreditCard::VirtualCardEnrollmentState::UNSPECIFIED); EXPECT_TRUE(upload_card_response_details_.card_art_url.is_empty());
diff --git a/components/autofill/core/browser/payments/test_credit_card_save_manager.cc b/components/autofill/core/browser/payments/test_credit_card_save_manager.cc index 703cc37..7d97e7b 100644 --- a/components/autofill/core/browser/payments/test_credit_card_save_manager.cc +++ b/components/autofill/core/browser/payments/test_credit_card_save_manager.cc
@@ -42,6 +42,16 @@ upload_request_.card.SetNumber(credit_card_number); } +void TestCreditCardSaveManager::set_upload_request_card( + const CreditCard& card) { + upload_request_.card = std::move(card); +} + +raw_ptr<payments::PaymentsClient::UploadRequestDetails> +TestCreditCardSaveManager::upload_request() { + return &upload_request_; +} + void TestCreditCardSaveManager::OnDidUploadCard( AutofillClient::PaymentsRpcResult result, const payments::PaymentsClient::UploadCardResponseDetails&
diff --git a/components/autofill/core/browser/payments/test_credit_card_save_manager.h b/components/autofill/core/browser/payments/test_credit_card_save_manager.h index ef4b361..4d54f6c 100644 --- a/components/autofill/core/browser/payments/test_credit_card_save_manager.h +++ b/components/autofill/core/browser/payments/test_credit_card_save_manager.h
@@ -44,6 +44,10 @@ void set_upload_request_card_number(const std::u16string& credit_card_number); + void set_upload_request_card(const CreditCard& card); + + raw_ptr<payments::PaymentsClient::UploadRequestDetails> upload_request(); + private: void OnDidUploadCard( AutofillClient::PaymentsRpcResult result, @@ -54,6 +58,8 @@ bool credit_card_was_uploaded_ = false; FRIEND_TEST_ALL_PREFIXES(CreditCardSaveManagerTest, + OnDidUploadCard_VirtualCardEnrollment); + FRIEND_TEST_ALL_PREFIXES(CreditCardSaveManagerTest, UploadCreditCard_NumStrikesLoggedOnUploadNotSuccess); };
diff --git a/components/autofill/core/browser/payments/virtual_card_enrollment_manager.cc b/components/autofill/core/browser/payments/virtual_card_enrollment_manager.cc index 6f36ea7..b51c01b1 100644 --- a/components/autofill/core/browser/payments/virtual_card_enrollment_manager.cc +++ b/components/autofill/core/browser/payments/virtual_card_enrollment_manager.cc
@@ -119,17 +119,13 @@ return; } - // The controller will only expect one |legal_message_lines| vector, so we - // need to combine all of the legal message lines we receive from the server. - std::vector<LegalMessageLine> legal_message_lines; - legal_message_lines.reserve(response.google_legal_message.size() + - response.issuer_legal_message.size()); - base::ranges::copy(response.google_legal_message, - std::back_inserter(legal_message_lines)); - base::ranges::copy(response.issuer_legal_message, - std::back_inserter(legal_message_lines)); - state_.virtual_card_enrollment_fields.legal_message_lines = - std::move(legal_message_lines); + state_.virtual_card_enrollment_fields.google_legal_message = + std::move(response.google_legal_message); + // Issuer legal message is empty for some issuers. + if (!response.issuer_legal_message.empty()) { + state_.virtual_card_enrollment_fields.issuer_legal_message = + std::move(response.issuer_legal_message); + } // The |vcn_context_token| will be used by the server to link the previous // GetDetailsForEnrollRequest to the future UpdateVirtualCardEnrollmentRequest @@ -153,8 +149,14 @@ } void VirtualCardEnrollmentManager::ShowVirtualCardEnrollmentBubble() { - // TODO(crbug.com/1281695): Link backend components to - // VirtualCardEnrollmentBubble here. + autofill_client_->ShowVirtualCardEnrollDialog( + &(state_.virtual_card_enrollment_fields), + base::BindOnce( + &VirtualCardEnrollmentManager::OnVirtualCardEnrollmentBubbleAccepted, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce( + &VirtualCardEnrollmentManager::OnVirtualCardEnrollmentBubbleCancelled, + weak_ptr_factory_.GetWeakPtr())); } void VirtualCardEnrollmentManager::OnVirtualCardEnrollmentBubbleAccepted() {
diff --git a/components/autofill/core/browser/payments/virtual_card_enrollment_manager.h b/components/autofill/core/browser/payments/virtual_card_enrollment_manager.h index 61bf085..f206d43 100644 --- a/components/autofill/core/browser/payments/virtual_card_enrollment_manager.h +++ b/components/autofill/core/browser/payments/virtual_card_enrollment_manager.h
@@ -37,9 +37,12 @@ // Raw pointer to the image for the card art. The |card_art_image| object is // owned by PersonalDataManager. raw_ptr<gfx::Image> card_art_image = nullptr; - // The legal message lines for the footer of the - // VirtualCardEnrollmentBubble. - LegalMessageLines legal_message_lines; + // The Google-specific legal messages that the user must accept before + // opting-in to virtual card enrollment. + LegalMessageLines google_legal_message; + // The Issuer-specific legal messages that the user must accept before + // opting-in to virtual card enrollment. Empty for some issuers. + LegalMessageLines issuer_legal_message; // The source for which the VirtualCardEnrollmentBubble will be shown. VirtualCardEnrollmentSource virtual_card_enrollment_source = VirtualCardEnrollmentSource::kNone;
diff --git a/components/autofill/core/browser/payments/virtual_card_enrollment_manager_unittest.cc b/components/autofill/core/browser/payments/virtual_card_enrollment_manager_unittest.cc index 840698c..1f46b80 100644 --- a/components/autofill/core/browser/payments/virtual_card_enrollment_manager_unittest.cc +++ b/components/autofill/core/browser/payments/virtual_card_enrollment_manager_unittest.cc
@@ -160,10 +160,10 @@ payments::PaymentsClient::GetDetailsForEnrollmentResponseDetails response; response.vcn_context_token = kTestVcnContextToken; - response.issuer_legal_message = { - TestLegalMessageLine("issuer_test_legal_message_line")}; response.google_legal_message = { - TestLegalMessageLine("google_test_legal_message_line")}; + TestLegalMessageLine("google_test_legal_message")}; + response.issuer_legal_message = { + TestLegalMessageLine("issuer_test_legal_message")}; virtual_card_enrollment_manager_->OnDidGetDetailsForEnrollResponse( AutofillClient::PaymentsRpcResult::kSuccess, response); @@ -171,9 +171,9 @@ EXPECT_EQ(state->vcn_context_token, response.vcn_context_token); VirtualCardEnrollmentFields virtual_card_enrollment_fields = state->virtual_card_enrollment_fields; - EXPECT_EQ(virtual_card_enrollment_fields.legal_message_lines[0].text(), + EXPECT_EQ(virtual_card_enrollment_fields.google_legal_message[0].text(), response.google_legal_message[0].text()); - EXPECT_EQ(virtual_card_enrollment_fields.legal_message_lines[1].text(), + EXPECT_EQ(virtual_card_enrollment_fields.issuer_legal_message[0].text(), response.issuer_legal_message[0].text()); EXPECT_TRUE(virtual_card_enrollment_fields.card_art_image != nullptr); }
diff --git a/components/autofill/core/browser/test_autofill_client.cc b/components/autofill/core/browser/test_autofill_client.cc index 5841391..cb9fcf6 100644 --- a/components/autofill/core/browser/test_autofill_client.cc +++ b/components/autofill/core/browser/test_autofill_client.cc
@@ -119,6 +119,11 @@ void TestAutofillClient::OnUnmaskVerificationResult(PaymentsRpcResult result) {} +raw_ptr<VirtualCardEnrollmentManager> +TestAutofillClient::GetVirtualCardEnrollmentManager() { + return form_data_importer_->GetVirtualCardEnrollmentManager(); +} + #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) std::vector<std::string> TestAutofillClient::GetAllowedMerchantsForVirtualCards() {
diff --git a/components/autofill/core/browser/test_autofill_client.h b/components/autofill/core/browser/test_autofill_client.h index ac4eb3cd..aff29bc 100644 --- a/components/autofill/core/browser/test_autofill_client.h +++ b/components/autofill/core/browser/test_autofill_client.h
@@ -76,7 +76,8 @@ UnmaskCardReason reason, base::WeakPtr<CardUnmaskDelegate> delegate) override; void OnUnmaskVerificationResult(PaymentsRpcResult result) override; - + raw_ptr<VirtualCardEnrollmentManager> GetVirtualCardEnrollmentManager() + override; #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) std::vector<std::string> GetAllowedMerchantsForVirtualCards() override; std::vector<std::string> GetAllowedBinRangesForVirtualCards() override; @@ -282,7 +283,7 @@ std::unique_ptr<PrefService> prefs_; std::unique_ptr<TestStrikeDatabase> test_strike_database_; std::unique_ptr<payments::PaymentsClient> payments_client_; - std::unique_ptr<FormDataImporter> form_data_importer_; + std::unique_ptr<TestFormDataImporter> form_data_importer_; GURL form_origin_; ukm::SourceId source_id_ = -1;
diff --git a/components/autofill/core/browser/test_form_data_importer.h b/components/autofill/core/browser/test_form_data_importer.h index 0125a8c..775deefc9 100644 --- a/components/autofill/core/browser/test_form_data_importer.h +++ b/components/autofill/core/browser/test_form_data_importer.h
@@ -22,6 +22,7 @@ const std::string& app_locale, std::unique_ptr<LocalCardMigrationManager> local_card_migration_manager = nullptr); + ~TestFormDataImporter() override = default; }; } // namespace autofill
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index c02f810..2c442c5 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "5.7", - "log_list_timestamp": "2022-01-31T01:34:29Z", + "version": "5.8", + "log_list_timestamp": "2022-02-01T01:37:38Z", "operators": [ { "name": "Google",
diff --git a/components/commerce/OWNERS b/components/commerce/OWNERS index a991d86..3104d54 100644 --- a/components/commerce/OWNERS +++ b/components/commerce/OWNERS
@@ -1,3 +1,4 @@ ayman@chromium.org davidjm@chromium.org +mdjones@chromium.org wychen@chromium.org
diff --git a/components/commerce/core/BUILD.gn b/components/commerce/core/BUILD.gn index f8900661..755cba0 100644 --- a/components/commerce/core/BUILD.gn +++ b/components/commerce/core/BUILD.gn
@@ -8,6 +8,19 @@ import("//build/config/android/rules.gni") } +source_set("feature_list") { + sources = [ + "commerce_feature_list.cc", + "commerce_feature_list.h", + ] + + deps = [ + "//base", + "//third_party/re2:re2", + "//url:url", + ] +} + static_library("metrics") { sources = [ "metrics/metrics_utils.cc",
diff --git a/components/commerce/core/DEPS b/components/commerce/core/DEPS index f0be4f7..e362c20 100644 --- a/components/commerce/core/DEPS +++ b/components/commerce/core/DEPS
@@ -1,5 +1,5 @@ include_rules = [ "+components/optimization_guide", "+components/prefs", + "+third_party/re2", ] -
diff --git a/chrome/browser/commerce/commerce_feature_list.cc b/components/commerce/core/commerce_feature_list.cc similarity index 96% rename from chrome/browser/commerce/commerce_feature_list.cc rename to components/commerce/core/commerce_feature_list.cc index 1513c1d..f87d7c9 100644 --- a/chrome/browser/commerce/commerce_feature_list.cc +++ b/components/commerce/core/commerce_feature_list.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/commerce/commerce_feature_list.h" +#include "components/commerce/core/commerce_feature_list.h" #include "base/feature_list.h" #include "base/metrics/field_trial_params.h"
diff --git a/chrome/browser/commerce/commerce_feature_list.h b/components/commerce/core/commerce_feature_list.h similarity index 87% rename from chrome/browser/commerce/commerce_feature_list.h rename to components/commerce/core/commerce_feature_list.h index de416062..70076061 100644 --- a/chrome/browser/commerce/commerce_feature_list.h +++ b/components/commerce/core/commerce_feature_list.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_COMMERCE_COMMERCE_FEATURE_LIST_H_ -#define CHROME_BROWSER_COMMERCE_COMMERCE_FEATURE_LIST_H_ +#ifndef COMPONENTS_COMMERCE_CORE_COMMERCE_FEATURE_LIST_H_ +#define COMPONENTS_COMMERCE_CORE_COMMERCE_FEATURE_LIST_H_ #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" @@ -30,4 +30,4 @@ bool IsCouponWithCodeEnabled(); } // namespace commerce -#endif // CHROME_BROWSER_COMMERCE_COMMERCE_FEATURE_LIST_H_ +#endif // COMPONENTS_COMMERCE_CORE_COMMERCE_FEATURE_LIST_H_
diff --git a/components/data_reduction_proxy/core/browser/BUILD.gn b/components/data_reduction_proxy/core/browser/BUILD.gn index 1d7225f..8b2208f6 100644 --- a/components/data_reduction_proxy/core/browser/BUILD.gn +++ b/components/data_reduction_proxy/core/browser/BUILD.gn
@@ -8,10 +8,6 @@ browser_sources = [ "data_reduction_proxy_metrics.h", - "data_reduction_proxy_prefs.cc", - "data_reduction_proxy_prefs.h", - "data_reduction_proxy_service.cc", - "data_reduction_proxy_service.h", "data_reduction_proxy_settings.cc", "data_reduction_proxy_settings.h", ] @@ -54,44 +50,3 @@ defines += [ "USE_GOOGLE_API_KEYS_FOR_AUTH_KEY" ] } } - -static_library("test_support") { - testonly = true - sources = [ - "data_reduction_proxy_settings_test_utils.cc", - "data_reduction_proxy_settings_test_utils.h", - "data_reduction_proxy_test_utils.cc", - "data_reduction_proxy_test_utils.h", - ] - - public_deps = [ ":browser" ] - deps = [ - "//base", - "//components/data_reduction_proxy/core/common", - "//components/prefs:test_support", - "//net", - "//net:test_support", - "//services/network:test_support", - "//testing/gmock", - "//testing/gtest", - ] -} - -source_set("unit_tests") { - testonly = true - sources = [ "data_reduction_proxy_settings_unittest.cc" ] - - deps = [ - ":browser", - ":test_support", - "//base", - "//base/test:test_support", - "//build:chromeos_buildflags", - "//components/prefs:test_support", - "//components/variations:test_support", - "//net:test_support", - "//services/network:test_support", - "//testing/gmock", - "//testing/gtest", - ] -}
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.cc deleted file mode 100644 index c319332..0000000 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.cc +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright 2014 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/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.h" - -#include <memory> - -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" -#include "components/pref_registry/pref_registry_syncable.h" -#include "components/prefs/pref_registry_simple.h" -#include "components/prefs/pref_service.h" -#include "components/prefs/scoped_user_pref_update.h" - -namespace data_reduction_proxy { - -// Make sure any changes here that have the potential to impact android_webview -// are reflected in RegisterSimpleProfilePrefs. -void RegisterSyncableProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { - registry->RegisterBooleanPref(prefs::kDataSaverEnabled, false); - registry->RegisterBooleanPref(prefs::kDataReductionProxyWasEnabledBefore, - false); - - registry->RegisterInt64Pref(prefs::kDataReductionProxyLastEnabledTime, 0L); -} - -void RegisterSimpleProfilePrefs(PrefRegistrySimple* registry) { - registry->RegisterBooleanPref( - prefs::kDataReductionProxyWasEnabledBefore, false); - - RegisterPrefs(registry); -} - -// Add any new data reduction proxy prefs to the |pref_map_| or the -// |list_pref_map_| in Init() of DataReductionProxyCompressionStats. -void RegisterPrefs(PrefRegistrySimple* registry) { - registry->RegisterInt64Pref(prefs::kDataReductionProxyLastEnabledTime, 0L); -} - -} // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.h deleted file mode 100644 index 0801cb3..0000000 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.h +++ /dev/null
@@ -1,31 +0,0 @@ -// Copyright 2014 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_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_PREFS_H_ -#define COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_PREFS_H_ - -namespace user_prefs { -class PrefRegistrySyncable; -} - -class PrefRegistrySimple; - -namespace data_reduction_proxy { - -// Registers the data reduction proxy's profile prefs on platforms that use -// syncable prefs. -void RegisterSyncableProfilePrefs( - user_prefs::PrefRegistrySyncable* registry); - -// Registers the data reduction proxy's profile prefs on platforms that do not -// use syncable prefs. -void RegisterSimpleProfilePrefs(PrefRegistrySimple* registry); - -// Registers local state, i.e., profile-agnostic prefs for the data -// reduction proxy. -void RegisterPrefs(PrefRegistrySimple* registry); - -} // namespace data_reduction_proxy - -#endif // COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_PREFS_H_
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc deleted file mode 100644 index 9ddd68a..0000000 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc +++ /dev/null
@@ -1,71 +0,0 @@ -// 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. - -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h" - -#include <memory> -#include <utility> - -#include "base/bind.h" -#include "base/files/file_path.h" -#include "base/json/json_reader.h" -#include "base/location.h" -#include "base/metrics/field_trial_params.h" -#include "base/metrics/histogram_macros.h" -#include "base/task/sequenced_task_runner.h" -#include "base/task/single_thread_task_runner.h" -#include "base/task/task_runner_util.h" -#include "base/time/default_clock.h" -#include "base/time/time.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" -#include "components/prefs/pref_service.h" - -namespace data_reduction_proxy { - -DataReductionProxyService::DataReductionProxyService( - DataReductionProxySettings* settings, - PrefService* prefs) - : settings_(settings), prefs_(prefs) { - DCHECK(settings); -} - -DataReductionProxyService::~DataReductionProxyService() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -} - -void DataReductionProxyService::Shutdown() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - weak_factory_.InvalidateWeakPtrs(); -} - -void DataReductionProxyService::SetUnreachable(bool unreachable) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - settings_->SetUnreachable(unreachable); -} - -void DataReductionProxyService::SetInt64Pref(const std::string& pref_path, - int64_t value) { - if (prefs_) - prefs_->SetInt64(pref_path, value); -} - -void DataReductionProxyService::SetStringPref(const std::string& pref_path, - const std::string& value) { - if (prefs_) - prefs_->SetString(pref_path, value); -} - -base::WeakPtr<DataReductionProxyService> -DataReductionProxyService::GetWeakPtr() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return weak_factory_.GetWeakPtr(); -} - -double DataReductionProxyService::GetSaveDataSavingsPercentEstimate( - const std::string& origin) const { - return 0; -} - -} // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h deleted file mode 100644 index 0d7f5c0..0000000 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h +++ /dev/null
@@ -1,88 +0,0 @@ -// 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. - -#ifndef COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_SERVICE_H_ -#define COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_SERVICE_H_ - -#include <stdint.h> - -#include <memory> -#include <string> - -#include "base/callback.h" -#include "base/files/file_path.h" -#include "base/gtest_prod_util.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "base/sequence_checker.h" -#include "base/values.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_metrics.h" -#include "net/nqe/effective_connection_type.h" - -class PrefService; - -namespace data_reduction_proxy { - -class DataReductionProxySettings; - -// Contains and initializes all Data Reduction Proxy objects that have a -// lifetime based on the UI thread. -class DataReductionProxyService { - public: - // The caller must ensure that |settings|, |prefs|, |request_context|, and - // |io_task_runner| remain alive for the lifetime of the - // |DataReductionProxyService| instance. |prefs| may be null. This instance - // will take ownership of |compression_stats|. - // TODO(jeremyim): DataReductionProxyService should own - // DataReductionProxySettings and not vice versa. - DataReductionProxyService(DataReductionProxySettings* settings, - PrefService* prefs); - - DataReductionProxyService(const DataReductionProxyService&) = delete; - DataReductionProxyService& operator=(const DataReductionProxyService&) = - delete; - - virtual ~DataReductionProxyService(); - - void Shutdown(); - - // Records whether the Data Reduction Proxy is unreachable or not. - void SetUnreachable(bool unreachable); - - // Stores an int64_t value in |prefs_|. - void SetInt64Pref(const std::string& pref_path, int64_t value); - - // Stores a string value in |prefs_|. - void SetStringPref(const std::string& pref_path, const std::string& value); - - void SetSettingsForTesting(DataReductionProxySettings* settings) { - settings_ = settings; - } - - // Returns the percentage of data savings estimate provided by save-data for - // an origin. - double GetSaveDataSavingsPercentEstimate(const std::string& origin) const; - - base::WeakPtr<DataReductionProxyService> GetWeakPtr(); - - private: - FRIEND_TEST_ALL_PREFIXES(DataReductionProxyConfigServiceClientTest, - MultipleAuthFailures); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxyConfigServiceClientTest, - ValidatePersistedClientConfig); - - raw_ptr<DataReductionProxySettings> settings_; - - // A prefs service for storing data. - raw_ptr<PrefService> prefs_; - - SEQUENCE_CHECKER(sequence_checker_); - - base::WeakPtrFactory<DataReductionProxyService> weak_factory_{this}; -}; - -} // namespace data_reduction_proxy - -#endif // COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_SERVICE_H_
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.cc index 2c337bf..099bd76 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.cc
@@ -13,13 +13,7 @@ #include "base/time/clock.h" #include "base/time/default_clock.h" #include "build/build_config.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" -#include "components/prefs/pref_member.h" -#include "components/prefs/pref_service.h" -#include "net/base/network_change_notifier.h" -#include "net/http/http_request_headers.h" namespace { @@ -30,202 +24,28 @@ data_reduction_proxy::switches::kEnableDataReductionProxy); } -// Key of the UMA DataReductionProxy.StartupState histogram. -const char kUMAProxyStartupStateHistogram[] = "DataReductionProxy.StartupState"; - -void RecordSettingsEnabledState( - data_reduction_proxy::DataReductionSettingsEnabledAction action) { - UMA_HISTOGRAM_ENUMERATION( - "DataReductionProxy.EnabledState", action, - data_reduction_proxy::DATA_REDUCTION_SETTINGS_ACTION_BOUNDARY); -} - -// Record the number of days since data reduction proxy was enabled by the -// user. -void RecordDaysSinceEnabledMetric(int days_since_enabled) { - UMA_HISTOGRAM_CUSTOM_COUNTS("DataReductionProxy.DaysSinceEnabled", - days_since_enabled, 0, 365 * 10, 100); -} - } // namespace namespace data_reduction_proxy { DataReductionProxySettings::DataReductionProxySettings( bool is_off_the_record_profile) - : unreachable_(false), - prefs_(nullptr), - clock_(base::DefaultClock::GetInstance()), - is_off_the_record_profile_(is_off_the_record_profile) { + : is_off_the_record_profile_(is_off_the_record_profile) { DCHECK(!is_off_the_record_profile_); } DataReductionProxySettings::~DataReductionProxySettings() = default; -void DataReductionProxySettings::InitDataReductionProxySettings( - PrefService* prefs, - std::unique_ptr<DataReductionProxyService> data_reduction_proxy_service) { - DCHECK(thread_checker_.CalledOnValidThread()); - DCHECK(prefs); - DCHECK(data_reduction_proxy_service); - prefs_ = prefs; - data_reduction_proxy_service_ = std::move(data_reduction_proxy_service); - RecordDataReductionInit(); - - registrar_.Init(prefs_); - registrar_.Add( - prefs::kDataSaverEnabled, - base::BindRepeating(&DataReductionProxySettings::OnProxyEnabledPrefChange, - base::Unretained(this))); -} - -void DataReductionProxySettings::SetCallbackToRegisterSyntheticFieldTrial( - const SyntheticFieldTrialRegistrationCallback& - on_data_reduction_proxy_enabled) { - register_synthetic_field_trial_ = on_data_reduction_proxy_enabled; - RegisterDataReductionProxyFieldTrial(); -} +void DataReductionProxySettings::InitDataReductionProxySettings() {} // static bool DataReductionProxySettings::IsDataSaverEnabledByUser( - bool is_off_the_record_profile, - PrefService* prefs) { + bool is_off_the_record_profile) { if (is_off_the_record_profile) return false; if (ShouldForceEnableDataReductionProxy()) return true; - -#if BUILDFLAG(IS_ANDROID) - return prefs && prefs->GetBoolean(prefs::kDataSaverEnabled); -#else return false; -#endif -} - -// static -void DataReductionProxySettings::SetDataSaverEnabledForTesting( - PrefService* prefs, - bool enabled) { - // Set the command line so that |IsDataSaverEnabledByUser| returns as expected - // on all platforms. - base::CommandLine* cmd = base::CommandLine::ForCurrentProcess(); - if (enabled) { - cmd->AppendSwitch(switches::kEnableDataReductionProxy); - } else { - cmd->RemoveSwitch(switches::kEnableDataReductionProxy); - } - - // Set the pref so that all the pref change callbacks run. - prefs->SetBoolean(prefs::kDataSaverEnabled, enabled); -} - -bool DataReductionProxySettings::IsDataReductionProxyEnabled() const { - return IsDataSaverEnabledByUser(is_off_the_record_profile_, - GetOriginalProfilePrefs()); -} - -bool DataReductionProxySettings::CanUseDataReductionProxy( - const GURL& url) const { - return url.is_valid() && url.scheme() == url::kHttpScheme && - IsDataReductionProxyEnabled(); -} - -bool DataReductionProxySettings::IsDataReductionProxyManaged() { - const PrefService::Preference* pref = - GetOriginalProfilePrefs()->FindPreference(prefs::kDataSaverEnabled); - return pref && pref->IsManaged(); -} - -void DataReductionProxySettings::SetDataReductionProxyEnabled(bool enabled) { - DCHECK(thread_checker_.CalledOnValidThread()); - if (GetOriginalProfilePrefs()->GetBoolean(prefs::kDataSaverEnabled) != - enabled) { - GetOriginalProfilePrefs()->SetBoolean(prefs::kDataSaverEnabled, enabled); - OnProxyEnabledPrefChange(); - } -} - -void DataReductionProxySettings::SetUnreachable(bool unreachable) { - unreachable_ = unreachable; -} - -bool DataReductionProxySettings::IsDataReductionProxyUnreachable() { - DCHECK(thread_checker_.CalledOnValidThread()); - return unreachable_; -} - -PrefService* DataReductionProxySettings::GetOriginalProfilePrefs() const { - DCHECK(thread_checker_.CalledOnValidThread()); - return prefs_; -} - -base::Time DataReductionProxySettings::GetLastEnabledTime() const { - PrefService* prefs = GetOriginalProfilePrefs(); - int64_t last_enabled_time = - prefs->GetInt64(prefs::kDataReductionProxyLastEnabledTime); - if (last_enabled_time <= 0) - return base::Time(); - return base::Time::FromInternalValue(last_enabled_time); -} - -void DataReductionProxySettings::RegisterDataReductionProxyFieldTrial() { - register_synthetic_field_trial_.Run( - "SyntheticDataReductionProxySetting", - IsDataReductionProxyEnabled() ? "Enabled" : "Disabled"); -} - -void DataReductionProxySettings::OnProxyEnabledPrefChange() { - DCHECK(thread_checker_.CalledOnValidThread()); - if (!register_synthetic_field_trial_.is_null()) { - RegisterDataReductionProxyFieldTrial(); - } - MaybeActivateDataReductionProxy(false); - - bool enabled = IsDataReductionProxyEnabled(); - for (auto& observer : observers_) - observer.OnDataSaverEnabledChanged(enabled); -} - -void DataReductionProxySettings::MaybeActivateDataReductionProxy( - bool at_startup) { - DCHECK(thread_checker_.CalledOnValidThread()); - PrefService* prefs = GetOriginalProfilePrefs(); - // Do nothing if prefs have not been initialized. This allows unit testing - // of profile related code without having to initialize data reduction proxy - // related prefs. - if (!prefs) - return; - - bool enabled = IsDataSaverEnabledByUser(is_off_the_record_profile_, prefs); - - if (enabled && at_startup) { - const auto last_enabled_time = GetLastEnabledTime(); - if (!last_enabled_time.is_null()) { - // Record the metric only if the time when data reduction proxy was - // enabled is available. - RecordDaysSinceEnabledMetric( - (clock_->Now() - last_enabled_time).InDays()); - } - } - - if (enabled && - !prefs->GetBoolean(prefs::kDataReductionProxyWasEnabledBefore)) { - prefs->SetBoolean(prefs::kDataReductionProxyWasEnabledBefore, true); - } - if (!at_startup) { - if (IsDataReductionProxyEnabled()) { - RecordSettingsEnabledState(DATA_REDUCTION_SETTINGS_ACTION_OFF_TO_ON); - - // Data reduction proxy has been enabled by the user. Record the number of - // days since the data reduction proxy has been enabled as zero, and - // store the current time in the pref. - prefs->SetInt64(prefs::kDataReductionProxyLastEnabledTime, - clock_->Now().ToInternalValue()); - RecordDaysSinceEnabledMetric(0); - } else { - RecordSettingsEnabledState(DATA_REDUCTION_SETTINGS_ACTION_ON_TO_OFF); - } - } } void DataReductionProxySettings::AddDataReductionProxySettingsObserver( @@ -240,17 +60,4 @@ observers_.RemoveObserver(observer); } -// Metrics methods -void DataReductionProxySettings::RecordDataReductionInit() const { - DCHECK(thread_checker_.CalledOnValidThread()); - RecordStartupState(IsDataReductionProxyEnabled() ? PROXY_ENABLED - : PROXY_DISABLED); -} - -void DataReductionProxySettings::RecordStartupState( - ProxyStartupState state) const { - UMA_HISTOGRAM_ENUMERATION(kUMAProxyStartupStateHistogram, state, - PROXY_STARTUP_STATE_COUNT); -} - } // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h index 914b0806..c1729d5 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h
@@ -5,10 +5,6 @@ #ifndef COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_SETTINGS_H_ #define COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_SETTINGS_H_ -#include <stdint.h> - -#include <memory> - #include "base/callback.h" #include "base/compiler_specific.h" #include "base/gtest_prod_util.h" @@ -16,40 +12,10 @@ #include "base/observer_list.h" #include "base/threading/thread_checker.h" #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_metrics.h" -#include "components/prefs/pref_change_registrar.h" -#include "components/prefs/pref_member.h" -#include "net/http/http_request_headers.h" #include "url/gurl.h" -class PrefService; - -namespace base { -class Clock; -} - namespace data_reduction_proxy { -class DataReductionProxyService; - -// Values of the UMA DataReductionProxy.StartupState histogram. -// This enum must remain synchronized with DataReductionProxyStartupState -// in metrics/histograms/histograms.xml. -enum ProxyStartupState { - PROXY_NOT_AVAILABLE = 0, - PROXY_DISABLED, - PROXY_ENABLED, - PROXY_STARTUP_STATE_COUNT, -}; - -// Values of the UMA DataReductionProxy.EnabledState histogram. -// This enum must remain synchronized with DataReductionProxyEnabledState -// in metrics/histograms/histograms.xml. -enum DataReductionSettingsEnabledAction { - DATA_REDUCTION_SETTINGS_ACTION_OFF_TO_ON = 0, - DATA_REDUCTION_SETTINGS_ACTION_ON_TO_OFF, - DATA_REDUCTION_SETTINGS_ACTION_BOUNDARY, -}; - // Classes may derive from |DataReductionProxySettingsObserver| and register as // an observer of |DataReductionProxySettings| to get notified when the proxy // request headers change or when the DRPSettings class is initialized. @@ -64,9 +30,6 @@ // be called from there. class DataReductionProxySettings { public: - using SyntheticFieldTrialRegistrationCallback = - base::RepeatingCallback<bool(base::StringPiece, base::StringPiece)>; - explicit DataReductionProxySettings(bool is_off_the_record_profile); DataReductionProxySettings(const DataReductionProxySettings&) = delete; @@ -78,62 +41,16 @@ // Initializes the Data Reduction Proxy with the profile prefs. The caller // must ensure that all parameters remain alive for the lifetime of the // |DataReductionProxySettings| instance. - void InitDataReductionProxySettings( - PrefService* prefs, - std::unique_ptr<DataReductionProxyService> data_reduction_proxy_service); - - // Sets the |register_synthetic_field_trial_| callback and runs to register - // the DataReductionProxyEnabled synthetic field trial. - void SetCallbackToRegisterSyntheticFieldTrial( - const SyntheticFieldTrialRegistrationCallback& - on_data_reduction_proxy_enabled); + void InitDataReductionProxySettings(); // Returns true if the Data Saver feature is enabled by the user on Android. // This checks only the Data Saver prefs on Android or forcing flag on any // platform. Does not check any holdback experiments. Note that this may be // different from the value of |IsDataReductionProxyEnabled|. - static bool IsDataSaverEnabledByUser(bool is_off_the_record_profile, - PrefService* prefs); + static bool IsDataSaverEnabledByUser(bool is_off_the_record_profile); // Enables or disables Data Saver, regardless of platform. - static void SetDataSaverEnabledForTesting(PrefService* prefs, bool enabled); - - // Returns true if the Data Reduction HTTP Proxy is enabled. Note that this - // may be different from the value of |IsDataSaverEnabledByUser|. - bool IsDataReductionProxyEnabled() const; - - // Returns true if the proxy can be used for the given url. This method does - // not take into account the proxy config or proxy retry list, so it can - // return true even when the proxy will not be used. Specifically, if - // another proxy configuration overrides use of data reduction proxy, or - // if data reduction proxy is in proxy retry list, then data reduction proxy - // will not be used, but this method will still return true. If this method - // returns false, then we are guaranteed that data reduction proxy will not be - // used. - bool CanUseDataReductionProxy(const GURL& url) const; - - // Returns true if the proxy is managed by an adminstrator's policy. - bool IsDataReductionProxyManaged(); - - // Enables or disables the data reduction proxy. - void SetDataReductionProxyEnabled(bool enabled); - - // Records that the data reduction proxy is unreachable or not. - void SetUnreachable(bool unreachable); - - // Returns whether the data reduction proxy is unreachable. Returns true - // if no request has successfully completed through proxy, even though atleast - // some of them should have. - bool IsDataReductionProxyUnreachable(); - - // Configures data reduction proxy. |at_startup| is true when this method is - // called in response to creating or loading a new profile. - void MaybeActivateDataReductionProxy(bool at_startup); - - // Returns the time LiteMode was last enabled. This is reset whenever LiteMode - // is disabled and re-enabled from settings. Null time is returned when - // LiteMode has never been enabled. - base::Time GetLastEnabledTime() const; + static void SetDataSaverEnabledForTesting(bool enabled); // Adds an observer that is notified every time the proxy request headers // change. @@ -145,78 +62,7 @@ void RemoveDataReductionProxySettingsObserver( DataReductionProxySettingsObserver* observer); - DataReductionProxyService* data_reduction_proxy_service() { - return data_reduction_proxy_service_.get(); - } - - protected: - void InitPrefMembers(); - - // Virtualized for unit test support. - virtual PrefService* GetOriginalProfilePrefs() const; - - // Metrics method. Subclasses should override if they wish to provide - // alternatives. - virtual void RecordDataReductionInit() const; - - // Virtualized for mocking. Records UMA specifying whether the proxy was - // enabled or disabled at startup. - virtual void RecordStartupState( - data_reduction_proxy::ProxyStartupState state) const; - private: - friend class DataReductionProxySettingsTestBase; - friend class DataReductionProxySettingsTest; - friend class DataReductionProxyTestContext; - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestResetDataReductionStatistics); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestIsProxyEnabledOrManaged); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestCanUseDataReductionProxy); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, TestContentLengths); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestGetDailyContentLengths); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestMaybeActivateDataReductionProxy); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestOnProxyEnabledPrefChange); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestInitDataReductionProxyOn); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestInitDataReductionProxyOff); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - CheckInitMetricsWhenNotAllowed); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestSettingsEnabledStateHistograms); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestDaysSinceEnabled); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestDaysSinceEnabledWithTestClock); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestDaysSinceEnabledExistingUser); - FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest, - TestDaysSinceSavingsCleared); - - // Registers the trial "SyntheticDataReductionProxySetting" with the group - // "Enabled" or "Disabled". Indicates whether the proxy is turned on or not. - void RegisterDataReductionProxyFieldTrial(); - - void OnProxyEnabledPrefChange(); - - bool unreachable_; - - std::unique_ptr<DataReductionProxyService> data_reduction_proxy_service_; - - raw_ptr<PrefService> prefs_; - - PrefChangeRegistrar registrar_; - - SyntheticFieldTrialRegistrationCallback register_synthetic_field_trial_; - - // Should not be null. - raw_ptr<base::Clock> clock_; - // Observers to notify when the proxy request headers change or |this| is // initialized. base::ObserverList<DataReductionProxySettingsObserver>::Unchecked observers_;
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_test_utils.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_test_utils.cc deleted file mode 100644 index a0ede42..0000000 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_test_utils.cc +++ /dev/null
@@ -1,119 +0,0 @@ -// Copyright 2014 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/data_reduction_proxy/core/browser/data_reduction_proxy_settings_test_utils.h" - -#include <stdint.h> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_piece.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" -#include "components/prefs/pref_registry_simple.h" -#include "components/prefs/scoped_user_pref_update.h" -#include "components/prefs/testing_pref_service.h" - -using testing::_; -using testing::AnyNumber; -using testing::Return; - -namespace { - -const char kProxy[] = "proxy"; - -} // namespace - -namespace data_reduction_proxy { - -DataReductionProxySettingsTestBase::DataReductionProxySettingsTestBase() {} - -DataReductionProxySettingsTestBase::~DataReductionProxySettingsTestBase() {} - -// testing::Test implementation: -void DataReductionProxySettingsTestBase::SetUp() { - test_context_ = - DataReductionProxyTestContext::Builder() - .WithMockConfig() - .WithMockDataReductionProxyService() - .SkipSettingsInitialization() - .Build(); - - test_context_->SetDataReductionProxyEnabled(false); - TestingPrefServiceSimple* pref_service = test_context_->pref_service(); - pref_service->registry()->RegisterDictionaryPref(kProxy); - pref_service->SetBoolean(prefs::kDataReductionProxyWasEnabledBefore, false); - - ResetSettings(nullptr); -} - -template <class C> -void DataReductionProxySettingsTestBase::ResetSettings(base::Clock* clock) { - MockDataReductionProxySettings<C>* settings = - new MockDataReductionProxySettings<C>(); - if (settings_) { - settings->data_reduction_proxy_service_ = - std::move(settings_->data_reduction_proxy_service_); - } else { - settings->data_reduction_proxy_service_ = test_context_->TakeService(); - } - settings->data_reduction_proxy_service_->SetSettingsForTesting(settings); - settings->prefs_ = test_context_->pref_service(); - if (clock) - settings->clock_ = clock; - EXPECT_CALL(*settings, GetOriginalProfilePrefs()) - .Times(AnyNumber()) - .WillRepeatedly(Return(test_context_->pref_service())); - EXPECT_CALL(*settings, GetLocalStatePrefs()) - .Times(AnyNumber()) - .WillRepeatedly(Return(test_context_->pref_service())); - settings_.reset(settings); -} - -// Explicitly generate required instantiations. -template void DataReductionProxySettingsTestBase::ResetSettings< - DataReductionProxySettings>(base::Clock* clock); - -void DataReductionProxySettingsTestBase::CheckOnPrefChange( - bool enabled, - bool expected_enabled, - bool managed) { - if (managed) { - test_context_->pref_service()->SetManagedPref( - prefs::kDataSaverEnabled, std::make_unique<base::Value>(enabled)); - } else { - test_context_->SetDataReductionProxyEnabled(enabled); - } - test_context_->RunUntilIdle(); - // Never expect the proxy to be restricted for pref change tests. -} - -void DataReductionProxySettingsTestBase::InitDataReductionProxy( - bool enabled_at_startup) { - settings_->InitDataReductionProxySettings( - test_context_->pref_service(), - std::move(settings_->data_reduction_proxy_service_)); - settings_->SetCallbackToRegisterSyntheticFieldTrial(base::BindRepeating( - &DataReductionProxySettingsTestBase::OnSyntheticFieldTrialRegistration, - base::Unretained(this))); - - test_context_->RunUntilIdle(); -} - -void DataReductionProxySettingsTestBase::CheckDataReductionProxySyntheticTrial( - bool enabled) { - EXPECT_EQ(enabled ? "Enabled" : "Disabled", - synthetic_field_trials_["SyntheticDataReductionProxySetting"]); -} - -bool DataReductionProxySettingsTestBase::OnSyntheticFieldTrialRegistration( - base::StringPiece trial_name, - base::StringPiece group_name) { - synthetic_field_trials_[std::string(trial_name)] = std::string(group_name); - return true; -} - -} // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_test_utils.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_test_utils.h deleted file mode 100644 index 939bf810..0000000 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_test_utils.h +++ /dev/null
@@ -1,87 +0,0 @@ -// Copyright 2014 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_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_SETTINGS_TEST_UTILS_H_ -#define COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_SETTINGS_TEST_UTILS_H_ - -#include <map> -#include <memory> -#include <string> -#include <utility> - -#include "base/message_loop/message_pump_type.h" -#include "base/strings/string_piece.h" -#include "base/task/single_thread_task_executor.h" -#include "base/time/clock.h" -#include "base/time/time.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" -#include "components/prefs/testing_pref_service.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -class PrefService; - -namespace data_reduction_proxy { - -class DataReductionProxyTestContext; - -template <class C> -class MockDataReductionProxySettings : public C { - public: - MockDataReductionProxySettings<C>() : C(false) {} - MOCK_CONST_METHOD0(GetOriginalProfilePrefs, PrefService*()); - MOCK_METHOD0(GetLocalStatePrefs, PrefService*()); - MOCK_CONST_METHOD1(RecordStartupState, void(ProxyStartupState state)); -}; - -class DataReductionProxySettingsTestBase : public testing::Test { - public: - static void AddTestProxyToCommandLine(); - - DataReductionProxySettingsTestBase(); - ~DataReductionProxySettingsTestBase() override; - - void AddProxyToCommandLine(); - - void SetUp() override; - - template <class C> - void ResetSettings(base::Clock* clock); - virtual void ResetSettings(base::Clock* clock) = 0; - - void CheckMaybeActivateDataReductionProxy(bool initially_enabled, - bool request_succeeded, - bool expected_enabled, - bool expected_restricted, - bool expected_fallback_restricted); - void CheckOnPrefChange(bool enabled, bool expected_enabled, bool managed); - void InitWithStatisticsPrefs(); - void InitDataReductionProxy(bool enabled_at_startup); - void CheckDataReductionProxySyntheticTrial(bool enabled); - bool OnSyntheticFieldTrialRegistration(base::StringPiece trial_name, - base::StringPiece group_name); - - protected: - base::SingleThreadTaskExecutor io_task_executor_{base::MessagePumpType::IO}; - std::unique_ptr<DataReductionProxyTestContext> test_context_; - std::unique_ptr<DataReductionProxySettings> settings_; - std::map<std::string, std::string> synthetic_field_trials_; -}; - -// Test implementations should be subclasses of an instantiation of this -// class parameterized for whatever DataReductionProxySettings class -// is being tested. -template <class C> -class ConcreteDataReductionProxySettingsTest - : public DataReductionProxySettingsTestBase { - public: - typedef MockDataReductionProxySettings<C> MockSettings; - void ResetSettings(base::Clock* clock) override { - return DataReductionProxySettingsTestBase::ResetSettings<C>(clock); - } -}; - -} // namespace data_reduction_proxy - -#endif // COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_SETTINGS_TEST_UTILS_H_
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_unittest.cc deleted file mode 100644 index b65659fd..0000000 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_unittest.cc +++ /dev/null
@@ -1,268 +0,0 @@ -// Copyright 2014 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/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" - -#include <stddef.h> -#include <stdint.h> - -#include "base/command_line.h" -#include "base/metrics/field_trial.h" -#include "base/metrics/histogram_samples.h" -#include "base/test/metrics/histogram_tester.h" -#include "base/test/mock_entropy_provider.h" -#include "base/test/simple_test_clock.h" -#include "base/test/task_environment.h" -#include "base/time/clock.h" -#include "base/time/default_clock.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_test_utils.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" -#include "components/prefs/pref_registry_simple.h" -#include "net/base/proxy_server.h" -#include "net/http/http_util.h" -#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" -#include "services/network/test/test_url_loader_factory.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace data_reduction_proxy { - -class DataReductionProxySettingsTest - : public ConcreteDataReductionProxySettingsTest< - DataReductionProxySettings> { - public: - void CheckMaybeActivateDataReductionProxy(bool initially_enabled, - bool request_succeeded, - bool expected_enabled, - bool expected_restricted, - bool expected_fallback_restricted) { - test_context_->SetDataReductionProxyEnabled(initially_enabled); - settings_->MaybeActivateDataReductionProxy(false); - test_context_->RunUntilIdle(); - } -}; - -TEST(DataReductionProxySettingsStandaloneTest, TestIsProxyEnabledOrManaged) { - base::test::SingleThreadTaskEnvironment task_environment{ - base::test::SingleThreadTaskEnvironment::MainThreadType::IO}; - std::unique_ptr<DataReductionProxyTestContext> drp_test_context = - DataReductionProxyTestContext::Builder() - .WithMockConfig() - .WithMockDataReductionProxyService() - .SkipSettingsInitialization() - .Build(); - - drp_test_context->InitSettings(); - - DataReductionProxySettings* settings = drp_test_context->settings(); - - drp_test_context->SetDataReductionProxyEnabled(true); - EXPECT_TRUE(settings->IsDataReductionProxyEnabled()); - EXPECT_FALSE(settings->IsDataReductionProxyManaged()); - - drp_test_context->SetDataReductionProxyEnabled(false); - EXPECT_FALSE(settings->IsDataReductionProxyEnabled()); - EXPECT_FALSE(settings->IsDataReductionProxyManaged()); - - drp_test_context->SetDataReductionProxyEnabled(false); - drp_test_context->pref_service()->SetManagedPref( - prefs::kDataSaverEnabled, std::make_unique<base::Value>(false)); - EXPECT_FALSE(settings->IsDataReductionProxyEnabled()); - EXPECT_TRUE(settings->IsDataReductionProxyManaged()); - - drp_test_context->SetDataReductionProxyEnabled(true); - drp_test_context->pref_service()->SetManagedPref( - prefs::kDataSaverEnabled, std::make_unique<base::Value>(true)); - EXPECT_TRUE(settings->IsDataReductionProxyEnabled()); - EXPECT_TRUE(settings->IsDataReductionProxyManaged()); - - drp_test_context->RunUntilIdle(); -} - - -TEST_F(DataReductionProxySettingsTest, TestMaybeActivateDataReductionProxy) { - // Initialize the pref member in |settings_| without the usual callback - // so it won't trigger MaybeActivateDataReductionProxy when the pref value - // is set. - - // TODO(bengr): Test enabling/disabling while a secure proxy check is - // outstanding. - // The proxy is enabled and unrestricted initially. - // Request succeeded but with bad response, expect proxy to be restricted. - CheckMaybeActivateDataReductionProxy(true, true, true, true, false); - // Request succeeded with valid response, expect proxy to be unrestricted. - CheckMaybeActivateDataReductionProxy(true, true, true, false, false); - // Request failed, expect proxy to be enabled but restricted. - CheckMaybeActivateDataReductionProxy(true, false, true, true, false); - // The proxy is disabled initially. No secure proxy checks should take place, - // and so the state should not change. - CheckMaybeActivateDataReductionProxy(false, true, false, false, false); -} - -TEST_F(DataReductionProxySettingsTest, TestInitDataReductionProxyOn) { - MockSettings* settings = static_cast<MockSettings*>(settings_.get()); - EXPECT_CALL(*settings, RecordStartupState(PROXY_ENABLED)); - - test_context_->SetDataReductionProxyEnabled(true); - InitDataReductionProxy(true); - CheckDataReductionProxySyntheticTrial(true); -} - -TEST_F(DataReductionProxySettingsTest, TestInitDataReductionProxyOff) { - // InitDataReductionProxySettings with the preference off will directly call - // LogProxyState. - MockSettings* settings = static_cast<MockSettings*>(settings_.get()); - EXPECT_CALL(*settings, RecordStartupState(PROXY_DISABLED)); - - test_context_->SetDataReductionProxyEnabled(false); - InitDataReductionProxy(false); - CheckDataReductionProxySyntheticTrial(false); -} - -TEST_F(DataReductionProxySettingsTest, TestEnableProxyFromCommandLine) { - MockSettings* settings = static_cast<MockSettings*>(settings_.get()); - EXPECT_CALL(*settings, RecordStartupState(PROXY_ENABLED)); - - base::CommandLine::ForCurrentProcess()->AppendSwitch( - switches::kEnableDataReductionProxy); - InitDataReductionProxy(true); - CheckDataReductionProxySyntheticTrial(true); -} - -TEST_F(DataReductionProxySettingsTest, TestSetDataReductionProxyEnabled) { - MockSettings* settings = static_cast<MockSettings*>(settings_.get()); - EXPECT_CALL(*settings, RecordStartupState(PROXY_ENABLED)); - test_context_->SetDataReductionProxyEnabled(true); - InitDataReductionProxy(true); - - test_context_->SetDataReductionProxyEnabled(false); - test_context_->RunUntilIdle(); - CheckDataReductionProxySyntheticTrial(false); - - test_context_->SetDataReductionProxyEnabled(true); - test_context_->RunUntilIdle(); - CheckDataReductionProxySyntheticTrial(true); -} - -TEST_F(DataReductionProxySettingsTest, TestSettingsEnabledStateHistograms) { - const char kUMAEnabledState[] = "DataReductionProxy.EnabledState"; - base::HistogramTester histogram_tester; - - // No settings state histograms should be recorded during startup. - test_context_->RunUntilIdle(); - histogram_tester.ExpectTotalCount(kUMAEnabledState, 0); - - test_context_->SetDataReductionProxyEnabled(true); - settings_->MaybeActivateDataReductionProxy(false); - test_context_->RunUntilIdle(); - histogram_tester.ExpectBucketCount( - kUMAEnabledState, DATA_REDUCTION_SETTINGS_ACTION_OFF_TO_ON, 1); - histogram_tester.ExpectBucketCount( - kUMAEnabledState, DATA_REDUCTION_SETTINGS_ACTION_ON_TO_OFF, 0); - - test_context_->SetDataReductionProxyEnabled(false); - settings_->MaybeActivateDataReductionProxy(false); - test_context_->RunUntilIdle(); - histogram_tester.ExpectBucketCount( - kUMAEnabledState, DATA_REDUCTION_SETTINGS_ACTION_OFF_TO_ON, 1); - histogram_tester.ExpectBucketCount( - kUMAEnabledState, DATA_REDUCTION_SETTINGS_ACTION_ON_TO_OFF, 1); -} - -// Verify that the UMA metric and the pref is recorded correctly when the user -// enables the data reduction proxy. -TEST_F(DataReductionProxySettingsTest, TestDaysSinceEnabledWithTestClock) { - const char kUMAEnabledState[] = "DataReductionProxy.DaysSinceEnabled"; - base::SimpleTestClock clock; - clock.Advance(base::Days(1)); - ResetSettings(&clock); - - base::Time last_enabled_time = clock.Now(); - - { - base::HistogramTester histogram_tester; - - test_context_->RunUntilIdle(); - histogram_tester.ExpectTotalCount(kUMAEnabledState, 0); - - // Enable data reduction proxy. The metric should be recorded. - test_context_->SetDataReductionProxyEnabled(true); - settings_->MaybeActivateDataReductionProxy(false); - test_context_->RunUntilIdle(); - - last_enabled_time = clock.Now(); - - EXPECT_EQ( - last_enabled_time, - base::Time::FromInternalValue(test_context_->pref_service()->GetInt64( - prefs::kDataReductionProxyLastEnabledTime))); - histogram_tester.ExpectUniqueSample(kUMAEnabledState, 0, 1); - } - - { - // Simulate turning off and on of data reduction proxy while Chromium is - // running. - test_context_->SetDataReductionProxyEnabled(false); - settings_->MaybeActivateDataReductionProxy(false); - clock.Advance(base::Days(1)); - last_enabled_time = clock.Now(); - - test_context_->SetDataReductionProxyEnabled(true); - base::HistogramTester histogram_tester; - settings_->MaybeActivateDataReductionProxy(false /* at_startup */); - test_context_->RunUntilIdle(); - histogram_tester.ExpectUniqueSample(kUMAEnabledState, 0, 1); - EXPECT_EQ( - last_enabled_time, - base::Time::FromInternalValue(test_context_->pref_service()->GetInt64( - prefs::kDataReductionProxyLastEnabledTime))); - } - - { - // Advance clock by a random number of days. - int advance_clock_days = 42; - clock.Advance(base::Days(advance_clock_days)); - base::HistogramTester histogram_tester; - // Simulate Chromium start up. Data reduction proxy was enabled - // |advance_clock_days| ago. - settings_->MaybeActivateDataReductionProxy(true /* at_startup */); - test_context_->RunUntilIdle(); - histogram_tester.ExpectUniqueSample(kUMAEnabledState, advance_clock_days, - 1); - EXPECT_EQ( - last_enabled_time, - base::Time::FromInternalValue(test_context_->pref_service()->GetInt64( - prefs::kDataReductionProxyLastEnabledTime))); - } -} - -// Verify that the pref and the UMA metric are not recorded for existing users -// that already have data reduction proxy on. -TEST(DataReductionProxySettingsStandaloneTest, - TestDaysSinceEnabledExistingUser) { - base::test::SingleThreadTaskEnvironment task_environment{ - base::test::SingleThreadTaskEnvironment::MainThreadType::IO}; - std::unique_ptr<DataReductionProxyTestContext> drp_test_context = - DataReductionProxyTestContext::Builder() - .WithMockConfig() - .WithMockDataReductionProxyService() - .SkipSettingsInitialization() - .Build(); - - drp_test_context->InitSettings(); - - base::HistogramTester histogram_tester; - - // Simulate Chromium startup with data reduction proxy already enabled. - drp_test_context->settings()->MaybeActivateDataReductionProxy( - true /* at_startup */); - drp_test_context->RunUntilIdle(); - histogram_tester.ExpectTotalCount("DataReductionProxy.DaysSinceEnabled", 0); - EXPECT_EQ(0, drp_test_context->pref_service()->GetInt64( - prefs::kDataReductionProxyLastEnabledTime)); -} - -} // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.cc deleted file mode 100644 index 62d990b..0000000 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.cc +++ /dev/null
@@ -1,250 +0,0 @@ -// 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. - -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h" - -#include <map> -#include <memory> -#include <utility> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/memory/ptr_util.h" -#include "base/run_loop.h" -#include "base/strings/string_piece.h" -#include "base/threading/thread_task_runner_handle.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" -#include "components/prefs/pref_registry_simple.h" -#include "components/prefs/testing_pref_service.h" -#include "net/base/network_delegate_impl.h" -#include "net/proxy_resolution/proxy_config.h" -#include "net/proxy_resolution/proxy_info.h" -#include "net/proxy_resolution/proxy_list.h" -#include "services/network/test/test_network_connection_tracker.h" -#include "services/network/test/test_network_quality_tracker.h" -#include "url/gurl.h" - -namespace { - -enum TestContextOptions { - // Permits mocking of the underlying |DataReductionProxyConfig|. - USE_MOCK_CONFIG = 0x1, - // Construct, but do not initialize the |DataReductionProxySettings| object. - // Primarily used for testing of the |DataReductionProxySettings| object - // itself. - SKIP_SETTINGS_INITIALIZATION = 0x2, - // Permits mocking of the underlying |DataReductionProxyService|. - USE_MOCK_SERVICE = 0x4, -}; - -} // namespace - -namespace data_reduction_proxy { - -MockDataReductionProxyService::MockDataReductionProxyService( - DataReductionProxySettings* settings, - PrefService* prefs, - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) - : DataReductionProxyService(settings, prefs) {} - -MockDataReductionProxyService::~MockDataReductionProxyService() {} - -TestDataReductionProxyService::TestDataReductionProxyService( - DataReductionProxySettings* settings, - PrefService* prefs, - const scoped_refptr<base::SequencedTaskRunner>& db_task_runner) - : DataReductionProxyService(settings, prefs) {} - -TestDataReductionProxyService::~TestDataReductionProxyService() {} - -DataReductionProxyTestContext::Builder::Builder() - : use_mock_config_(false), - use_mock_service_(false), - skip_settings_initialization_(false) {} - -DataReductionProxyTestContext::Builder::~Builder() {} - -DataReductionProxyTestContext::Builder& -DataReductionProxyTestContext::Builder::WithMockConfig() { - use_mock_config_ = true; - return *this; -} - -DataReductionProxyTestContext::Builder& -DataReductionProxyTestContext::Builder::WithMockDataReductionProxyService() { - use_mock_service_ = true; - return *this; -} - -DataReductionProxyTestContext::Builder& -DataReductionProxyTestContext::Builder::SkipSettingsInitialization() { - skip_settings_initialization_ = true; - return *this; -} - -DataReductionProxyTestContext::Builder& -DataReductionProxyTestContext::Builder::WithSettings( - std::unique_ptr<DataReductionProxySettings> settings) { - settings_ = std::move(settings); - return *this; -} - -std::unique_ptr<DataReductionProxyTestContext> -DataReductionProxyTestContext::Builder::Build() { - unsigned int test_context_flags = 0; - scoped_refptr<base::SingleThreadTaskRunner> task_runner = - base::ThreadTaskRunnerHandle::Get(); - std::unique_ptr<TestingPrefServiceSimple> pref_service( - new TestingPrefServiceSimple()); - - if (use_mock_config_) { - test_context_flags |= USE_MOCK_CONFIG; - } else { - test_context_flags ^= USE_MOCK_CONFIG; - } - - - if (!settings_) - settings_ = std::make_unique<DataReductionProxySettings>(false); - if (skip_settings_initialization_) { - test_context_flags |= SKIP_SETTINGS_INITIALIZATION; - } - - pref_service->registry()->RegisterBooleanPref(prefs::kDataSaverEnabled, - false); - RegisterSimpleProfilePrefs(pref_service->registry()); - - std::unique_ptr<DataReductionProxyService> service; - if (use_mock_service_) { - test_context_flags |= USE_MOCK_SERVICE; - service = std::make_unique<MockDataReductionProxyService>( - settings_.get(), pref_service.get(), task_runner); - } else { - service = std::make_unique<TestDataReductionProxyService>( - settings_.get(), pref_service.get(), task_runner); - } - - std::unique_ptr<DataReductionProxyTestContext> test_context( - new DataReductionProxyTestContext( - task_runner, std::move(pref_service), std::move(settings_), - std::move(service), test_context_flags)); - - if (!skip_settings_initialization_) - test_context->InitSettingsWithoutCheck(); - - return test_context; -} - -DataReductionProxyTestContext::DataReductionProxyTestContext( - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - std::unique_ptr<TestingPrefServiceSimple> simple_pref_service, - std::unique_ptr<DataReductionProxySettings> settings, - std::unique_ptr<DataReductionProxyService> service, - unsigned int test_context_flags) - : test_context_flags_(test_context_flags), - task_runner_(task_runner), - simple_pref_service_(std::move(simple_pref_service)), - settings_(std::move(settings)), - service_(std::move(service)) { - if (service_) - data_reduction_proxy_service_ = service_.get(); - else - data_reduction_proxy_service_ = settings_->data_reduction_proxy_service(); -} - -DataReductionProxyTestContext::~DataReductionProxyTestContext() { - DestroySettings(); -} - -void DataReductionProxyTestContext::RegisterDataReductionProxyEnabledPref() { - simple_pref_service_->registry()->RegisterBooleanPref( - prefs::kDataSaverEnabled, false); -} - -void DataReductionProxyTestContext::SetDataReductionProxyEnabled(bool enabled) { - // Set the command line so that |IsDataSaverEnabledByUser| returns as expected - // on all platforms. - base::CommandLine* cmd = base::CommandLine::ForCurrentProcess(); - if (enabled) { - cmd->AppendSwitch(switches::kEnableDataReductionProxy); - } else { - cmd->RemoveSwitch(switches::kEnableDataReductionProxy); - } - - simple_pref_service_->SetBoolean(prefs::kDataSaverEnabled, enabled); -} - -bool DataReductionProxyTestContext::IsDataReductionProxyEnabled() const { - return simple_pref_service_->GetBoolean(prefs::kDataSaverEnabled); -} - -void DataReductionProxyTestContext::RunUntilIdle() { - base::RunLoop().RunUntilIdle(); -} - -void DataReductionProxyTestContext::InitSettings() { - DCHECK(test_context_flags_ & SKIP_SETTINGS_INITIALIZATION); - InitSettingsWithoutCheck(); -} - -void DataReductionProxyTestContext::DestroySettings() { - // Force destruction of |DBDataOwner|, which lives on DB task runner and is - // indirectly owned by |settings_|. - if (settings_) { - settings_.reset(); - RunUntilIdle(); - } -} - -void DataReductionProxyTestContext::InitSettingsWithoutCheck() { - DCHECK(service_); - settings_->InitDataReductionProxySettings(simple_pref_service_.get(), - std::move(service_)); -} - -std::unique_ptr<DataReductionProxyService> -DataReductionProxyTestContext::TakeService() { - DCHECK(service_); - DCHECK(test_context_flags_ & SKIP_SETTINGS_INITIALIZATION); - return std::move(service_); -} - -void DataReductionProxyTestContext:: - EnableDataReductionProxyWithSecureProxyCheckSuccess() { - // |settings_| needs to have been initialized, since a - // |DataReductionProxyService| is needed in order to issue the secure proxy - // check. - DCHECK(data_reduction_proxy_service()); - - // Set the pref to cause the secure proxy check to be issued. - SetDataReductionProxyEnabled(true); - RunUntilIdle(); -} - - - -DataReductionProxyService* -DataReductionProxyTestContext::data_reduction_proxy_service() const { - return data_reduction_proxy_service_; -} - -TestDataReductionProxyService* -DataReductionProxyTestContext::test_data_reduction_proxy_service() const { - DCHECK(!(test_context_flags_ & USE_MOCK_SERVICE)); - return static_cast<TestDataReductionProxyService*>( - data_reduction_proxy_service()); -} - -MockDataReductionProxyService* -DataReductionProxyTestContext::mock_data_reduction_proxy_service() const { - DCHECK(!(test_context_flags_ & SKIP_SETTINGS_INITIALIZATION)); - DCHECK(test_context_flags_ & USE_MOCK_SERVICE); - return static_cast<MockDataReductionProxyService*>( - data_reduction_proxy_service()); -} - -} // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h deleted file mode 100644 index 6e58728..0000000 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h +++ /dev/null
@@ -1,171 +0,0 @@ -// 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. - -#ifndef COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_TEST_UTILS_H_ -#define COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_TEST_UTILS_H_ - -#include <stddef.h> -#include <stdint.h> - -#include <memory> -#include <string> - -#include "base/memory/raw_ptr.h" -#include "base/memory/ref_counted.h" -#include "base/strings/string_piece.h" -#include "base/task/single_thread_task_runner.h" -#include "base/time/clock.h" -#include "base/time/tick_clock.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h" -#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_test_utils.h" -#include "components/prefs/pref_registry_simple.h" -#include "components/prefs/testing_pref_service.h" -#include "net/base/backoff_entry.h" -#include "net/base/proxy_server.h" -#include "testing/gmock/include/gmock/gmock.h" - -class TestingPrefServiceSimple; - -namespace data_reduction_proxy { - -class DataReductionProxySettings; - - -// Test version of |DataReductionProxyService|, which permits mocking of various -// methods. -class MockDataReductionProxyService : public DataReductionProxyService { - public: - MockDataReductionProxyService( - DataReductionProxySettings* settings, - PrefService* prefs, - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner); - ~MockDataReductionProxyService() override; - - MOCK_METHOD2(SetProxyPrefs, void(bool enabled, bool at_startup)); -}; - -// Test version of |DataReductionProxyService|, which bypasses initialization in -// the constructor in favor of explicitly passing in its owned classes. This -// permits the use of test/mock versions of those classes. -class TestDataReductionProxyService : public DataReductionProxyService { - public: - TestDataReductionProxyService( - DataReductionProxySettings* settings, - PrefService* prefs, - const scoped_refptr<base::SequencedTaskRunner>& db_task_runner); - ~TestDataReductionProxyService() override; -}; - -class DataReductionProxyTestContext { - public: - // Allows for a fluent builder interface to configure what kind of objects - // (test vs mock vs real) are used by the |DataReductionProxyTestContext|. - class Builder { - public: - Builder(); - - ~Builder(); - - // Specifies the use of |MockDataReductionProxyConfig| instead of - // |TestDataReductionProxyConfig|. - Builder& WithMockConfig(); - - // Specifies the use of |MockDataReductionProxyService| instead of - // |DataReductionProxyService|. - Builder& WithMockDataReductionProxyService(); - - // Construct, but do not initialize the |DataReductionProxySettings| object. - Builder& SkipSettingsInitialization(); - - // Specifies a settings object to use. - Builder& WithSettings(std::unique_ptr<DataReductionProxySettings> settings); - - // Creates a |DataReductionProxyTestContext|. Owned by the caller. - std::unique_ptr<DataReductionProxyTestContext> Build(); - - private: - bool use_mock_config_; - bool use_mock_service_; - bool skip_settings_initialization_; - std::unique_ptr<DataReductionProxySettings> settings_; - }; - - DataReductionProxyTestContext(const DataReductionProxyTestContext&) = delete; - DataReductionProxyTestContext& operator=( - const DataReductionProxyTestContext&) = delete; - - virtual ~DataReductionProxyTestContext(); - - // Registers, sets, and gets the preference used to enable the Data Reduction - // Proxy, respectively. - void RegisterDataReductionProxyEnabledPref(); - void SetDataReductionProxyEnabled(bool enabled); - bool IsDataReductionProxyEnabled() const; - - // Waits while executing all tasks on the current SingleThreadTaskRunner. - void RunUntilIdle(); - - // Initializes the |DataReductionProxySettings| object. Can only be called if - // built with SkipSettingsInitialization. - void InitSettings(); - - // Destroys the |DataReductionProxySettings| object and waits until objects on - // the DB task runner are destroyed. - void DestroySettings(); - - // Takes ownership of the |DataReductionProxyService| object. Can only be - // called if built with SkipSettingsInitialization. - std::unique_ptr<DataReductionProxyService> TakeService(); - - // Enable the Data Reduction Proxy, simulating a successful secure proxy - // check. This can only be called if not built with WithTestConfigurator, - // |settings_| has been initialized, and |this| was built with a - // |net::MockClientSocketFactory| specified. - void EnableDataReductionProxyWithSecureProxyCheckSuccess(); - - - DataReductionProxyService* data_reduction_proxy_service() const; - - // Returns the underlying |TestDataReductionProxyService|. This can only be - // called if not built with WithMockDataReductionProxyService. - TestDataReductionProxyService* test_data_reduction_proxy_service() const; - - // Returns the underlying |MockDataReductionProxyService|. This can only - // be called if built with WithMockDataReductionProxyService. - MockDataReductionProxyService* mock_data_reduction_proxy_service() const; - - scoped_refptr<base::SingleThreadTaskRunner> task_runner() const { - return task_runner_; - } - - TestingPrefServiceSimple* pref_service() { - return simple_pref_service_.get(); - } - - DataReductionProxySettings* settings() const { return settings_.get(); } - - void InitSettingsWithoutCheck(); - - - private: - DataReductionProxyTestContext( - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - std::unique_ptr<TestingPrefServiceSimple> simple_pref_service, - std::unique_ptr<DataReductionProxySettings> settings, - std::unique_ptr<DataReductionProxyService> service, - unsigned int test_context_flags); - - unsigned int test_context_flags_; - - scoped_refptr<base::SingleThreadTaskRunner> task_runner_; - std::unique_ptr<TestingPrefServiceSimple> simple_pref_service_; - - std::unique_ptr<DataReductionProxySettings> settings_; - raw_ptr<DataReductionProxyService> data_reduction_proxy_service_; - std::unique_ptr<DataReductionProxyService> service_; -}; - -} // namespace data_reduction_proxy - -#endif // COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_TEST_UTILS_H_
diff --git a/components/data_reduction_proxy/core/common/BUILD.gn b/components/data_reduction_proxy/core/common/BUILD.gn index 78f88dd..45d0a69 100644 --- a/components/data_reduction_proxy/core/common/BUILD.gn +++ b/components/data_reduction_proxy/core/common/BUILD.gn
@@ -7,8 +7,6 @@ template("common_tmpl") { static_library(target_name) { sources = [ - "data_reduction_proxy_pref_names.cc", - "data_reduction_proxy_pref_names.h", "data_reduction_proxy_switches.cc", "data_reduction_proxy_switches.h", ]
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.cc deleted file mode 100644 index 3448abf..0000000 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.cc +++ /dev/null
@@ -1,33 +0,0 @@ -// Copyright 2014 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 <stdint.h> - -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" - -namespace data_reduction_proxy { -namespace prefs { - -// A boolean specifying whether the DataSaver feature is enabled for this -// client. Note that this preference key name is a legacy string for the sdpy -// proxy. -// -// WARNING: This pref is not the source of truth for determining if Data Saver -// is enabled. Use |DataReductionSettings::IsDataSaverEnabledByUser| instead or -// consult the OWNERS. -const char kDataSaverEnabled[] = "spdy_proxy.enabled"; - -// A boolean specifying whether the data reduction proxy was ever enabled -// before. -const char kDataReductionProxyWasEnabledBefore[] = - "spdy_proxy.was_enabled_before"; - -// An integer pref that contains the time when the data reduction proxy was last -// enabled. Recorded only if the data reduction proxy was last enabled since -// this pref was added. -const char kDataReductionProxyLastEnabledTime[] = - "data_reduction.last_enabled_time"; - -} // namespace prefs -} // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h b/components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h deleted file mode 100644 index 50bc5f1..0000000 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h +++ /dev/null
@@ -1,21 +0,0 @@ -// Copyright 2014 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_DATA_REDUCTION_PROXY_CORE_COMMON_DATA_REDUCTION_PROXY_PREF_NAMES_H_ -#define COMPONENTS_DATA_REDUCTION_PROXY_CORE_COMMON_DATA_REDUCTION_PROXY_PREF_NAMES_H_ - -namespace data_reduction_proxy { -namespace prefs { - -// Alphabetical list of preference names specific to the data_reduction_proxy -// component. Keep alphabetized, and document each in the .cc file. - -extern const char kDataSaverEnabled[]; -extern const char kDataReductionProxyWasEnabledBefore[]; -extern const char kDataReductionProxyLastEnabledTime[]; - -} // namespace prefs -} // namespace data_reduction_proxy - -#endif // COMPONENTS_DATA_REDUCTION_PROXY_CORE_COMMON_DATA_REDUCTION_PROXY_PREF_NAMES_H_
diff --git a/components/keep_alive_registry/keep_alive_types.cc b/components/keep_alive_registry/keep_alive_types.cc index 950be06c..4b7b71c 100644 --- a/components/keep_alive_registry/keep_alive_types.cc +++ b/components/keep_alive_registry/keep_alive_types.cc
@@ -14,6 +14,8 @@ return out << "BROWSER"; case KeepAliveOrigin::BROWSER_PROCESS_CHROMEOS: return out << "BROWSER_PROCESS_CHROMEOS"; + case KeepAliveOrigin::BROWSER_PROCESS_FUCHSIA: + return out << "BROWSER_PROCESS_FUCHSIA"; case KeepAliveOrigin::BROWSER_PROCESS_LACROS: return out << "BROWSER_PROCESS_LACROS"; case KeepAliveOrigin::SESSION_RESTORE:
diff --git a/components/keep_alive_registry/keep_alive_types.h b/components/keep_alive_registry/keep_alive_types.h index 15b4f9c..a867de71 100644 --- a/components/keep_alive_registry/keep_alive_types.h +++ b/components/keep_alive_registry/keep_alive_types.h
@@ -18,6 +18,7 @@ APP_CONTROLLER, BROWSER, BROWSER_PROCESS_CHROMEOS, + BROWSER_PROCESS_FUCHSIA, BROWSER_PROCESS_LACROS, SESSION_RESTORE,
diff --git a/components/messages/OWNERS b/components/messages/OWNERS index 176a509..3e383e5 100644 --- a/components/messages/OWNERS +++ b/components/messages/OWNERS
@@ -1,4 +1,4 @@ -pavely@chromium.org twellington@chromium.org mdjones@chromium.org lazzzis@google.com +aishwaryarj@google.com
diff --git a/components/offline_items_collection/core/BUILD.gn b/components/offline_items_collection/core/BUILD.gn index 09cfe44e..cded3c4 100644 --- a/components/offline_items_collection/core/BUILD.gn +++ b/components/offline_items_collection/core/BUILD.gn
@@ -56,7 +56,10 @@ "android/offline_item_visuals_bridge.h", ] - deps += [ ":jni_headers" ] + deps += [ + ":jni_headers", + "//url:gurl_android", + ] } } @@ -112,6 +115,7 @@ deps = [ "//base:base_java", "//third_party/androidx:androidx_annotation_annotation_java", + "//url:gurl_java", ] }
diff --git a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineItem.java b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineItem.java index 507e6b7..50b816b 100644 --- a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineItem.java +++ b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineItem.java
@@ -4,6 +4,8 @@ package org.chromium.components.offline_items_collection; +import org.chromium.url.GURL; + import java.util.Objects; /** @@ -90,7 +92,7 @@ public String mimeType; // Request Metadata. - public String url; + public GURL url; public String originalUrl; public boolean isOffTheRecord; public String otrProfileId;
diff --git a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/bridges/OfflineItemBridge.java b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/bridges/OfflineItemBridge.java index 158e0da9..643605611 100644 --- a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/bridges/OfflineItemBridge.java +++ b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/bridges/OfflineItemBridge.java
@@ -14,6 +14,7 @@ import org.chromium.components.offline_items_collection.OfflineItemState; import org.chromium.components.offline_items_collection.PendingState; import org.chromium.components.offline_items_collection.UpdateDelta; +import org.chromium.url.GURL; import java.util.ArrayList; @@ -50,8 +51,8 @@ @OfflineItemFilter int filter, boolean isTransient, boolean isSuggested, boolean isAccelerated, boolean promoteOrigin, long totalSizeBytes, boolean externallyRemoved, long creationTimeMs, long completionTimeMs, - long lastAccessedTimeMs, boolean isOpenable, String filePath, String mimeType, - String url, String originalUrl, boolean isOffTheRecord, String otrProfileId, + long lastAccessedTimeMs, boolean isOpenable, String filePath, String mimeType, GURL url, + String originalUrl, boolean isOffTheRecord, String otrProfileId, @OfflineItemState int state, @FailState int failState, @PendingState int pendingState, boolean isResumable, boolean allowMetered, long receivedBytes, long progressValue, long progressMax, @OfflineItemProgressUnit int progressUnit, long timeRemainingMs,
diff --git a/components/offline_items_collection/core/android/offline_item_bridge.cc b/components/offline_items_collection/core/android/offline_item_bridge.cc index f9f685f..0ffd4688 100644 --- a/components/offline_items_collection/core/android/offline_item_bridge.cc +++ b/components/offline_items_collection/core/android/offline_item_bridge.cc
@@ -6,6 +6,7 @@ #include "base/android/jni_string.h" #include "components/offline_items_collection/core/jni_headers/OfflineItemBridge_jni.h" +#include "url/android/gurl_android.h" using base::android::ConvertUTF8ToJavaString; using base::android::ScopedJavaLocalRef; @@ -38,7 +39,7 @@ item.completion_time.ToJavaTime(), item.last_accessed_time.ToJavaTime(), item.is_openable, ConvertUTF8ToJavaString(env, item.file_path.value()), ConvertUTF8ToJavaString(env, item.mime_type), - ConvertUTF8ToJavaString(env, item.url.spec()), + url::GURLAndroid::FromNativeGURL(env, item.url), ConvertUTF8ToJavaString(env, item.original_url.spec()), item.is_off_the_record, ConvertUTF8ToJavaString(env, item.otr_profile_id), static_cast<jint>(item.state), static_cast<jint>(item.fail_state),
diff --git a/components/omnibox/browser/BUILD.gn b/components/omnibox/browser/BUILD.gn index d1b5721..2960519 100644 --- a/components/omnibox/browser/BUILD.gn +++ b/components/omnibox/browser/BUILD.gn
@@ -133,6 +133,8 @@ "document_suggestions_service.h", "favicon_cache.cc", "favicon_cache.h", + "history_fuzzy_provider.cc", + "history_fuzzy_provider.h", "history_match.cc", "history_match.h", "history_provider.cc", @@ -551,6 +553,7 @@ "document_provider_unittest.cc", "document_suggestions_service_unittest.cc", "favicon_cache_unittest.cc", + "history_fuzzy_provider_unittest.cc", "history_provider_unittest.cc", "history_quick_provider_unittest.cc", "history_url_provider_unittest.cc",
diff --git a/components/omnibox/browser/autocomplete_classifier.cc b/components/omnibox/browser/autocomplete_classifier.cc index d1d8786..e30e39f 100644 --- a/components/omnibox/browser/autocomplete_classifier.cc +++ b/components/omnibox/browser/autocomplete_classifier.cc
@@ -65,6 +65,9 @@ AutocompleteProvider::TYPE_SEARCH | AutocompleteProvider::TYPE_SHORTCUTS | (query_tiles::features::IsEnabledQueryTilesInOmnibox() ? AutocompleteProvider::TYPE_QUERY_TILE + : 0) | + (OmniboxFieldTrial::IsFuzzyUrlSuggestionsEnabled() + ? AutocompleteProvider::TYPE_HISTORY_FUZZY : 0); }
diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc index d1a9d01e..558644f 100644 --- a/components/omnibox/browser/autocomplete_controller.cc +++ b/components/omnibox/browser/autocomplete_controller.cc
@@ -35,6 +35,7 @@ #include "components/omnibox/browser/builtin_provider.h" #include "components/omnibox/browser/clipboard_provider.h" #include "components/omnibox/browser/document_provider.h" +#include "components/omnibox/browser/history_fuzzy_provider.h" #include "components/omnibox/browser/history_quick_provider.h" #include "components/omnibox/browser/history_url_provider.h" #include "components/omnibox/browser/keyword_provider.h" @@ -368,6 +369,9 @@ new VoiceSuggestProvider(provider_client_.get(), this); providers_.push_back(voice_suggest_provider_.get()); } + if (provider_types & AutocompleteProvider::TYPE_HISTORY_FUZZY) { + providers_.push_back(new HistoryFuzzyProvider(provider_client_.get())); + } base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( this, "AutocompleteController", base::ThreadTaskRunnerHandle::Get());
diff --git a/components/omnibox/browser/autocomplete_provider.cc b/components/omnibox/browser/autocomplete_provider.cc index a7721ae..14a3751 100644 --- a/components/omnibox/browser/autocomplete_provider.cc +++ b/components/omnibox/browser/autocomplete_provider.cc
@@ -67,6 +67,8 @@ return "VerbatimMatch"; case TYPE_VOICE_SUGGEST: return "VoiceSuggest"; + case TYPE_HISTORY_FUZZY: + return "HistoryFuzzy"; default: NOTREACHED() << "Unhandled AutocompleteProvider::Type " << type; return "Unknown";
diff --git a/components/omnibox/browser/autocomplete_provider.h b/components/omnibox/browser/autocomplete_provider.h index b4b2cde2..b7aa8d1 100644 --- a/components/omnibox/browser/autocomplete_provider.h +++ b/components/omnibox/browser/autocomplete_provider.h
@@ -168,6 +168,7 @@ TYPE_MOST_VISITED_SITES = 1 << 13, TYPE_VERBATIM_MATCH = 1 << 14, TYPE_VOICE_SUGGEST = 1 << 15, + TYPE_HISTORY_FUZZY = 1 << 16, }; explicit AutocompleteProvider(Type type);
diff --git a/components/omnibox/browser/history_fuzzy_provider.cc b/components/omnibox/browser/history_fuzzy_provider.cc new file mode 100644 index 0000000..f12af72 --- /dev/null +++ b/components/omnibox/browser/history_fuzzy_provider.cc
@@ -0,0 +1,49 @@ +// Copyright (c) 2022 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/omnibox/browser/history_fuzzy_provider.h" + +#include <vector> + +#include "base/check.h" +#include "base/trace_event/memory_usage_estimator.h" +#include "base/trace_event/trace_event.h" +#include "components/omnibox/browser/autocomplete_match_classification.h" +#include "components/omnibox/browser/autocomplete_match_type.h" +#include "components/omnibox/browser/autocomplete_provider_client.h" +#include "components/omnibox/browser/autocomplete_result.h" +#include "components/search_engines/omnibox_focus_type.h" + +HistoryFuzzyProvider::HistoryFuzzyProvider(AutocompleteProviderClient* client) + : HistoryProvider(AutocompleteProvider::TYPE_HISTORY_FUZZY, client) {} + +void HistoryFuzzyProvider::Start(const AutocompleteInput& input, + bool minimal_changes) { + TRACE_EVENT0("omnibox", "HistoryFuzzyProvider::Start"); + matches_.clear(); + if (input.focus_type() != OmniboxFocusType::DEFAULT || + input.type() == metrics::OmniboxInputType::EMPTY) { + return; + } + + autocomplete_input_ = input; + + DoAutocomplete(); +} + +size_t HistoryFuzzyProvider::EstimateMemoryUsage() const { + size_t res = HistoryProvider::EstimateMemoryUsage(); + res += base::trace_event::EstimateMemoryUsage(autocomplete_input_); + return res; +} + +HistoryFuzzyProvider::~HistoryFuzzyProvider() = default; + +void HistoryFuzzyProvider::DoAutocomplete() { + AutocompleteMatch match(this, 10000000, false, + AutocompleteMatchType::HISTORY_URL); + match.contents = u"fuzzyurlhere.org"; + match.contents_class.push_back({0, 0}); + matches_.push_back(std::move(match)); +}
diff --git a/components/omnibox/browser/history_fuzzy_provider.h b/components/omnibox/browser/history_fuzzy_provider.h new file mode 100644 index 0000000..c409a3519 --- /dev/null +++ b/components/omnibox/browser/history_fuzzy_provider.h
@@ -0,0 +1,38 @@ +// Copyright (c) 2022 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_OMNIBOX_BROWSER_HISTORY_FUZZY_PROVIDER_H_ +#define COMPONENTS_OMNIBOX_BROWSER_HISTORY_FUZZY_PROVIDER_H_ + +#include "components/history/core/browser/history_types.h" +#include "components/omnibox/browser/autocomplete_input.h" +#include "components/omnibox/browser/autocomplete_match.h" +#include "components/omnibox/browser/history_provider.h" + +// This class is an autocomplete provider which provides URL results from +// history for inputs that may match inexactly. +class HistoryFuzzyProvider : public HistoryProvider { + public: + explicit HistoryFuzzyProvider(AutocompleteProviderClient* client); + HistoryFuzzyProvider(const HistoryFuzzyProvider&) = delete; + HistoryFuzzyProvider& operator=(const HistoryFuzzyProvider&) = delete; + + // AutocompleteProvider. `minimal_changes` is ignored since there is no async + // completion performed. + void Start(const AutocompleteInput& input, bool minimal_changes) override; + + // Estimates dynamic memory usage. + // See base/trace_event/memory_usage_estimator.h for more info. + size_t EstimateMemoryUsage() const override; + + private: + ~HistoryFuzzyProvider() override; + + // Performs the autocomplete matching and scoring. + void DoAutocomplete(); + + AutocompleteInput autocomplete_input_; +}; + +#endif // COMPONENTS_OMNIBOX_BROWSER_HISTORY_FUZZY_PROVIDER_H_
diff --git a/components/omnibox/browser/history_fuzzy_provider_unittest.cc b/components/omnibox/browser/history_fuzzy_provider_unittest.cc new file mode 100644 index 0000000..78190ac --- /dev/null +++ b/components/omnibox/browser/history_fuzzy_provider_unittest.cc
@@ -0,0 +1,18 @@ +// Copyright (c) 2022 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/omnibox/browser/history_fuzzy_provider.h" + +#include "testing/gtest/include/gtest/gtest.h" + +class HistoryFuzzyProviderTest : public testing::Test { + public: + HistoryFuzzyProviderTest() = default; + HistoryFuzzyProviderTest(const HistoryFuzzyProviderTest&) = delete; + HistoryFuzzyProviderTest& operator=(const HistoryFuzzyProviderTest&) = delete; + + void SetUp() override {} +}; + +TEST_F(HistoryFuzzyProviderTest, TestRuns) {}
diff --git a/components/pdf/browser/BUILD.gn b/components/pdf/browser/BUILD.gn index 5a9998a..efb4108 100644 --- a/components/pdf/browser/BUILD.gn +++ b/components/pdf/browser/BUILD.gn
@@ -17,7 +17,6 @@ deps = [ "//base", "//content/public/browser", - "//pdf:features", "//ui/base", "//ui/touch_selection", ]
diff --git a/components/pdf/browser/pdf_web_contents_helper.cc b/components/pdf/browser/pdf_web_contents_helper.cc index e631fe4..26a4f75 100644 --- a/components/pdf/browser/pdf_web_contents_helper.cc +++ b/components/pdf/browser/pdf_web_contents_helper.cc
@@ -6,15 +6,12 @@ #include <utility> -#include "base/feature_list.h" #include "base/memory/ptr_util.h" #include "base/notreached.h" #include "components/pdf/browser/pdf_web_contents_helper_client.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/common/referrer_type_converters.h" -#include "pdf/pdf_features.h" -#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" #include "ui/base/pointer/touch_editing_controller.h" #include "ui/base/ui_base_types.h" #include "ui/gfx/geometry/point_conversions.h" @@ -123,21 +120,6 @@ client_->SetPluginCanSave(&GetWebContents(), can_save); } -void PDFWebContentsHelper::GetPdfFindInPage(GetPdfFindInPageCallback callback) { - if (!base::FeatureList::IsEnabled(chrome_pdf::features::kPdfUnseasoned)) { - NOTREACHED(); - return; - } - - if (!find_factory_remote_) { - GetWebContents() - .GetMainFrame() - ->GetRemoteAssociatedInterfaces() - ->GetInterface(&find_factory_remote_); - } - find_factory_remote_->GetPdfFindInPage(std::move(callback)); -} - void PDFWebContentsHelper::DidScroll() { if (!touch_selection_controller_client_manager_) InitTouchSelectionClientManager();
diff --git a/components/pdf/browser/pdf_web_contents_helper.h b/components/pdf/browser/pdf_web_contents_helper.h index f7b8ae9a..a799667 100644 --- a/components/pdf/browser/pdf_web_contents_helper.h +++ b/components/pdf/browser/pdf_web_contents_helper.h
@@ -12,7 +12,6 @@ #include "content/public/browser/render_widget_host_observer.h" #include "content/public/browser/touch_selection_controller_client_manager.h" #include "content/public/browser/web_contents_user_data.h" -#include "mojo/public/cpp/bindings/associated_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "pdf/mojom/pdf.mojom.h" @@ -90,7 +89,6 @@ const gfx::PointF& right, int32_t right_height) override; void SetPluginCanSave(bool can_save) override; - void GetPdfFindInPage(GetPdfFindInPageCallback callback) override; private: friend class content::WebContentsUserData<PDFWebContentsHelper>; @@ -123,8 +121,6 @@ mojo::Remote<mojom::PdfListener> remote_pdf_client_; - mojo::AssociatedRemote<mojom::PdfFindInPageFactory> find_factory_remote_; - WEB_CONTENTS_USER_DATA_KEY_DECL(); };
diff --git a/components/pdf/renderer/BUILD.gn b/components/pdf/renderer/BUILD.gn index dea1e9b..d61e395a 100644 --- a/components/pdf/renderer/BUILD.gn +++ b/components/pdf/renderer/BUILD.gn
@@ -14,7 +14,6 @@ "internal_plugin_renderer_helpers.h", "pdf_accessibility_tree.h", "pdf_ax_action_target.h", - "pdf_find_in_page.h", "pdf_internal_plugin_delegate.h", "pepper_pdf_host.h", ] @@ -23,7 +22,6 @@ "internal_plugin_renderer_helpers.cc", "pdf_accessibility_tree.cc", "pdf_ax_action_target.cc", - "pdf_find_in_page.cc", "pdf_internal_plugin_delegate.cc", "pdf_view_web_plugin_client.cc", "pdf_view_web_plugin_client.h",
diff --git a/components/pdf/renderer/pdf_find_in_page.cc b/components/pdf/renderer/pdf_find_in_page.cc deleted file mode 100644 index 174e75c..0000000 --- a/components/pdf/renderer/pdf_find_in_page.cc +++ /dev/null
@@ -1,106 +0,0 @@ -// Copyright 2021 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/pdf/renderer/pdf_find_in_page.h" - -#include <memory> -#include <utility> - -#include "base/check.h" -#include "base/feature_list.h" -#include "content/public/renderer/render_frame.h" -#include "content/public/renderer/render_frame_observer.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "pdf/pdf_features.h" -#include "third_party/blink/public/platform/web_vector.h" -#include "third_party/blink/public/web/web_document.h" -#include "third_party/blink/public/web/web_element.h" -#include "third_party/blink/public/web/web_local_frame.h" -#include "third_party/blink/public/web/web_node.h" - -namespace { - -blink::WebElement FindPdfViewerScroller(const blink::WebLocalFrame* frame) { - blink::WebElement viewer = frame->GetDocument().GetElementById("viewer"); - if (viewer.IsNull()) - return blink::WebElement(); - - blink::WebNode shadow_root = viewer.ShadowRoot(); - if (shadow_root.IsNull()) - return blink::WebElement(); - - blink::WebElement plugin = shadow_root.QuerySelector("#plugin"); - if (plugin.IsNull() || !plugin.HasAttribute("pdf-viewer-update-enabled")) - return blink::WebElement(); - - return shadow_root.QuerySelector("#scroller"); -} - -} // namespace - -namespace pdf { - -// static -void PdfFindInPageFactory::BindReceiver( - int32_t routing_id, - mojo::PendingAssociatedReceiver<pdf::mojom::PdfFindInPageFactory> - receiver) { - DCHECK(base::FeatureList::IsEnabled(chrome_pdf::features::kPdfUnseasoned)); - - auto* render_frame = content::RenderFrame::FromRoutingID(routing_id); - if (!render_frame) - return; - - // PdfFindInPageFactory is self deleting. - new PdfFindInPageFactory(render_frame, std::move(receiver)); -} - -void PdfFindInPageFactory::OnDestruct() { - delete this; -} - -void PdfFindInPageFactory::GetPdfFindInPage(GetPdfFindInPageCallback callback) { - mojo::PendingReceiver<pdf::mojom::PdfFindInPage> pending_receiver; - auto pending_remote = pending_receiver.InitWithNewPipeAndPassRemote(); - find_in_page_ = std::make_unique<FindInPageImpl>(render_frame(), - std::move(pending_receiver)); - std::move(callback).Run(std::move(pending_remote)); -} - -PdfFindInPageFactory::PdfFindInPageFactory( - content::RenderFrame* render_frame, - mojo::PendingAssociatedReceiver<pdf::mojom::PdfFindInPageFactory> receiver) - : content::RenderFrameObserver(render_frame), - receiver_(this, std::move(receiver)) {} - -PdfFindInPageFactory::~PdfFindInPageFactory() = default; - -class PdfFindInPageFactory::FindInPageImpl : public pdf::mojom::PdfFindInPage { - public: - FindInPageImpl( - content::RenderFrame* render_frame, - mojo::PendingReceiver<pdf::mojom::PdfFindInPage> pending_receiver) - : render_frame_(render_frame), - receiver_(this, std::move(pending_receiver)) {} - - FindInPageImpl(const FindInPageImpl&) = delete; - FindInPageImpl& operator=(const FindInPageImpl&) = delete; - - ~FindInPageImpl() override = default; - - // pdf::mojom::PdfFindInPage: - void SetTickmarks(const std::vector<gfx::Rect>& tickmarks) override { - blink::WebVector<gfx::Rect> tickmarks_converted(tickmarks); - blink::WebLocalFrame* frame = render_frame_->GetWebFrame(); - blink::WebElement target = FindPdfViewerScroller(frame); - frame->SetTickmarks(target, tickmarks_converted); - } - - private: - content::RenderFrame* const render_frame_; - mojo::Receiver<pdf::mojom::PdfFindInPage> receiver_; -}; - -} // namespace pdf
diff --git a/components/pdf/renderer/pdf_find_in_page.h b/components/pdf/renderer/pdf_find_in_page.h deleted file mode 100644 index 12fb253..0000000 --- a/components/pdf/renderer/pdf_find_in_page.h +++ /dev/null
@@ -1,58 +0,0 @@ -// Copyright 2021 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_PDF_RENDERER_PDF_FIND_IN_PAGE_H_ -#define COMPONENTS_PDF_RENDERER_PDF_FIND_IN_PAGE_H_ - -#include <stdint.h> - -#include <memory> - -#include "content/public/renderer/render_frame_observer.h" -#include "mojo/public/cpp/bindings/associated_receiver.h" -#include "mojo/public/cpp/bindings/pending_associated_receiver.h" -#include "pdf/mojom/pdf.mojom.h" - -namespace content { -class RenderFrame; -} - -namespace pdf { - -// Facilitates find-in-page IPCs from PDF renderer to PDF extension. -// Has the same lifetime as the RenderFrame it is associated with. -class PdfFindInPageFactory : public content::RenderFrameObserver, - public pdf::mojom::PdfFindInPageFactory { - public: - static void BindReceiver( - int32_t routing_id, - mojo::PendingAssociatedReceiver<pdf::mojom::PdfFindInPageFactory> - receiver); - - PdfFindInPageFactory(const PdfFindInPageFactory&) = delete; - PdfFindInPageFactory& operator=(const PdfFindInPageFactory&) = delete; - - // content::RenderFrameObserver: - void OnDestruct() override; - - // pdf::mojom::PdfFindInPageFactory: - void GetPdfFindInPage(GetPdfFindInPageCallback callback) override; - - private: - class FindInPageImpl; - - // Self deleting. - PdfFindInPageFactory( - content::RenderFrame* render_frame, - mojo::PendingAssociatedReceiver<pdf::mojom::PdfFindInPageFactory> - receiver); - ~PdfFindInPageFactory() override; - - std::unique_ptr<FindInPageImpl> find_in_page_; - mojo::AssociatedReceiver<pdf::mojom::PdfFindInPageFactory> receiver_; -}; - -} // namespace pdf - -#endif // COMPONENTS_PDF_RENDERER_PDF_FIND_IN_PAGE_H_
diff --git a/components/policy/core/common/policy_pref_names.cc b/components/policy/core/common/policy_pref_names.cc index 23580cb..8fc4f6e 100644 --- a/components/policy/core/common/policy_pref_names.cc +++ b/components/policy/core/common/policy_pref_names.cc
@@ -81,5 +81,13 @@ const char kUserAgentClientHintsGREASEUpdateEnabled[] = "policy.user_agent_client_hints_grease_update_enabled"; +// A boolean indicating whether the window-placement permission is automatically +// granted for all sites by enterprise policy. If true, the permission is +// automatically enabled for sites. If false, sites behave as default with +// users choosing to enable this permission if they want. When this permission +// is enabled, sites can use information about screens to open and place +// windows. +const char kWindowPlacementAlwaysAllowed[] = "window_placement_always_allowed"; + } // namespace policy_prefs } // namespace policy
diff --git a/components/policy/core/common/policy_pref_names.h b/components/policy/core/common/policy_pref_names.h index 4c68209..a73af9d 100644 --- a/components/policy/core/common/policy_pref_names.h +++ b/components/policy/core/common/policy_pref_names.h
@@ -30,6 +30,7 @@ POLICY_EXPORT extern const char kBackForwardCacheEnabled[]; #endif // BUILDFLAG(IS_ANDROID) POLICY_EXPORT extern const char kWebSQLInThirdPartyContextEnabled[]; +POLICY_EXPORT extern const char kWindowPlacementAlwaysAllowed[]; } // namespace policy_prefs } // namespace policy
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 8ef4ff2..ea80441a 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -15726,9 +15726,10 @@ { 'name': 'DataCompressionProxyEnabled', 'owners': ['bolian@chromium.org', 'pmarko@chromium.org'], + 'deprecated': True, 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['android:31-'], + 'supported_on': ['android:31-99'], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -29607,6 +29608,36 @@ If the policy is disabled or not set, user storage encryption for <ph name="DM_CRYPT">dm-crypt</ph> user homes will default to using <ph name="AES_NI_NAME">AESNI</ph>.''', }, { + 'name': 'WindowPlacementAlwaysAllowed', + 'owners': ['msw@google.com', 'enne@google.com'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'tags': [], + 'features': { + 'dynamic_refresh': True, + 'per_profile': True, + }, + 'items': [ + { + 'value': True, + 'caption': 'Allow all sites to use info about screens to open and place windows', + }, + { + 'value': False, + 'caption': 'Allow users to choose which sites can use info about screens to open and place windows', + }, + ], + 'device_only': False, + 'default': False, + 'supported_on': ['chrome.*:100-', 'chrome_os:100-'], + 'id': 951, + 'caption': '''Enable window placement permission on all sites''', + 'example_value': False, + 'desc': '''When this policy is set to Enabled, the window placement permission is automatically granted for all sites. + This will allow sites to see and use information about connected screens to open and place windows. + If not set or Disabled, this policy will follow the browser's defaults and allow users to choose this permission per site.''', + }, + { 'name': 'DeviceRunAutomaticCleanupOnLogin', 'owners': ['vsavu@google.com'], 'type': 'main', @@ -30704,6 +30735,6 @@ 'placeholders': [], 'deleted_policy_ids': [114, 115, 204, 205, 206, 341, 412, 476, 544, 546, 562, 569, 578, 583, 585, 586, 587, 588, 589, 590, 591, 600, 668, 669, 872], 'deleted_atomic_policy_group_ids': [19], - 'highest_id_currently_used': 950, + 'highest_id_currently_used': 951, 'highest_atomic_group_id_currently_used': 41 }
diff --git a/components/sessions/core/tab_restore_service_helper.cc b/components/sessions/core/tab_restore_service_helper.cc index 3de954e..f52e0da 100644 --- a/components/sessions/core/tab_restore_service_helper.cc +++ b/components/sessions/core/tab_restore_service_helper.cc
@@ -485,9 +485,10 @@ auto& window = static_cast<Window&>(entry); // When restoring a window, either the entire window can be restored, or a - // single tab within it. If the entry's ID matches the one to restore, - // then the entire window will be restored. - if (entry_id_matches_restore_id) { + // single tab within it. If the entry's ID matches the one to restore, or + // the entry corresponds to an application, then the entire window will be + // restored. + if (entry_id_matches_restore_id || !window.app_name.empty()) { context = client_->CreateLiveTabContext( window.app_name, window.bounds, window.show_state, window.workspace, window.user_title, window.extra_data);
diff --git a/components/signin/internal/identity_manager/profile_oauth2_token_service.cc b/components/signin/internal/identity_manager/profile_oauth2_token_service.cc index b554cd39..a98fecb0 100644 --- a/components/signin/internal/identity_manager/profile_oauth2_token_service.cc +++ b/components/signin/internal/identity_manager/profile_oauth2_token_service.cc
@@ -58,8 +58,8 @@ return "DiceResponseHandler::Signin"; case SourceForRefreshTokenOperation::kDiceResponseHandler_Signout: return "DiceResponseHandler::Signout"; - case SourceForRefreshTokenOperation::kDiceTurnOnSyncHelper_Abort: - return "DiceTurnOnSyncHelper::Abort"; + case SourceForRefreshTokenOperation::kTurnOnSyncHelper_Abort: + return "TurnOnSyncHelper::Abort"; case SourceForRefreshTokenOperation::kMachineLogon_CredentialProvider: return "MachineLogon::CredentialProvider"; case SourceForRefreshTokenOperation::kTokenService_ExtractCredentials:
diff --git a/components/signin/public/base/signin_metrics.h b/components/signin/public/base/signin_metrics.h index 21f8683..306da1f 100644 --- a/components/signin/public/base/signin_metrics.h +++ b/components/signin/public/base/signin_metrics.h
@@ -405,7 +405,7 @@ kAccountReconcilor_Reconcile = 12, kDiceResponseHandler_Signin = 13, kDiceResponseHandler_Signout = 14, - kDiceTurnOnSyncHelper_Abort = 15, + kTurnOnSyncHelper_Abort = 15, kMachineLogon_CredentialProvider = 16, kTokenService_ExtractCredentials = 17, // DEPRECATED on 09/2021 (used for force migration to DICE)
diff --git a/components/translate/ios/browser/ios_translate_driver.h b/components/translate/ios/browser/ios_translate_driver.h index 58c1c62..6bf85be 100644 --- a/components/translate/ios/browser/ios_translate_driver.h +++ b/components/translate/ios/browser/ios_translate_driver.h
@@ -16,7 +16,6 @@ #include "ios/web/public/web_state_observer.h" namespace web { -class NavigationManager; class WebState; } @@ -32,7 +31,6 @@ public language::IOSLanguageDetectionTabHelper::Observer { public: IOSTranslateDriver(web::WebState* web_state, - web::NavigationManager* navigation_manager, TranslateManager* translate_manager); IOSTranslateDriver(const IOSTranslateDriver&) = delete; @@ -105,9 +103,6 @@ // The WebState this instance is observing. web::WebState* web_state_ = nullptr; - // The navigation manager of the tab we are associated with. - web::NavigationManager* navigation_manager_; - base::WeakPtr<TranslateManager> translate_manager_; std::unique_ptr<TranslateController> translate_controller_; std::unique_ptr<LanguageDetectionController> language_detection_controller_;
diff --git a/components/translate/ios/browser/ios_translate_driver.mm b/components/translate/ios/browser/ios_translate_driver.mm index 602574a..9365f96 100644 --- a/components/translate/ios/browser/ios_translate_driver.mm +++ b/components/translate/ios/browser/ios_translate_driver.mm
@@ -40,16 +40,12 @@ } // namespace -IOSTranslateDriver::IOSTranslateDriver( - web::WebState* web_state, - web::NavigationManager* navigation_manager, - TranslateManager* translate_manager) +IOSTranslateDriver::IOSTranslateDriver(web::WebState* web_state, + TranslateManager* translate_manager) : web_state_(web_state), - navigation_manager_(navigation_manager), translate_manager_(translate_manager->GetWeakPtr()), page_seq_no_(0), pending_page_seq_no_(0) { - DCHECK(navigation_manager_); DCHECK(translate_manager_); DCHECK(web_state_); @@ -132,10 +128,12 @@ // TranslateDriver methods bool IOSTranslateDriver::IsLinkNavigation() { - return navigation_manager_->GetVisibleItem() && - ui::PageTransitionCoreTypeIs( - navigation_manager_->GetVisibleItem()->GetTransitionType(), - ui::PAGE_TRANSITION_LINK); + DCHECK(web_state_->IsRealized()); + web::NavigationItem* visible_item = + web_state_->GetNavigationManager()->GetVisibleItem(); + return visible_item && + ui::PageTransitionCoreTypeIs(visible_item->GetTransitionType(), + ui::PAGE_TRANSITION_LINK); } void IOSTranslateDriver::OnTranslateEnabledChanged() { @@ -163,7 +161,7 @@ } bool IOSTranslateDriver::IsIncognito() { - return navigation_manager_->GetBrowserState()->IsOffTheRecord(); + return web_state_->GetBrowserState()->IsOffTheRecord(); } const std::string& IOSTranslateDriver::GetContentsMimeType() { @@ -183,7 +181,8 @@ } bool IOSTranslateDriver::HasCurrentPage() { - return (navigation_manager_->GetVisibleItem() != nullptr); + DCHECK(web_state_->IsRealized()); + return (web_state_->GetNavigationManager()->GetVisibleItem() != nullptr); } void IOSTranslateDriver::OpenUrlInNewTab(const GURL& url) {
diff --git a/components/user_manager/known_user.cc b/components/user_manager/known_user.cc index dd56419..75f4ae2 100644 --- a/components/user_manager/known_user.cc +++ b/components/user_manager/known_user.cc
@@ -904,14 +904,6 @@ return KnownUser(local_state).GetKnownAccountIds(); } -void SaveKnownUser(const AccountId& account_id) { - PrefService* local_state = GetLocalStateLegacy(); - // Local State may not be initialized in tests. - if (!local_state) - return; - return KnownUser(local_state).SaveKnownUser(account_id); -} - void UpdateId(const AccountId& account_id) { PrefService* local_state = GetLocalStateLegacy(); // Local State may not be initialized in tests. @@ -1030,23 +1022,6 @@ return KnownUser(local_state).FindReauthReason(account_id, out_value); } -void SetChallengeResponseKeys(const AccountId& account_id, base::Value value) { - PrefService* local_state = GetLocalStateLegacy(); - // Local State may not be initialized in tests. - if (!local_state) - return; - return KnownUser(local_state) - .SetChallengeResponseKeys(account_id, std::move(value)); -} - -base::Value GetChallengeResponseKeys(const AccountId& account_id) { - PrefService* local_state = GetLocalStateLegacy(); - // Local State may not be initialized in tests. - if (!local_state) - return base::Value(); - return KnownUser(local_state).GetChallengeResponseKeys(account_id); -} - void SetLastOnlineSignin(const AccountId& account_id, base::Time time) { PrefService* local_state = GetLocalStateLegacy(); // Local State may not be initialized in tests.
diff --git a/components/user_manager/known_user.h b/components/user_manager/known_user.h index cfc8499bb..bb8c0cb3 100644 --- a/components/user_manager/known_user.h +++ b/components/user_manager/known_user.h
@@ -342,14 +342,6 @@ const std::string& id, const AccountType& account_type); -// Saves |account_id| into known users. Tries to commit the change on disk. Use -// only if account_id is not yet in the known user list. Important if Chrome -// crashes shortly after starting a session. Cryptohome should be able to find -// known account_id on Chrome restart. -// TODO(https://crbug.com/1150434): Deprecated, use KnownUser::SaveKnownUser -// instead. -void USER_MANAGER_EXPORT SaveKnownUser(const AccountId& account_id); - // Updates |account_id.account_type_| and |account_id.GetGaiaId()| or // |account_id.GetObjGuid()| for user with |account_id|. // TODO(https://crbug.com/1150434): Deprecated, use KnownUser::UpdateId instead. @@ -437,21 +429,6 @@ bool USER_MANAGER_EXPORT FindReauthReason(const AccountId& account_id, int* out_value); -// Setter and getter for the information about challenge-response keys that can -// be used by this user to authenticate. -// The getter returns a null value when the property isn't present. -// For the format of the value, refer to -// ash/components/login/auth/challenge_response/known_user_pref_utils.h. -// TODO(https://crbug.com/1150434): Deprecated, use -// KnownUser::SetChallengeResponseKeys instead. -void USER_MANAGER_EXPORT SetChallengeResponseKeys(const AccountId& account_id, - base::Value value); - -// TODO(https://crbug.com/1150434): Deprecated, use -// KnownUser::GetChallengeResponseKeys instead. -base::Value USER_MANAGER_EXPORT -GetChallengeResponseKeys(const AccountId& account_id); - // TODO(https://crbug.com/1150434): Deprecated, use // KnownUser::SetLastOnlineSignin instead. void USER_MANAGER_EXPORT SetLastOnlineSignin(const AccountId& account_id,
diff --git a/components/viz/service/display/surface_aggregator.cc b/components/viz/service/display/surface_aggregator.cc index f2dab17f..4d0da565 100644 --- a/components/viz/service/display/surface_aggregator.cc +++ b/components/viz/service/display/surface_aggregator.cc
@@ -1032,41 +1032,19 @@ return; CHECK(root_render_pass->transform_to_root_target == gfx::Transform()); - if (!color_conversion_render_pass_id_) + if (!color_conversion_render_pass_id_) { color_conversion_render_pass_id_ = render_pass_id_generator_.GenerateNextId(); + } - auto color_conversion_pass = std::make_unique<AggregatedRenderPass>(1, 1); - color_conversion_pass->SetNew(color_conversion_render_pass_id_, output_rect, - root_render_pass->damage_rect, - root_render_pass->transform_to_root_target); - color_conversion_pass->has_transparent_background = - root_render_pass->has_transparent_background; - color_conversion_pass->content_color_usage = root_content_color_usage_; - color_conversion_pass->is_color_conversion_pass = true; - - auto* shared_quad_state = - color_conversion_pass->CreateAndAppendSharedQuadState(); - // Do NOT set blend mode here to SkBlendMode::kSrcOver, which will cause - // blending with empty (black) root pass when child pass has alpha. - shared_quad_state->SetAll( - /*quad_to_target_transform=*/gfx::Transform(), - /*quad_layer_rect=*/output_rect, - /*visible_layer_rect=*/output_rect, - /*mask_filter_info=*/gfx::MaskFilterInfo(), - /*clip_rect=*/absl::nullopt, /*are_contents_opaque=*/false, - /*opacity=*/1.f, - /*blend_mode=*/SkBlendMode::kSrc, /*sorting_context_id=*/0); - - auto* quad = color_conversion_pass - ->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>(); - quad->SetNew(shared_quad_state, output_rect, output_rect, - root_render_pass->id, kInvalidResourceId, gfx::RectF(), - gfx::Size(), gfx::Vector2dF(), gfx::PointF(), - gfx::RectF(output_rect), - /*force_anti_aliasing_off=*/false, - /*backdrop_filter_quality*/ 1.0f); - dest_pass_list_->push_back(std::move(color_conversion_pass)); + AddRenderPassHelper(output_rect, color_conversion_render_pass_id_, + output_rect, root_render_pass->damage_rect, + root_content_color_usage_, + root_render_pass->has_transparent_background, + /*pass_is_color_conversion_pass=*/true, + /*quad_state_to_target_transform=*/gfx::Transform(), + /*quad_state_contents_opaque=*/false, SkBlendMode::kSrc, + root_render_pass->id); } void SurfaceAggregator::AddDisplayTransformPass() { @@ -1074,29 +1052,12 @@ return; auto* root_render_pass = dest_pass_list_->back().get(); - gfx::Rect output_rect = root_render_pass->output_rect; DCHECK(root_render_pass->transform_to_root_target == root_surface_transform_); - if (!display_transform_render_pass_id_) + if (!display_transform_render_pass_id_) { display_transform_render_pass_id_ = render_pass_id_generator_.GenerateNextId(); - - auto display_transform_pass = std::make_unique<AggregatedRenderPass>(1, 1); - display_transform_pass->SetAll( - display_transform_render_pass_id_, - cc::MathUtil::MapEnclosedRectWith2dAxisAlignedTransform( - root_surface_transform_, root_render_pass->output_rect), - cc::MathUtil::MapEnclosedRectWith2dAxisAlignedTransform( - root_surface_transform_, root_render_pass->damage_rect), - gfx::Transform(), - /*filters=*/cc::FilterOperations(), - /*backdrop_filters=*/cc::FilterOperations(), - /*backdrop_filter_bounds=*/gfx::RRectF(), - root_render_pass->content_color_usage, - root_render_pass->has_transparent_background, - /*cache_render_pass=*/false, - /*has_damage_from_contributing_content=*/false, - /*generate_mipmap=*/false); + } bool are_contents_opaque = true; for (const auto* sqs : root_render_pass->shared_quad_state_list) { @@ -1106,25 +1067,58 @@ } } - auto* shared_quad_state = - display_transform_pass->CreateAndAppendSharedQuadState(); - shared_quad_state->SetAll( - /*quad_to_target_transform=*/root_surface_transform_, - /*quad_layer_rect=*/output_rect, - /*visible_layer_rect=*/output_rect, - /*mask_filter_info=*/gfx::MaskFilterInfo(), - /*clip_rect=*/absl::nullopt, are_contents_opaque, /*opacity=*/1.f, - /*blend_mode=*/SkBlendMode::kSrcOver, /*sorting_context_id=*/0); + AddRenderPassHelper( + root_render_pass->output_rect, display_transform_render_pass_id_, + cc::MathUtil::MapEnclosedRectWith2dAxisAlignedTransform( + root_surface_transform_, root_render_pass->output_rect), + cc::MathUtil::MapEnclosedRectWith2dAxisAlignedTransform( + root_surface_transform_, root_render_pass->damage_rect), + root_render_pass->content_color_usage, + root_render_pass->has_transparent_background, + /*pass_is_color_conversion_pass=*/false, root_surface_transform_, + are_contents_opaque, SkBlendMode::kSrcOver, root_render_pass->id); +} - auto* quad = display_transform_pass - ->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>(); - quad->SetNew(shared_quad_state, output_rect, output_rect, - root_render_pass->id, kInvalidResourceId, gfx::RectF(), - gfx::Size(), gfx::Vector2dF(), gfx::PointF(), - gfx::RectF(output_rect), +void SurfaceAggregator::AddRenderPassHelper( + const gfx::Rect& output_rect, + AggregatedRenderPassId render_pass_id, + const gfx::Rect& render_pass_output_rect, + const gfx::Rect& pass_damage_rect, + gfx::ContentColorUsage pass_color_usage, + bool pass_has_transparent_background, + bool pass_is_color_conversion_pass, + const gfx::Transform& quad_state_to_target_transform, + bool quad_state_contents_opaque, + SkBlendMode quad_state_blend_mode, + AggregatedRenderPassId quad_pass_id) { + auto render_pass = std::make_unique<AggregatedRenderPass>(1, 1); + render_pass->SetAll(render_pass_id, output_rect, pass_damage_rect, + gfx::Transform(), + /*filters=*/cc::FilterOperations(), + /*backdrop_filters=*/cc::FilterOperations(), + /*backdrop_filter_bounds=*/gfx::RRectF(), + pass_color_usage, pass_has_transparent_background, + /*cache_render_pass=*/false, + /*has_damage_from_contributing_content=*/false, + /*generate_mipmap=*/false); + render_pass->is_color_conversion_pass = pass_is_color_conversion_pass; + + auto* shared_quad_state = render_pass->CreateAndAppendSharedQuadState(); + shared_quad_state->SetAll( + quad_state_to_target_transform, + /*layer_rect=*/output_rect, + /*visible_layer_rect=*/output_rect, gfx::MaskFilterInfo(), + /*clip=*/absl::nullopt, quad_state_contents_opaque, /*opacity_f=*/1.f, + quad_state_blend_mode, /*sorting_context=*/0); + + auto* quad = + render_pass->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>(); + quad->SetNew(shared_quad_state, output_rect, output_rect, quad_pass_id, + kInvalidResourceId, gfx::RectF(), gfx::Size(), gfx::Vector2dF(), + gfx::PointF(), gfx::RectF(output_rect), /*force_anti_aliasing_off=*/false, /*backdrop_filter_quality*/ 1.0f); - dest_pass_list_->push_back(std::move(display_transform_pass)); + dest_pass_list_->push_back(std::move(render_pass)); } void SurfaceAggregator::CopyQuadsToPass(
diff --git a/components/viz/service/display/surface_aggregator.h b/components/viz/service/display/surface_aggregator.h index df39314..295a658 100644 --- a/components/viz/service/display/surface_aggregator.h +++ b/components/viz/service/display/surface_aggregator.h
@@ -241,6 +241,17 @@ void CopyPasses(const ResolvedFrameData& resolved_frame); void AddColorConversionPass(); void AddDisplayTransformPass(); + void AddRenderPassHelper(const gfx::Rect& output_rect, + AggregatedRenderPassId render_pass_id, + const gfx::Rect& render_pass_output_rect, + const gfx::Rect& pass_damage_rect, + gfx::ContentColorUsage pass_color_usage, + bool pass_has_transparent_background, + bool pass_is_color_conversion_pass, + const gfx::Transform& quad_state_to_target_transform, + bool quad_state_contents_opaque, + SkBlendMode quad_state_blend_mode, + AggregatedRenderPassId quad_pass_id); // Remove Surfaces that were referenced before but aren't currently // referenced from the ResourceProvider.
diff --git a/components/webapps/browser/android/webapk/webapk_proto_builder.cc b/components/webapps/browser/android/webapk/webapk_proto_builder.cc index 269a6d1..fca8a801 100644 --- a/components/webapps/browser/android/webapk/webapk_proto_builder.cc +++ b/components/webapps/browser/android/webapk/webapk_proto_builder.cc
@@ -18,7 +18,6 @@ #include "components/webapps/browser/android/webapk/webapk_types.h" #include "third_party/blink/public/common/manifest/manifest_util.h" #include "third_party/blink/public/mojom/manifest/manifest.mojom.h" -#include "third_party/skia/include/core/SkBitmap.h" #include "ui/android/color_utils_android.h" #include "ui/gfx/codec/png_codec.h" @@ -87,19 +86,13 @@ #endif } -void SetImageData(webapk::Image* image, const SkBitmap& icon) { - std::vector<unsigned char> png_bytes; - gfx::PNGCodec::EncodeBGRASkBitmap(icon, false, &png_bytes); - image->set_image_data(png_bytes.data(), png_bytes.size()); -} - } // namespace std::unique_ptr<std::string> BuildProtoInBackground( const webapps::ShortcutInfo& shortcut_info, - const SkBitmap& primary_icon, + const std::string& primary_icon_data, bool is_primary_icon_maskable, - const SkBitmap& splash_icon, + const std::string& splash_icon_data, const std::string& package_name, const std::string& version, std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash, @@ -173,7 +166,7 @@ if (shortcut_info.best_primary_icon_url.is_empty()) { // Update when web manifest is no longer available. webapk::Image* best_primary_icon_image = web_app_manifest->add_icons(); - SetImageData(best_primary_icon_image, primary_icon); + best_primary_icon_image->set_image_data(primary_icon_data); best_primary_icon_image->add_usages(webapk::Image::PRIMARY_ICON); if (is_primary_icon_maskable) { best_primary_icon_image->add_purposes(webapk::Image::MASKABLE); @@ -181,9 +174,9 @@ best_primary_icon_image->add_purposes(webapk::Image::ANY); } - if (!splash_icon.drawsNothing()) { + if (!splash_icon_data.empty()) { webapk::Image* splash_icon_image = web_app_manifest->add_icons(); - SetImageData(splash_icon_image, splash_icon); + splash_icon_image->set_image_data(splash_icon_data); splash_icon_image->add_usages(webapk::Image::SPLASH_ICON); if (shortcut_info.is_splash_image_maskable) { splash_icon_image->add_purposes(webapk::Image::MASKABLE); @@ -201,7 +194,11 @@ image->set_hash(it->second.hash); if (icon_url == shortcut_info.best_primary_icon_url.spec()) { - SetImageData(image, primary_icon); + if (!primary_icon_data.empty()) { + image->set_image_data(primary_icon_data); + } else { + image->set_image_data(it->second.unsafe_data); + } image->add_usages(webapk::Image::PRIMARY_ICON); if (is_primary_icon_maskable) { image->add_purposes(webapk::Image::MASKABLE); @@ -214,8 +211,8 @@ shortcut_info.best_primary_icon_url) { // WebAPK updates uses the image data from fetched bitmap; installs use // the image data from icon_url_to_murmur2_hash. - if (!splash_icon.drawsNothing()) { - SetImageData(image, splash_icon); + if (!splash_icon_data.empty()) { + image->set_image_data(splash_icon_data); } else { image->set_image_data(it->second.unsafe_data); } @@ -267,9 +264,9 @@ bool StoreUpdateRequestToFileInBackground( const base::FilePath& update_request_path, const webapps::ShortcutInfo& shortcut_info, - const SkBitmap& primary_icon, + const std::string& primary_icon_data, bool is_primary_icon_maskable, - const SkBitmap& splash_icon, + const std::string& splash_icon_data, const std::string& package_name, const std::string& version, std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash, @@ -280,10 +277,10 @@ base::BlockingType::MAY_BLOCK); std::unique_ptr<std::string> proto = BuildProtoInBackground( - shortcut_info, primary_icon, is_primary_icon_maskable, splash_icon, - package_name, version, std::move(icon_url_to_murmur2_hash), - is_manifest_stale, is_app_identity_update_supported, - std::move(update_reasons)); + shortcut_info, primary_icon_data, is_primary_icon_maskable, + splash_icon_data, package_name, version, + std::move(icon_url_to_murmur2_hash), is_manifest_stale, + is_app_identity_update_supported, std::move(update_reasons)); // Create directory if it does not exist. base::CreateDirectory(update_request_path.DirName());
diff --git a/components/webapps/browser/android/webapk/webapk_proto_builder.h b/components/webapps/browser/android/webapk/webapk_proto_builder.h index b30d8aa..59643b2f 100644 --- a/components/webapps/browser/android/webapk/webapk_proto_builder.h +++ b/components/webapps/browser/android/webapk/webapk_proto_builder.h
@@ -14,7 +14,6 @@ #include "components/webapps/browser/android/shortcut_info.h" #include "components/webapps/browser/android/webapk/webapk_icon_hasher.h" #include "components/webapps/browser/android/webapk/webapk_types.h" -#include "third_party/skia/include/core/SkBitmap.h" namespace webapps { @@ -25,9 +24,9 @@ // splash icon URL is unknown. std::unique_ptr<std::string> BuildProtoInBackground( const webapps::ShortcutInfo& shortcut_info, - const SkBitmap& primary_icon, + const std::string& primary_icon_data, bool is_primary_icon_maskable, - const SkBitmap& splash_icon, + const std::string& splash_icon_data, const std::string& package_name, const std::string& version, std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash, @@ -41,9 +40,9 @@ bool StoreUpdateRequestToFileInBackground( const base::FilePath& update_request_path, const webapps::ShortcutInfo& shortcut_info, - const SkBitmap& primary_icon, + const std::string& primary_icon_data, bool is_primary_icon_maskable, - const SkBitmap& splash_icon, + const std::string& splash_icon_data, const std::string& package_name, const std::string& version, std::map<std::string, WebApkIconHasher::Icon> icon_url_to_murmur2_hash,
diff --git a/content/browser/attribution_reporting/attribution_host.cc b/content/browser/attribution_reporting/attribution_host.cc index bc75ba3e..8049b0d 100644 --- a/content/browser/attribution_reporting/attribution_host.cc +++ b/content/browser/attribution_reporting/attribution_host.cc
@@ -301,34 +301,35 @@ const AttributionPolicy& policy = attribution_manager->GetAttributionPolicy(); - if (!policy.IsTriggerDataInRange(conversion->conversion_data, - CommonSourceInfo::SourceType::kNavigation)) { - devtools_instrumentation::ReportAttributionReportingIssue( - render_frame_host, - devtools_instrumentation::AttributionReportingIssueType:: - kAttributionTriggerDataTooLarge, - conversion->devtools_request_id, - base::NumberToString(conversion->conversion_data)); - } + const auto sanitize_trigger_data = + [&](const uint64_t unsanitized, CommonSourceInfo::SourceType source_type, + devtools_instrumentation::AttributionReportingIssueType issue_type) { + const uint64_t sanitized = + policy.SanitizeTriggerData(unsanitized, source_type); - if (!policy.IsTriggerDataInRange(conversion->event_source_trigger_data, - CommonSourceInfo::SourceType::kEvent)) { - devtools_instrumentation::ReportAttributionReportingIssue( - render_frame_host, - devtools_instrumentation::AttributionReportingIssueType:: - kAttributionEventSourceTriggerDataTooLarge, - conversion->devtools_request_id, - base::NumberToString(conversion->event_source_trigger_data)); - } + if (sanitized != unsanitized) { + devtools_instrumentation::ReportAttributionReportingIssue( + render_frame_host, issue_type, conversion->devtools_request_id, + base::NumberToString(unsanitized)); + } + + return sanitized; + }; net::SchemefulSite conversion_destination(main_frame_origin); StorableTrigger storable_conversion( - policy.SanitizeTriggerData(conversion->conversion_data, - CommonSourceInfo::SourceType::kNavigation), + sanitize_trigger_data( + conversion->conversion_data, + CommonSourceInfo::SourceType::kNavigation, + devtools_instrumentation::AttributionReportingIssueType:: + kAttributionTriggerDataTooLarge), std::move(conversion_destination), conversion->reporting_origin, - policy.SanitizeTriggerData(conversion->event_source_trigger_data, - CommonSourceInfo::SourceType::kEvent), + sanitize_trigger_data( + conversion->event_source_trigger_data, + CommonSourceInfo::SourceType::kEvent, + devtools_instrumentation::AttributionReportingIssueType:: + kAttributionEventSourceTriggerDataTooLarge), conversion->priority, conversion->dedup_key.is_null() ? absl::nullopt
diff --git a/content/browser/attribution_reporting/attribution_policy.cc b/content/browser/attribution_reporting/attribution_policy.cc index 9b17a59..9a05e35 100644 --- a/content/browser/attribution_reporting/attribution_policy.cc +++ b/content/browser/attribution_reporting/attribution_policy.cc
@@ -57,12 +57,6 @@ return trigger_data % cardinality; } -bool AttributionPolicy::IsTriggerDataInRange( - uint64_t trigger_data, - CommonSourceInfo::SourceType source_type) const { - return trigger_data < TriggerDataCardinality(source_type); -} - base::Time AttributionPolicy::GetExpiryTimeForImpression( const absl::optional<base::TimeDelta>& declared_expiry, base::Time impression_time,
diff --git a/content/browser/attribution_reporting/attribution_policy.h b/content/browser/attribution_reporting/attribution_policy.h index 938a8762..0619123 100644 --- a/content/browser/attribution_reporting/attribution_policy.h +++ b/content/browser/attribution_reporting/attribution_policy.h
@@ -34,9 +34,6 @@ uint64_t SanitizeTriggerData(uint64_t trigger_data, CommonSourceInfo::SourceType source_type) const; - bool IsTriggerDataInRange(uint64_t trigger_data, - CommonSourceInfo::SourceType source_type) const; - // Returns the expiry time for an impression that is clamped to a maximum // value of 30 days from |impression_time|. base::Time GetExpiryTimeForImpression(
diff --git a/content/browser/compute_pressure/compute_pressure_host.cc b/content/browser/compute_pressure/compute_pressure_host.cc index ef1afda..5551f34 100644 --- a/content/browser/compute_pressure/compute_pressure_host.cc +++ b/content/browser/compute_pressure/compute_pressure_host.cc
@@ -134,6 +134,10 @@ return; } + // No need to send an update if previous value is similar. + if (last_report_state_ == quantized_state) + return; + for (auto it = observers_.begin(); it != observers_.end(); ++it) { mojo::RemoteSetElementId observer_id = it.id(); @@ -160,6 +164,7 @@ // implement sending (less frequent) updates to observers in non-visible // frames. last_report_time_ = sample_time; + last_report_state_ = quantized_state; (*it)->OnUpdate(quantized_state.Clone()); } @@ -194,7 +199,8 @@ last_report_time_ = base::Time::Now(); // Setting to an invalid value, so any state is considered an update. - last_report_sample_ = {.cpu_utilization = -1, .cpu_speed = -1}; + last_report_state_ = {/* cpu_utilization */ -1, + /* cpu_speed */ -1}; } } // namespace content
diff --git a/content/browser/compute_pressure/compute_pressure_host.h b/content/browser/compute_pressure/compute_pressure_host.h index 007eeaa..6bd4173 100644 --- a/content/browser/compute_pressure/compute_pressure_host.h +++ b/content/browser/compute_pressure/compute_pressure_host.h
@@ -131,7 +131,7 @@ // Stored to avoid sending updates when the underlying compute pressure state // changes, but quantization produces the same values that were reported in // the last update. - ComputePressureSample last_report_sample_ + blink::mojom::ComputePressureState last_report_state_ GUARDED_BY_CONTEXT(sequence_checker_); // The last time the origin's observers received an update.
diff --git a/content/browser/compute_pressure/compute_pressure_host_unittest.cc b/content/browser/compute_pressure/compute_pressure_host_unittest.cc index b50469d..10a16ee 100644 --- a/content/browser/compute_pressure/compute_pressure_host_unittest.cc +++ b/content/browser/compute_pressure/compute_pressure_host_unittest.cc
@@ -112,6 +112,32 @@ blink::mojom::ComputePressureState(0.1, 0.25)); } +TEST_F(ComputePressureHostTest, OneObserver_NoCallbackInvoke) { + FakeComputePressureObserver observer; + ASSERT_EQ(host_sync_->AddObserver(kQuantization, + observer.BindNewPipeAndPassRemote()), + blink::mojom::ComputePressureStatus::kOk); + + base::Time now = base::Time::Now(); + + host_impl_->UpdateObservers({.cpu_utilization = 0.42, .cpu_speed = 0.84}, + now + base::Seconds(1)); + observer.WaitForUpdate(); + ASSERT_THAT(observer.updates(), testing::SizeIs(testing::Eq(1u))); + EXPECT_EQ(observer.updates()[0], + blink::mojom::ComputePressureState(0.35, 0.75)); + + // The first update should be discarded due to same bucket + host_impl_->UpdateObservers({.cpu_utilization = 0.37, .cpu_speed = 0.70}, + now + base::Seconds(2)); + host_impl_->UpdateObservers({.cpu_utilization = 0.42, .cpu_speed = 0.42}, + now + base::Seconds(3)); + observer.WaitForUpdate(); + ASSERT_THAT(observer.updates(), testing::SizeIs(testing::Eq(2u))); + EXPECT_EQ(observer.updates()[1], + blink::mojom::ComputePressureState(0.35, 0.25)); +} + TEST_F(ComputePressureHostTest, OneObserver_AddRateLimiting) { base::Time before_add = base::Time::Now();
diff --git a/content/common/partition_alloc_support.cc b/content/common/partition_alloc_support.cc index d753f79..344171e 100644 --- a/content/common/partition_alloc_support.cc +++ b/content/common/partition_alloc_support.cc
@@ -283,7 +283,9 @@ base::allocator::EnableBrp(enable_brp), base::allocator::SplitMainPartition(split_main_partition), base::allocator::UseDedicatedAlignedPartition( - use_dedicated_aligned_partition)); + use_dedicated_aligned_partition), + base::allocator::AlternateBucketDistribution(base::FeatureList::IsEnabled( + base::features::kPartitionAllocUseAlternateDistribution))); #endif // BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) // If BRP is not enabled, check if any of PCScan flags is enabled.
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc index 8c1e9919..d95006a 100644 --- a/content/renderer/accessibility/render_accessibility_impl.cc +++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -447,11 +447,12 @@ void RenderAccessibilityImpl::MarkWebAXObjectDirty( const WebAXObject& obj, bool subtree, + ax::mojom::EventFrom event_from, ax::mojom::Action event_from_action, std::vector<ui::AXEventIntent> event_intents, ax::mojom::Event event_type) { - EnqueueDirtyObject(obj, ax::mojom::EventFrom::kAction, event_from_action, - event_intents, dirty_objects_.end()); + EnqueueDirtyObject(obj, event_from, event_from_action, event_intents, + dirty_objects_.end()); if (subtree) serializer_->InvalidateSubtree(obj); @@ -508,8 +509,9 @@ event_schedule_mode_ = EventScheduleMode::kProcessEventsImmediately; if (ShouldSerializeNodeForEvent(obj, event)) { - MarkWebAXObjectDirty(obj, false, event.event_from_action, - event.event_intents, event.event_type); + MarkWebAXObjectDirty(obj, /* subtree= */ false, event.event_from, + event.event_from_action, event.event_intents, + event.event_type); } ScheduleSendPendingAccessibilityEvents(); @@ -1306,7 +1308,8 @@ objs_to_explore.pop(); if (obj.Role() == role) - MarkWebAXObjectDirty(obj, /* subtree */ false, event_from_action); + MarkWebAXObjectDirty(obj, /* subtree */ false, + ax::mojom::EventFrom::kNone, event_from_action); std::vector<blink::WebAXObject> children; tree_source_->GetChildren(obj, &children);
diff --git a/content/renderer/accessibility/render_accessibility_impl.h b/content/renderer/accessibility/render_accessibility_impl.h index 258a125..61ce661 100644 --- a/content/renderer/accessibility/render_accessibility_impl.h +++ b/content/renderer/accessibility/render_accessibility_impl.h
@@ -127,6 +127,7 @@ void MarkWebAXObjectDirty( const blink::WebAXObject& obj, bool subtree, + ax::mojom::EventFrom event_from = ax::mojom::EventFrom::kNone, ax::mojom::Action event_from_action = ax::mojom::Action::kNone, std::vector<ui::AXEventIntent> event_intents = {}, ax::mojom::Event event_type = ax::mojom::Event::kNone);
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index fea269ba..0cec8fa 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -4558,12 +4558,13 @@ void RenderFrameImpl::MarkWebAXObjectDirty( const blink::WebAXObject& obj, bool subtree, + ax::mojom::EventFrom event_from, ax::mojom::Action event_from_action) { if (!IsAccessibilityEnabled()) return; render_accessibility_manager_->GetRenderAccessibilityImpl() - ->MarkWebAXObjectDirty(obj, subtree, event_from_action); + ->MarkWebAXObjectDirty(obj, subtree, event_from, event_from_action); } void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { @@ -5507,7 +5508,8 @@ (policy == blink::kWebNavigationPolicyNewBackgroundTab || policy == blink::kWebNavigationPolicyNewForegroundTab || policy == blink::kWebNavigationPolicyNewWindow || - policy == blink::kWebNavigationPolicyNewPopup)) { + policy == blink::kWebNavigationPolicyNewPopup || + policy == blink::kWebNavigationPolicyPictureInPicture)) { frame_->ConsumeTransientUserActivation(); }
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 4e5d10d..05166cca 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -612,10 +612,10 @@ bool AllowContentInitiatedDataUrlNavigations( const blink::WebURL& url) override; void PostAccessibilityEvent(const ui::AXEvent& event) override; - void MarkWebAXObjectDirty( - const blink::WebAXObject& obj, - bool subtree, - ax::mojom::Action event_from_action = ax::mojom::Action::kNone) override; + void MarkWebAXObjectDirty(const blink::WebAXObject& obj, + bool subtree, + ax::mojom::EventFrom event_from, + ax::mojom::Action event_from_action) override; void CheckIfAudioSinkExistsAndIsAuthorized( const blink::WebString& sink_id, blink::WebSetSinkIdCompleteCallback callback) override;
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 7809d32..f2c7eedb 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc
@@ -74,6 +74,7 @@ case blink::kWebNavigationPolicyNewWindow: return WindowOpenDisposition::NEW_WINDOW; case blink::kWebNavigationPolicyNewPopup: + case blink::kWebNavigationPolicyPictureInPicture: return WindowOpenDisposition::NEW_POPUP; default: NOTREACHED() << "Unexpected WebNavigationPolicy";
diff --git a/content/web_test/browser/web_test_control_host.cc b/content/web_test/browser/web_test_control_host.cc index 7af92e2..9b9d8b1 100644 --- a/content/web_test/browser/web_test_control_host.cc +++ b/content/web_test/browser/web_test_control_host.cc
@@ -1795,6 +1795,21 @@ // Consider removing it to understand what happens without. web_contents->Stop(); + // Disable back/forward cache before the current test page navigates away so + // that the test page does not remain in the back/forward cache after the + // test. + BackForwardCache::DisableForRenderFrameHost( + web_contents->GetMainFrame(), + BackForwardCache::DisabledReason( + {BackForwardCache::DisabledSource::kTesting, 0, + "disabled for web_test not to cache the test page after the test " + "ends."})); + + // Flush all the back/forward cache to avoid side effects in the next test. + for (auto* shell : Shell::windows()) { + shell->web_contents()->GetController().GetBackForwardCache().Flush(); + } + // Navigate to about:blank in between two consecutive web tests. // // Note: this navigation might happen in a new process, depending on the
diff --git a/content/web_test/common/web_test_string_util.cc b/content/web_test/common/web_test_string_util.cc index e5b8de44..8543d62 100644 --- a/content/web_test/common/web_test_string_util.cc +++ b/content/web_test/common/web_test_string_util.cc
@@ -29,6 +29,7 @@ const char* kPolicyNewForegroundTab = "new foreground tab"; const char* kPolicyNewWindow = "new window"; const char* kPolicyNewPopup = "new popup"; +const char* kPolicyPictureInPicture = "picture in picture"; } // namespace @@ -70,6 +71,8 @@ return kPolicyNewWindow; case blink::kWebNavigationPolicyNewPopup: return kPolicyNewPopup; + case blink::kWebNavigationPolicyPictureInPicture: + return kPolicyPictureInPicture; default: return kIllegalString; }
diff --git a/content/web_test/renderer/web_frame_test_proxy.cc b/content/web_test/renderer/web_frame_test_proxy.cc index c1a1c675..28d3ce4c 100644 --- a/content/web_test/renderer/web_frame_test_proxy.cc +++ b/content/web_test/renderer/web_frame_test_proxy.cc
@@ -640,6 +640,7 @@ void WebFrameTestProxy::MarkWebAXObjectDirty( const blink::WebAXObject& object, bool subtree, + ax::mojom::EventFrom event_from, ax::mojom::Action event_from_action) { HandleWebAccessibilityEvent(object, "MarkDirty", std::vector<ui::AXEventIntent>()); @@ -650,7 +651,8 @@ if (object.IsDetached()) return; // |this| is invalid. - RenderFrameImpl::MarkWebAXObjectDirty(object, subtree, event_from_action); + RenderFrameImpl::MarkWebAXObjectDirty(object, subtree, event_from, + event_from_action); } void WebFrameTestProxy::HandleWebAccessibilityEvent(
diff --git a/content/web_test/renderer/web_frame_test_proxy.h b/content/web_test/renderer/web_frame_test_proxy.h index 21d3cee..9214a049 100644 --- a/content/web_test/renderer/web_frame_test_proxy.h +++ b/content/web_test/renderer/web_frame_test_proxy.h
@@ -79,10 +79,10 @@ ForRedirect for_redirect) override; void BeginNavigation(std::unique_ptr<blink::WebNavigationInfo> info) override; void PostAccessibilityEvent(const ui::AXEvent& event) override; - void MarkWebAXObjectDirty( - const blink::WebAXObject& object, - bool subtree, - ax::mojom::Action event_from_action = ax::mojom::Action::kNone) override; + void MarkWebAXObjectDirty(const blink::WebAXObject& object, + bool subtree, + ax::mojom::EventFrom event_from, + ax::mojom::Action event_from_action) override; void CheckIfAudioSinkExistsAndIsAuthorized( const blink::WebString& sink_id, blink::WebSetSinkIdCompleteCallback completion_callback) override;
diff --git a/docs/threading_and_tasks.md b/docs/threading_and_tasks.md index 1609c6fd..3b653dc6 100644 --- a/docs/threading_and_tasks.md +++ b/docs/threading_and_tasks.md
@@ -732,6 +732,8 @@ // This runs the (Thread|Sequenced)TaskRunnerHandle queue until it is empty. // Delayed tasks are not added to the queue until they are ripe for execution. + // Prefer explicit exit conditions to RunUntilIdle when possible: + // bit.ly/run-until-idle-with-care2. base::RunLoop().RunUntilIdle(); // A and B have been executed. C is not ripe for execution yet. @@ -759,8 +761,9 @@ FROM_HERE, {}, base::BindOnce(&H), base::BindOnce(&I)); // This runs the (Thread|Sequenced)TaskRunnerHandle queue until both the - // (Thread|Sequenced)TaskRunnerHandle queue and the TaskSchedule queue are - // empty: + // (Thread|Sequenced)TaskRunnerHandle queue and the ThreadPool queue are + // empty. Prefer explicit exit conditions to RunUntilIdle when possible: + // bit.ly/run-until-idle-with-care2. task_environment_.RunUntilIdle(); // E, H, I have been executed. }
diff --git a/extensions/browser/api/declarative/rules_registry_unittest.cc b/extensions/browser/api/declarative/rules_registry_unittest.cc index b8ab1266..5638657a 100644 --- a/extensions/browser/api/declarative/rules_registry_unittest.cc +++ b/extensions/browser/api/declarative/rules_registry_unittest.cc
@@ -251,7 +251,7 @@ " \"instanceType\" : \"declarativeContent.PageStateMatcher\"" " }]" "}"); - EXPECT_TRUE(expected_rule_0->Equals(get_rules[0]->ToValue().get())); + EXPECT_EQ(*expected_rule_0, *get_rules[0]->ToValue()); std::unique_ptr<base::DictionaryValue> expected_rule_1 = ParseDictionary( "{" @@ -265,7 +265,7 @@ " \"instanceType\" : \"declarativeContent.PageStateMatcher\"" " }]" "}"); - EXPECT_TRUE(expected_rule_1->Equals(get_rules[1]->ToValue().get())); + EXPECT_EQ(*expected_rule_1, *get_rules[1]->ToValue()); } // Tests verifies that rules defined in the manifest cannot be deleted but
diff --git a/extensions/browser/api/storage/settings_quota_unittest.cc b/extensions/browser/api/storage/settings_quota_unittest.cc index 33e0618..85da398 100644 --- a/extensions/browser/api/storage/settings_quota_unittest.cc +++ b/extensions/browser/api/storage/settings_quota_unittest.cc
@@ -64,8 +64,8 @@ // Returns whether the settings in |storage_| and |delegate_| are the same as // |settings|. bool SettingsEqual(const base::DictionaryValue& settings) { - return settings.Equals(&storage_->Get().settings()) && - settings.Equals(&delegate_->Get().settings()); + return settings == storage_->Get().settings() && + settings == delegate_->Get().settings(); } // Values with different serialized sizes.
diff --git a/ios/chrome/app/application_delegate/app_state_unittest.mm b/ios/chrome/app/application_delegate/app_state_unittest.mm index 69a2751..3b77b56b 100644 --- a/ios/chrome/app/application_delegate/app_state_unittest.mm +++ b/ios/chrome/app/application_delegate/app_state_unittest.mm
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/ios/block_types.h" #import "base/ios/ios_util.h" +#include "base/mac/foundation_util.h" #import "base/test/task_environment.h" #import "ios/chrome/app/app_startup_parameters.h" #import "ios/chrome/app/application_delegate/app_state_observer.h" @@ -825,7 +826,8 @@ // Starting safe mode will call makeKeyAndVisible on the window. [[window expect] makeKeyAndVisible]; - SceneState* sceneState = appState.connectedScenes.firstObject; + FakeSceneState* sceneState = base::mac::ObjCCastStrict<FakeSceneState>( + appState.connectedScenes.firstObject); sceneState.window = window; // Actions.
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 735feb4..b18d818 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1616,6 +1616,15 @@ <message name="IDS_IOS_PERMISSIONS_CAMERA" desc="Usually used to show whether user has enabled a site's permission to use the device camera."> Camera </message> + <message name="IDS_IOS_PERMISSIONS_INFOBAR_BANNER_CAMERA_ACCESSIBLE" desc="Message shown in the infobar when camera access is enabled."> + Camera access allowed + </message> + <message name="IDS_IOS_PERMISSIONS_INFOBAR_BANNER_CAMERA_AND_MICROPHONE_ACCESSIBLE" desc="Message shown in the infobar when both camera and microphone access are enabled."> + Camera and Microphone access allowed + </message> + <message name="IDS_IOS_PERMISSIONS_INFOBAR_BANNER_MICROPHONE_ACCESSIBLE" desc="Message shown in the infobar when microphone access is enabled."> + Microphone access allowed + </message> <message name="IDS_IOS_PERMISSIONS_MICROPHONE" desc="Usually used to show whether user has enabled a site's permission to use the device microphone."> Microphone </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PERMISSIONS_INFOBAR_BANNER_CAMERA_ACCESSIBLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PERMISSIONS_INFOBAR_BANNER_CAMERA_ACCESSIBLE.png.sha1 new file mode 100644 index 0000000..981ca795 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PERMISSIONS_INFOBAR_BANNER_CAMERA_ACCESSIBLE.png.sha1
@@ -0,0 +1 @@ +eebe07c9d532efd3cdd477fd173e84741628d992 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PERMISSIONS_INFOBAR_BANNER_CAMERA_AND_MICROPHONE_ACCESSIBLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PERMISSIONS_INFOBAR_BANNER_CAMERA_AND_MICROPHONE_ACCESSIBLE.png.sha1 new file mode 100644 index 0000000..4b7b3b9 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PERMISSIONS_INFOBAR_BANNER_CAMERA_AND_MICROPHONE_ACCESSIBLE.png.sha1
@@ -0,0 +1 @@ +a0eff81d5e4614fff6653d4265a71fae737b145c \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PERMISSIONS_INFOBAR_BANNER_MICROPHONE_ACCESSIBLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PERMISSIONS_INFOBAR_BANNER_MICROPHONE_ACCESSIBLE.png.sha1 new file mode 100644 index 0000000..b1289c3 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PERMISSIONS_INFOBAR_BANNER_MICROPHONE_ACCESSIBLE.png.sha1
@@ -0,0 +1 @@ +f8dcdf180e460e93d118525bedec2762813dfda0 \ No newline at end of file
diff --git a/ios/chrome/browser/metrics/window_configuration_recorder.mm b/ios/chrome/browser/metrics/window_configuration_recorder.mm index fcea5deb..4b9e8e64 100644 --- a/ios/chrome/browser/metrics/window_configuration_recorder.mm +++ b/ios/chrome/browser/metrics/window_configuration_recorder.mm
@@ -36,20 +36,18 @@ UIApplication* application) { NSMutableArray<UIWindow*>* windows = [NSMutableArray arrayWithCapacity:3]; - if (base::ios::IsSceneStartupSupported()) { - for (UIScene* scene in application.connectedScenes) { - if (scene.activationState != UISceneActivationStateForegroundActive) + for (UIScene* scene in application.connectedScenes) { + if (scene.activationState != UISceneActivationStateForegroundActive) + continue; + + UIWindowScene* windowScene = base::mac::ObjCCast<UIWindowScene>(scene); + for (UIWindow* window in windowScene.windows) { + // Skip other windows (like keyboard) that keep showing up. + if (![window isKindOfClass:NSClassFromString(@"ChromeOverlayWindow")]) continue; - UIWindowScene* windowScene = base::mac::ObjCCast<UIWindowScene>(scene); - for (UIWindow* window in windowScene.windows) { - // Skip other windows (like keyboard) that keep showing up. - if (![window isKindOfClass:NSClassFromString(@"ChromeOverlayWindow")]) - continue; - - [windows addObject:window]; - break; // Stop after one window per scene. This may be wrong. - } + [windows addObject:window]; + break; // Stop after one window per scene. This may be wrong. } } return [windows copy];
diff --git a/ios/chrome/browser/overlays/public/infobar_banner/BUILD.gn b/ios/chrome/browser/overlays/public/infobar_banner/BUILD.gn index 79b2c0e..12e4aea 100644 --- a/ios/chrome/browser/overlays/public/infobar_banner/BUILD.gn +++ b/ios/chrome/browser/overlays/public/infobar_banner/BUILD.gn
@@ -45,6 +45,8 @@ "//ios/chrome/browser/ui/reading_list:infobar", "//ios/chrome/browser/ui/resources:legacy_password_key", "//ios/chrome/browser/ui/resources:password_key", + "//ios/chrome/browser/web/", + "//ios/web/public/permissions", "//ui/base", ] }
diff --git a/ios/chrome/browser/overlays/public/infobar_banner/permissions_infobar_banner_overlay_request_config.h b/ios/chrome/browser/overlays/public/infobar_banner/permissions_infobar_banner_overlay_request_config.h index fe43873..56b45cd0 100644 --- a/ios/chrome/browser/overlays/public/infobar_banner/permissions_infobar_banner_overlay_request_config.h +++ b/ios/chrome/browser/overlays/public/infobar_banner/permissions_infobar_banner_overlay_request_config.h
@@ -5,7 +5,7 @@ #ifndef IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_INFOBAR_BANNER_PERMISSIONS_INFOBAR_BANNER_OVERLAY_REQUEST_CONFIG_H_ #define IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_INFOBAR_BANNER_PERMISSIONS_INFOBAR_BANNER_OVERLAY_REQUEST_CONFIG_H_ -#include <CoreFoundation/CoreFoundation.h> +#include <UIKit/UIKit.h> #include "ios/chrome/browser/overlays/public/overlay_request_config.h" #include "ios/chrome/browser/overlays/public/overlay_user_data.h" @@ -26,8 +26,8 @@ // The button text. NSString* button_text() const { return button_text_; } - // The name of the banner's icon image. - NSString* icon_image_name() const { return icon_image_name_; } + // The banner's icon image. + UIImage* icon_image() const { return icon_image_; } private: OVERLAY_USER_DATA_SETUP(PermissionsBannerRequestConfig); @@ -38,7 +38,7 @@ NSString* title_text_; NSString* button_text_; - NSString* icon_image_name_ = nil; + UIImage* icon_image_ = nil; // The InfoBar causing this banner. infobars::InfoBar* infobar_ = nullptr;
diff --git a/ios/chrome/browser/overlays/public/infobar_banner/permissions_infobar_banner_overlay_request_config.mm b/ios/chrome/browser/overlays/public/infobar_banner/permissions_infobar_banner_overlay_request_config.mm index b6d29d6..bc0b20b 100644 --- a/ios/chrome/browser/overlays/public/infobar_banner/permissions_infobar_banner_overlay_request_config.mm +++ b/ios/chrome/browser/overlays/public/infobar_banner/permissions_infobar_banner_overlay_request_config.mm
@@ -9,8 +9,9 @@ #include "ios/chrome/browser/infobars/infobar_ios.h" #import "ios/chrome/browser/infobars/overlays/infobar_overlay_type.h" #import "ios/chrome/browser/overlays/public/common/infobars/infobar_overlay_request_config.h" -#import "ios/chrome/browser/ui/reading_list/ios_add_to_reading_list_infobar_delegate.h" +#import "ios/chrome/browser/web/permissions_infobar_delegate.h" #include "ios/chrome/grit/ios_strings.h" +#import "ios/web/public/permissions/permissions.h" #include "ui/base/l10n/l10n_util.h" #include "url/gurl.h" @@ -24,9 +25,9 @@ namespace { // Name of the camera icon image for the permissions banner. -NSString* const kCameraIconImageName = @"infobar_reading_list"; +NSString* const kCameraImageName = @"infobar_permissions_camera"; // Name of the microphone icon image for the permissions banner. -NSString* const kMicrophoneIconImageName = @"infobar_reading_list"; +NSString* const kMicrophoneSystemImageName = @"mic.fill"; } // namespace @@ -35,13 +36,25 @@ PermissionsBannerRequestConfig::PermissionsBannerRequestConfig(InfoBar* infobar) : infobar_(infobar) { DCHECK(infobar_); - // TODO(crbug.com/1289645): Retrieve permissions from a delegate. - - // TODO(crbug.com/1289645): Use appropriate images. - icon_image_name_ = kCameraIconImageName; - - title_text_ = @"Placeholder"; - + PermissionsInfoBarDelegate* delegate = + static_cast<PermissionsInfoBarDelegate*>(infobar_->delegate()); + NSArray<NSNumber*>* accessible_permissions = + delegate->GetMostRecentlyAccessiblePermissions(); + if ([accessible_permissions containsObject:@(web::PermissionCamera)]) { + // Camera access is enabled. + icon_image_ = [UIImage imageNamed:kCameraImageName]; + title_text_ = + [accessible_permissions containsObject:@(web::PermissionMicrophone)] + ? l10n_util::GetNSString( + IDS_IOS_PERMISSIONS_INFOBAR_BANNER_CAMERA_AND_MICROPHONE_ACCESSIBLE) + : l10n_util::GetNSString( + IDS_IOS_PERMISSIONS_INFOBAR_BANNER_CAMERA_ACCESSIBLE); + } else { + // Only microphone access is enabled. + icon_image_ = [UIImage systemImageNamed:kMicrophoneSystemImageName]; + title_text_ = l10n_util::GetNSString( + IDS_IOS_PERMISSIONS_INFOBAR_BANNER_MICROPHONE_ACCESSIBLE); + } button_text_ = l10n_util::GetNSString(IDS_IOS_EDIT_ACTION_TITLE); }
diff --git a/ios/chrome/browser/translate/chrome_ios_translate_client.mm b/ios/chrome/browser/translate/chrome_ios_translate_client.mm index b4f2aee..a10f58c 100644 --- a/ios/chrome/browser/translate/chrome_ios_translate_client.mm +++ b/ios/chrome/browser/translate/chrome_ios_translate_client.mm
@@ -30,8 +30,6 @@ #include "ios/chrome/browser/translate/translate_service_ios.h" #include "ios/chrome/grit/ios_theme_resources.h" #include "ios/web/public/browser_state.h" -#include "ios/web/public/navigation/navigation_item.h" -#include "ios/web/public/navigation/navigation_manager.h" #import "ios/web/public/web_state.h" #include "third_party/metrics_proto/translate_event.pb.h" #include "url/gurl.h" @@ -61,9 +59,7 @@ ChromeBrowserState::FromBrowserState( web_state->GetBrowserState())) ->GetPrimaryModel())), - translate_driver_(web_state, - web_state->GetNavigationManager(), - translate_manager_.get()) { + translate_driver_(web_state, translate_manager_.get()) { web_state_->AddObserver(this); }
diff --git a/ios/chrome/browser/ui/main/incognito_blocker_scene_agent.mm b/ios/chrome/browser/ui/main/incognito_blocker_scene_agent.mm index e885fa5..6f07d42 100644 --- a/ios/chrome/browser/ui/main/incognito_blocker_scene_agent.mm +++ b/ios/chrome/browser/ui/main/incognito_blocker_scene_agent.mm
@@ -74,13 +74,7 @@ #pragma mark - private - (void)showOverlay { - NSArray<UIWindow*>* windows = nil; - - if (base::ios::IsSceneStartupSupported()) { - windows = self.sceneState.scene.windows; - } else { - windows = UIApplication.sharedApplication.windows; - } + NSArray<UIWindow*>* windows = self.sceneState.scene.windows; // Adding |self.overlayView| to sceneState.window won't cover overlay windows // such as fullscreen video. Instead use the topmost window.
diff --git a/ios/chrome/browser/ui/main/scene_state.h b/ios/chrome/browser/ui/main/scene_state.h index 28b2b3c5..036bf1f 100644 --- a/ios/chrome/browser/ui/main/scene_state.h +++ b/ios/chrome/browser/ui/main/scene_state.h
@@ -65,7 +65,7 @@ @property(nonatomic) BOOL incognitoContentVisible; // Window for the associated scene, if any. -@property(nonatomic, strong) UIWindow* window; +@property(nonatomic, readonly) UIWindow* window; // The scene object backing this scene state. It's in a 1-to-1 relationship and // the window scene owns this object (indirectly through scene delegate).
diff --git a/ios/chrome/browser/ui/main/scene_state.mm b/ios/chrome/browser/ui/main/scene_state.mm index b968747..5a70e71 100644 --- a/ios/chrome/browser/ui/main/scene_state.mm +++ b/ios/chrome/browser/ui/main/scene_state.mm
@@ -63,8 +63,6 @@ ContentVisibility _contentVisibility; } -@synthesize window = _window; - - (instancetype)initWithAppState:(AppState*)appState { self = [super init]; if (self) { @@ -104,26 +102,14 @@ #pragma mark - Setters & Getters. -- (void)setWindow:(UIWindow*)window { - if (base::ios::IsSceneStartupSupported()) { - // No need to set anything, instead the getter is backed by scene.windows - // property. - return; - } - _window = window; -} - - (UIWindow*)window { - if (base::ios::IsSceneStartupSupported()) { - UIWindow* mainWindow = nil; - for (UIWindow* window in self.scene.windows) { - if ([window isKindOfClass:[ChromeOverlayWindow class]]) { - mainWindow = window; - } + UIWindow* mainWindow = nil; + for (UIWindow* window in self.scene.windows) { + if ([window isKindOfClass:[ChromeOverlayWindow class]]) { + mainWindow = window; } - return mainWindow; } - return _window; + return mainWindow; } - (NSString*)sceneSessionID {
diff --git a/ios/chrome/browser/ui/main/test/fake_scene_state.h b/ios/chrome/browser/ui/main/test/fake_scene_state.h index 214e243c..674097a1 100644 --- a/ios/chrome/browser/ui/main/test/fake_scene_state.h +++ b/ios/chrome/browser/ui/main/test/fake_scene_state.h
@@ -28,6 +28,11 @@ - (instancetype)initWithAppState:(AppState*)appState NS_UNAVAILABLE; +// Window for the associated scene, if any. +// This is redeclared relative to FakeScene.window, except this is now readwrite +// and backed by an instance variable. +@property(nonatomic, strong, readwrite) UIWindow* window; + // Append a suitable web state test double to the receiver's main interface. - (void)appendWebStateWithURL:(const GURL)URL;
diff --git a/ios/chrome/browser/ui/main/test/fake_scene_state.mm b/ios/chrome/browser/ui/main/test/fake_scene_state.mm index 5422763..d7416a66 100644 --- a/ios/chrome/browser/ui/main/test/fake_scene_state.mm +++ b/ios/chrome/browser/ui/main/test/fake_scene_state.mm
@@ -29,11 +29,12 @@ // Owning pointer for the browser that backs the interface provider. std::unique_ptr<TestBrowser> _browser; std::unique_ptr<TestBrowser> _incognito_browser; - UIWindow* _window; } @synthesize interfaceProvider = _interfaceProvider; +@synthesize window = _window; + - (instancetype)initWithAppState:(AppState*)appState browserState:(ChromeBrowserState*)browserState { if (self = [super initWithAppState:appState]) { @@ -83,12 +84,4 @@ } } -- (UIWindow*)window { - return _window; -} - -- (void)setWindow:(UIWindow*)window { - _window = window; -} - @end
diff --git a/ios/chrome/browser/ui/overlays/infobar_banner/permissions/permissions_infobar_banner_overlay_mediator.mm b/ios/chrome/browser/ui/overlays/infobar_banner/permissions/permissions_infobar_banner_overlay_mediator.mm index 0a1166c..96bef3ed 100644 --- a/ios/chrome/browser/ui/overlays/infobar_banner/permissions/permissions_infobar_banner_overlay_mediator.mm +++ b/ios/chrome/browser/ui/overlays/infobar_banner/permissions/permissions_infobar_banner_overlay_mediator.mm
@@ -52,7 +52,7 @@ [self.consumer setTitleText:config->title_text()]; [self.consumer setButtonText:config->button_text()]; - [self.consumer setIconImage:[UIImage imageNamed:config->icon_image_name()]]; + [self.consumer setIconImage:config->icon_image()]; [self.consumer setPresentsModal:NO]; }
diff --git a/ios/chrome/browser/ui/recent_tabs/recent_tabs_app_interface.mm b/ios/chrome/browser/ui/recent_tabs/recent_tabs_app_interface.mm index c8fed06..4b828502 100644 --- a/ios/chrome/browser/ui/recent_tabs/recent_tabs_app_interface.mm +++ b/ios/chrome/browser/ui/recent_tabs/recent_tabs_app_interface.mm
@@ -15,19 +15,14 @@ @implementation RecentTabsAppInterface + (void)clearCollapsedListViewSectionStates { - if (base::ios::IsSceneStartupSupported()) { - NSArray<UIWindow*>* windows = [UIApplication sharedApplication].windows; - for (UIWindow* window in windows) { - UISceneSession* session = window.windowScene.session; + NSArray<UIWindow*>* windows = [UIApplication sharedApplication].windows; + for (UIWindow* window in windows) { + UISceneSession* session = window.windowScene.session; - NSMutableDictionary* newUserInfo = - [NSMutableDictionary dictionaryWithDictionary:session.userInfo]; - [newUserInfo removeObjectForKey:kListModelCollapsedKey]; - session.userInfo = newUserInfo; - } - } else { - [NSUserDefaults.standardUserDefaults setObject:@{} - forKey:kListModelCollapsedKey]; + NSMutableDictionary* newUserInfo = + [NSMutableDictionary dictionaryWithDictionary:session.userInfo]; + [newUserInfo removeObjectForKey:kListModelCollapsedKey]; + session.userInfo = newUserInfo; } }
diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm index b7e887b4..b022b7e 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm
@@ -160,11 +160,10 @@ [super viewDidLoad]; [self loadModel]; [self setRightNavBarItem]; - if (base::ios::IsSceneStartupSupported()) { - SceneState* sceneState = - SceneStateBrowserAgent::FromBrowser(self.browser)->GetSceneState(); - _uiBlocker = std::make_unique<ScopedUIBlocker>(sceneState); - } + + SceneState* sceneState = + SceneStateBrowserAgent::FromBrowser(self.browser)->GetSceneState(); + _uiBlocker = std::make_unique<ScopedUIBlocker>(sceneState); } - (void)didReceiveMemoryWarning {
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator_unittest.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator_unittest.mm index eefe82c..3b78bb0 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator_unittest.mm
@@ -36,17 +36,19 @@ #endif @interface StubSceneState : SceneState + +// Window for the associated scene, if any. +// This is redeclared relative to FakeScene.window, except this is now readwrite +// and backed by an instance variable. +@property(nonatomic, strong, readwrite) UIWindow* window; + @end @implementation StubSceneState { - UIWindow* _window; } -- (void)setWindow:(UIWindow*)window { - _window = window; -} -- (UIWindow*)window { - return _window; -} + +@synthesize window = _window; + @end @interface TestTabGridCoordinatorDelegate @@ -163,7 +165,7 @@ std::unique_ptr<Browser> incognito_browser_; // Scene state emulated in this test. - SceneState* scene_state_; + StubSceneState* scene_state_; // The TabGridCoordinator that is under test. The test fixture sets // this VC as the root VC for the window.
diff --git a/ios/chrome/test/scoped_key_window.mm b/ios/chrome/test/scoped_key_window.mm index b548f0b..3ebd5be 100644 --- a/ios/chrome/test/scoped_key_window.mm +++ b/ios/chrome/test/scoped_key_window.mm
@@ -13,23 +13,21 @@ #endif ScopedKeyWindow::ScopedKeyWindow() { - if (base::ios::IsSceneStartupSupported()) { - NSSet<UIScene*>* scenes = - ([[UIApplication sharedApplication] connectedScenes]); - // Only one scene is supported in unittests at the moment. - DCHECK_EQ([scenes count], 1u); - UIScene* scene = - [[[UIApplication sharedApplication] connectedScenes] anyObject]; - DCHECK([scene isKindOfClass:[UIWindowScene class]]); - UIWindowScene* windowScene = static_cast<UIWindowScene*>(scene); - for (UIWindow* window in windowScene.windows) { - if ([window isKeyWindow]) { - original_key_window_ = window; - } + NSSet<UIScene*>* scenes = + ([[UIApplication sharedApplication] connectedScenes]); + // Only one scene is supported in unittests at the moment. + DCHECK_EQ([scenes count], 1u); + UIScene* scene = + [[[UIApplication sharedApplication] connectedScenes] anyObject]; + DCHECK([scene isKindOfClass:[UIWindowScene class]]); + UIWindowScene* windowScene = static_cast<UIWindowScene*>(scene); + for (UIWindow* window in windowScene.windows) { + if ([window isKeyWindow]) { + original_key_window_ = window; } - DCHECK(original_key_window_); - current_key_window_ = [[UIWindow alloc] initWithWindowScene:windowScene]; } + DCHECK(original_key_window_); + current_key_window_ = [[UIWindow alloc] initWithWindowScene:windowScene]; if (!current_key_window_) { current_key_window_ = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
diff --git a/ios/web_view/internal/translate/web_view_translate_client.mm b/ios/web_view/internal/translate/web_view_translate_client.mm index 3789dc5..61a20e11 100644 --- a/ios/web_view/internal/translate/web_view_translate_client.mm +++ b/ios/web_view/internal/translate/web_view_translate_client.mm
@@ -50,9 +50,7 @@ translate::TranslateAcceptLanguages* accept_languages) : pref_service_(pref_service), translate_manager_(this, translate_ranker, language_model), - translate_driver_(web_state, - web_state->GetNavigationManager(), - &translate_manager_), + translate_driver_(web_state, &translate_manager_), accept_languages_(accept_languages) { DCHECK(pref_service_); DCHECK(accept_languages_);
diff --git a/ipc/ipc_message_unittest.cc b/ipc/ipc_message_unittest.cc index 22388c86..b9dfd39 100644 --- a/ipc/ipc_message_unittest.cc +++ b/ipc/ipc_message_unittest.cc
@@ -117,7 +117,7 @@ base::PickleIterator iter(msg); EXPECT_TRUE(IPC::ReadParam(&msg, &iter, &output)); - EXPECT_TRUE(input.Equals(&output)); + EXPECT_EQ(input, output); // Also test the corrupt case. IPC::Message bad_msg(1, 2, IPC::Message::PRIORITY_NORMAL); @@ -152,7 +152,7 @@ base::PickleIterator iter(msg); EXPECT_TRUE(IPC::ReadParam(&msg, &iter, &output)); - EXPECT_TRUE(input.Equals(&output)); + EXPECT_EQ(input, output); // Also test the corrupt case. IPC::Message bad_msg(1, 2, IPC::Message::PRIORITY_NORMAL);
diff --git a/media/gpu/chromeos/image_processor.cc b/media/gpu/chromeos/image_processor.cc index 12e9d2c..26d17ae 100644 --- a/media/gpu/chromeos/image_processor.cc +++ b/media/gpu/chromeos/image_processor.cc
@@ -65,7 +65,7 @@ CreateBackendCB create_backend_cb, const PortConfig& input_config, const PortConfig& output_config, - const std::vector<OutputMode>& preferred_output_modes, + OutputMode output_mode, VideoRotation relative_rotation, ErrorCB error_cb, scoped_refptr<base::SequencedTaskRunner> client_task_runner) { @@ -75,7 +75,7 @@ base::IgnoreResult(&base::SequencedTaskRunner::PostTask), client_task_runner, FROM_HERE, std::move(error_cb)); std::unique_ptr<ImageProcessorBackend> backend = create_backend_cb.Run( - input_config, output_config, preferred_output_modes, relative_rotation, + input_config, output_config, output_mode, relative_rotation, std::move(wrapped_error_cb), backend_task_runner); if (!backend) return nullptr;
diff --git a/media/gpu/chromeos/image_processor.h b/media/gpu/chromeos/image_processor.h index ab331e2..7827a4e7 100644 --- a/media/gpu/chromeos/image_processor.h +++ b/media/gpu/chromeos/image_processor.h
@@ -55,7 +55,7 @@ base::RepeatingCallback<std::unique_ptr<ImageProcessorBackend>( const PortConfig& input_config, const PortConfig& output_config, - const std::vector<OutputMode>& preferred_output_modes, + OutputMode output_mode, VideoRotation relative_rotation, ErrorCB error_cb, scoped_refptr<base::SequencedTaskRunner> backend_task_runner)>; @@ -64,7 +64,7 @@ CreateBackendCB create_backend_cb, const PortConfig& input_config, const PortConfig& output_config, - const std::vector<OutputMode>& preferred_output_modes, + OutputMode output_mode, VideoRotation relative_rotation, ErrorCB error_cb, scoped_refptr<base::SequencedTaskRunner> client_task_runner);
diff --git a/media/gpu/chromeos/image_processor_factory.cc b/media/gpu/chromeos/image_processor_factory.cc index 5d7a23377..70da081 100644 --- a/media/gpu/chromeos/image_processor_factory.cc +++ b/media/gpu/chromeos/image_processor_factory.cc
@@ -76,7 +76,7 @@ {VideoFrame::STORAGE_GPU_MEMORY_BUFFER}); return ImageProcessor::Create( base::BindRepeating(&VaapiImageProcessorBackend::Create), input_config, - output_config, {ImageProcessor::OutputMode::IMPORT}, VIDEO_ROTATION_0, + output_config, ImageProcessor::OutputMode::IMPORT, VIDEO_ROTATION_0, std::move(error_cb), std::move(client_task_runner)); } #endif // BUILDFLAG(USE_VAAPI) @@ -158,7 +158,7 @@ std::unique_ptr<ImageProcessor> ImageProcessorFactory::Create( const ImageProcessor::PortConfig& input_config, const ImageProcessor::PortConfig& output_config, - const std::vector<ImageProcessor::OutputMode>& preferred_output_modes, + ImageProcessor::OutputMode output_mode, size_t num_buffers, VideoRotation relative_rotation, scoped_refptr<base::SequencedTaskRunner> client_task_runner, @@ -176,10 +176,9 @@ std::unique_ptr<ImageProcessor> image_processor; for (auto& create_func : create_funcs) { - image_processor = - ImageProcessor::Create(std::move(create_func), input_config, - output_config, preferred_output_modes, - relative_rotation, error_cb, client_task_runner); + image_processor = ImageProcessor::Create( + std::move(create_func), input_config, output_config, output_mode, + relative_rotation, error_cb, client_task_runner); if (image_processor) return image_processor; }
diff --git a/media/gpu/chromeos/image_processor_factory.h b/media/gpu/chromeos/image_processor_factory.h index 38c38078..6439bcdf 100644 --- a/media/gpu/chromeos/image_processor_factory.h +++ b/media/gpu/chromeos/image_processor_factory.h
@@ -31,30 +31,13 @@ // Given input and output PortConfig, it tries to find out the most suitable // ImageProcessor to be used for the current platform. // - // For |preferred_output_modes|, it tries instantiate an ImageProcessor class - // with an output mode in sequence. With ImageProcessor subclass and output - // mode selected, the subclass' factory method will pick the first supported - // input and output storage type from input and output PortConfig, - // respectively. It has an assumption that the selection of output mode is - // independent from the selection of output storage type. - // - // TODO(crbug.com/907767): Remove |preferred_output_modes| once ImageProcessor - // only accepts IMPORT output mode. - // - // Args: - // input_config: input PortConfig. - // output_config: output PortConfig. - // preferred_output_modes: list of preferred output modes. - // num_buffers: number of input and output buffers. - // error_cb: Callback when error occurs. - // // Returns: // Most suitable ImageProcessor instance. nullptr if no ImageProcessor // is available for given parameters on current platform. static std::unique_ptr<ImageProcessor> Create( const ImageProcessor::PortConfig& input_config, const ImageProcessor::PortConfig& output_config, - const std::vector<ImageProcessor::OutputMode>& preferred_output_modes, + ImageProcessor::OutputMode output_mode, size_t num_buffers, VideoRotation relative_rotation, scoped_refptr<base::SequencedTaskRunner> client_task_runner,
diff --git a/media/gpu/chromeos/libyuv_image_processor_backend.cc b/media/gpu/chromeos/libyuv_image_processor_backend.cc index ab634539..641edf3 100644 --- a/media/gpu/chromeos/libyuv_image_processor_backend.cc +++ b/media/gpu/chromeos/libyuv_image_processor_backend.cc
@@ -164,11 +164,13 @@ std::unique_ptr<ImageProcessorBackend> LibYUVImageProcessorBackend::Create( const PortConfig& input_config, const PortConfig& output_config, - const std::vector<OutputMode>& preferred_output_modes, + OutputMode output_mode, VideoRotation relative_rotation, ErrorCB error_cb, scoped_refptr<base::SequencedTaskRunner> backend_task_runner) { VLOGF(2); + DCHECK_EQ(output_mode, OutputMode::IMPORT) + << "Only OutputMode::IMPORT supported"; std::unique_ptr<VideoFrameMapper> input_frame_mapper; // LibYUVImageProcessorBackend supports only memory-based video frame for @@ -218,11 +220,6 @@ return nullptr; } - if (!base::Contains(preferred_output_modes, OutputMode::IMPORT)) { - VLOGF(2) << "Only support OutputMode::IMPORT"; - return nullptr; - } - const gfx::Size& input_size = input_config.visible_rect.size(); const gfx::Size& output_size = output_config.visible_rect.size(); Transform transform = Transform::kConversion;
diff --git a/media/gpu/chromeos/libyuv_image_processor_backend.h b/media/gpu/chromeos/libyuv_image_processor_backend.h index 208b7e22..02187f2 100644 --- a/media/gpu/chromeos/libyuv_image_processor_backend.h +++ b/media/gpu/chromeos/libyuv_image_processor_backend.h
@@ -30,7 +30,7 @@ static std::unique_ptr<ImageProcessorBackend> Create( const PortConfig& input_config, const PortConfig& output_config, - const std::vector<OutputMode>& preferred_output_modes, + OutputMode output_mode, VideoRotation relative_rotation, ErrorCB error_cb, scoped_refptr<base::SequencedTaskRunner> backend_task_runner);
diff --git a/media/gpu/test/image_processor/image_processor_client.cc b/media/gpu/test/image_processor/image_processor_client.cc index 2c32b720..a2d70d4f 100644 --- a/media/gpu/test/image_processor/image_processor_client.cc +++ b/media/gpu/test/image_processor/image_processor_client.cc
@@ -126,7 +126,7 @@ // base::Unretained(this) for ErrorCB is safe here because the callback is // executed on |image_processor_client_thread_| which is owned by this class. image_processor_ = ImageProcessorFactory::Create( - input_config, output_config, {ImageProcessor::OutputMode::IMPORT}, + input_config, output_config, ImageProcessor::OutputMode::IMPORT, num_buffers, relative_rotation, image_processor_client_thread_.task_runner(), base::BindRepeating(&ImageProcessorClient::NotifyError,
diff --git a/media/gpu/v4l2/v4l2_image_processor_backend.cc b/media/gpu/v4l2/v4l2_image_processor_backend.cc index 07bc62a..867616d 100644 --- a/media/gpu/v4l2/v4l2_image_processor_backend.cc +++ b/media/gpu/v4l2/v4l2_image_processor_backend.cc
@@ -229,7 +229,7 @@ size_t num_buffers, const PortConfig& input_config, const PortConfig& output_config, - const std::vector<OutputMode>& preferred_output_modes, + OutputMode output_mode, VideoRotation relative_rotation, ErrorCB error_cb, scoped_refptr<base::SequencedTaskRunner> backend_task_runner) { @@ -246,15 +246,9 @@ return nullptr; } - for (const auto& output_mode : preferred_output_modes) { - auto image_processor = V4L2ImageProcessorBackend::CreateWithOutputMode( - device, num_buffers, input_config, output_config, output_mode, - relative_rotation, error_cb, backend_task_runner); - if (image_processor) - return image_processor; - } - - return nullptr; + return V4L2ImageProcessorBackend::CreateWithOutputMode( + device, num_buffers, input_config, output_config, output_mode, + relative_rotation, error_cb, backend_task_runner); } // static @@ -315,11 +309,6 @@ return nullptr; } - const v4l2_memory output_memory_type = - output_mode == OutputMode::ALLOCATE - ? V4L2_MEMORY_MMAP - : InputStorageTypeToV4L2Memory(output_storage_type); - if (!device->IsImageProcessingSupported()) { VLOGF(1) << "V4L2ImageProcessorBackend not supported in this platform"; return nullptr; @@ -404,6 +393,10 @@ output_planes[i].size = pix_mp.plane_fmt[i].sizeimage; } + const v4l2_memory output_memory_type = + output_mode == OutputMode::ALLOCATE + ? V4L2_MEMORY_MMAP + : InputStorageTypeToV4L2Memory(output_storage_type); std::unique_ptr<V4L2ImageProcessorBackend> image_processor( new V4L2ImageProcessorBackend( backend_task_runner, std::move(device),
diff --git a/media/gpu/v4l2/v4l2_image_processor_backend.h b/media/gpu/v4l2/v4l2_image_processor_backend.h index 6dcab523..df5e9e1 100644 --- a/media/gpu/v4l2/v4l2_image_processor_backend.h +++ b/media/gpu/v4l2/v4l2_image_processor_backend.h
@@ -47,7 +47,7 @@ size_t num_buffers, const PortConfig& input_config, const PortConfig& output_config, - const std::vector<OutputMode>& preferred_output_modes, + OutputMode output_mode, VideoRotation relative_rotation, ErrorCB error_cb, scoped_refptr<base::SequencedTaskRunner> backend_task_runner);
diff --git a/media/gpu/v4l2/v4l2_vda_helpers.cc b/media/gpu/v4l2/v4l2_vda_helpers.cc index aae4e7a1..f256190 100644 --- a/media/gpu/v4l2/v4l2_vda_helpers.cc +++ b/media/gpu/v4l2/v4l2_vda_helpers.cc
@@ -90,7 +90,7 @@ visible_rect, {VideoFrame::STORAGE_DMABUFS}), ImageProcessor::PortConfig(ip_output_format, ip_output_coded_size, {}, visible_rect, {output_storage_type}), - {image_processor_output_mode}, VIDEO_ROTATION_0, std::move(error_cb), + image_processor_output_mode, VIDEO_ROTATION_0, std::move(error_cb), std::move(client_task_runner)); if (!image_processor) return nullptr;
diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc index 702fa0d..46ac323 100644 --- a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc +++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
@@ -422,7 +422,7 @@ } image_processor_ = ImageProcessorFactory::Create( - *input_config, *output_config, {ImageProcessor::OutputMode::IMPORT}, + *input_config, *output_config, ImageProcessor::OutputMode::IMPORT, kImageProcBufferCount, VIDEO_ROTATION_0, encoder_task_runner_, base::BindRepeating(&V4L2VideoEncodeAccelerator::ImageProcessorError, weak_this_));
diff --git a/media/gpu/vaapi/vaapi_image_processor_backend.cc b/media/gpu/vaapi/vaapi_image_processor_backend.cc index 2266228..8647055 100644 --- a/media/gpu/vaapi/vaapi_image_processor_backend.cc +++ b/media/gpu/vaapi/vaapi_image_processor_backend.cc
@@ -62,10 +62,12 @@ std::unique_ptr<ImageProcessorBackend> VaapiImageProcessorBackend::Create( const PortConfig& input_config, const PortConfig& output_config, - const std::vector<OutputMode>& preferred_output_modes, + OutputMode output_mode, VideoRotation relative_rotation, ErrorCB error_cb, scoped_refptr<base::SequencedTaskRunner> backend_task_runner) { + DCHECK_EQ(output_mode, OutputMode::IMPORT) + << "Only OutputMode::IMPORT supported"; // VaapiImageProcessorBackend supports ChromeOS only. #if !BUILDFLAG(IS_CHROMEOS) return nullptr; @@ -90,11 +92,6 @@ return nullptr; } - if (!base::Contains(preferred_output_modes, OutputMode::IMPORT)) { - VLOGF(2) << "VaapiImageProcessorBackend only supports IMPORT mode."; - return nullptr; - } - // We should restrict the acceptable PortConfig for input and output both to // the one returned by GetPlatformVideoFrameLayout(). However, // ImageProcessorFactory interface doesn't provide information about what
diff --git a/media/gpu/vaapi/vaapi_image_processor_backend.h b/media/gpu/vaapi/vaapi_image_processor_backend.h index 5186b45..e218050 100644 --- a/media/gpu/vaapi/vaapi_image_processor_backend.h +++ b/media/gpu/vaapi/vaapi_image_processor_backend.h
@@ -34,7 +34,7 @@ static std::unique_ptr<ImageProcessorBackend> Create( const PortConfig& input_config, const PortConfig& output_config, - const std::vector<OutputMode>& preferred_output_modes, + OutputMode output_mode, VideoRotation relative_rotation, ErrorCB error_cb, scoped_refptr<base::SequencedTaskRunner> backend_task_runner);
diff --git a/media/gpu/vaapi/vaapi_mjpeg_decode_accelerator.cc b/media/gpu/vaapi/vaapi_mjpeg_decode_accelerator.cc index b9f0f98..95beb54f 100644 --- a/media/gpu/vaapi/vaapi_mjpeg_decode_accelerator.cc +++ b/media/gpu/vaapi/vaapi_mjpeg_decode_accelerator.cc
@@ -244,7 +244,7 @@ // (i.e., |decoder_thread_|) and we control the lifetime of |decoder_thread_|. // Therefore, base::Unretained(this) is safe. image_processor_ = LibYUVImageProcessorBackend::Create( - input_config, output_config, {ImageProcessorBackend::OutputMode::IMPORT}, + input_config, output_config, ImageProcessorBackend::OutputMode::IMPORT, VIDEO_ROTATION_0, base::BindRepeating(&VaapiMjpegDecodeAccelerator::OnImageProcessorError, base::Unretained(this)),
diff --git a/net/base/io_buffer.cc b/net/base/io_buffer.cc index a226610..cb133519 100644 --- a/net/base/io_buffer.cc +++ b/net/base/io_buffer.cc
@@ -34,8 +34,7 @@ } IOBuffer::~IOBuffer() { - delete[] data_; - data_ = nullptr; + data_.ClearAndDeleteArray(); } IOBufferWithSize::IOBufferWithSize(size_t size) : IOBuffer(size), size_(size) {
diff --git a/pdf/mojom/pdf.mojom b/pdf/mojom/pdf.mojom index 413fc74dd2e..a0db6d6 100644 --- a/pdf/mojom/pdf.mojom +++ b/pdf/mojom/pdf.mojom
@@ -20,22 +20,6 @@ SetSelectionBounds(gfx.mojom.PointF base, gfx.mojom.PointF extent); }; -// Renderer-side interface to access the PDF extension. -// The browser passes the remote for this interface to the PDF renderer -// associated with the PDF extension. -interface PdfFindInPage { - // Sets the find-in-page tickmarks in the PDF extension UI. - SetTickmarks(array<gfx.mojom.Rect> tickmark); -}; - -// Renderer-side interface to retrieve the PdfFindInPage remote for a specific -// RFH from a PDF extension. Only used by the browser to facilitate PDF renderer -// to PDF extension communication. -interface PdfFindInPageFactory { - // Retrieves the remote to pass to the PDF renderer. - GetPdfFindInPage() => (pending_remote<PdfFindInPage> find_remote); -}; - // Browser-side interface shared by PDF plugins and PDF renderers. interface PdfService { SetListener(pending_remote<PdfListener> client); @@ -56,8 +40,4 @@ // Notifies the embedder know the plugin can handle save commands internally. SetPluginCanSave(bool can_save); - - // Retrieves the PdfFindInPage remote. Only used by PDF renderers. - [Sync] - GetPdfFindInPage() => (pending_remote<PdfFindInPage> find_remote); };
diff --git a/pdf/pdf_view_web_plugin.cc b/pdf/pdf_view_web_plugin.cc index 510d93be..a6b47af 100644 --- a/pdf/pdf_view_web_plugin.cc +++ b/pdf/pdf_view_web_plugin.cc
@@ -933,8 +933,6 @@ void PdfViewWebPlugin::NotifyFindTickmarks( const std::vector<gfx::Rect>& tickmarks) { - // TODO(crbug.com/1278476): Clean up `PdfFindInPage::SetTickmarks()` once - // plugin frame scrolling is stable. container_wrapper_->ReportFindInPageTickmarks(tickmarks); }
diff --git a/pdf/pdf_view_web_plugin.h b/pdf/pdf_view_web_plugin.h index 784327b..b4879fd 100644 --- a/pdf/pdf_view_web_plugin.h +++ b/pdf/pdf_view_web_plugin.h
@@ -16,7 +16,6 @@ #include "cc/paint/paint_image.h" #include "mojo/public/cpp/bindings/associated_remote.h" #include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" #include "pdf/mojom/pdf.mojom.h" #include "pdf/pdf_accessibility_action_handler.h" #include "pdf/pdf_view_plugin_base.h" @@ -383,9 +382,6 @@ // May be unbound in unit tests. mojo::AssociatedRemote<pdf::mojom::PdfService> const pdf_service_remote_; - // Used to access find-in-page interface provided by the PDF extension. - mojo::Remote<pdf::mojom::PdfFindInPage> find_remote_; - mojo::Receiver<pdf::mojom::PdfListener> listener_receiver_{this}; // The id of the current find operation, or -1 if no current operation is
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index 1407277..662259d 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -5366,7 +5366,7 @@ ] }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 25 + "shards": 36 }, "test_id_prefix": "ninja://chrome/android:chrome_public_wpt/" } @@ -6078,7 +6078,7 @@ ] }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 25 + "shards": 32 }, "test_id_prefix": "ninja://weblayer/shell/android:weblayer_shell_wpt/" }
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 6d39399c..7e0bf2e1 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -11344,41 +11344,6 @@ }, { "args": [ - "--num-retries=3", - "--no-xvfb", - "--fuzzy-diff", - "--skipped=always", - "--test-list=../../testing/buildbot/filters/gpu.skiarenderer_vulkan_blink_web_tests.filter", - "--flag-specific=skia-gl" - ], - "isolate_name": "blink_web_tests", - "merge": { - "args": [ - "--verbose" - ], - "script": "//third_party/blink/tools/merge_web_test_results.py" - }, - "name": "skia_renderer_gl_blink_web_tests", - "resultdb": { - "enable": true - }, - "results_handler": "layout tests", - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:5912-19.0.2", - "os": "Ubuntu-19.04", - "pool": "chromium.tests.gpu" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://:blink_web_tests/" - }, - { - "args": [ "pixel", "--show-stdout", "--browser=release", @@ -11423,42 +11388,6 @@ }, { "args": [ - "--num-retries=3", - "--no-xvfb", - "--fuzzy-diff", - "--skipped=always", - "--driver-logging", - "--test-list=../../testing/buildbot/filters/gpu.skiarenderer_vulkan_blink_web_tests.filter", - "--flag-specific=skia-vulkan-native" - ], - "isolate_name": "blink_web_tests", - "merge": { - "args": [ - "--verbose" - ], - "script": "//third_party/blink/tools/merge_web_test_results.py" - }, - "name": "vulkan_native_blink_web_tests", - "resultdb": { - "enable": true - }, - "results_handler": "layout tests", - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:5912-19.0.2", - "os": "Ubuntu-19.04", - "pool": "chromium.tests.gpu" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://:blink_web_tests/" - }, - { - "args": [ "pixel", "--show-stdout", "--browser=release", @@ -11756,41 +11685,6 @@ }, { "args": [ - "--num-retries=3", - "--no-xvfb", - "--fuzzy-diff", - "--skipped=always", - "--test-list=../../testing/buildbot/filters/gpu.skiarenderer_vulkan_blink_web_tests.filter", - "--flag-specific=skia-gl" - ], - "isolate_name": "blink_web_tests", - "merge": { - "args": [ - "--verbose" - ], - "script": "//third_party/blink/tools/merge_web_test_results.py" - }, - "name": "skia_renderer_gl_blink_web_tests", - "resultdb": { - "enable": true - }, - "results_handler": "layout tests", - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:2184-440.100", - "os": "Ubuntu-18.04.5|Ubuntu-18.04.6", - "pool": "chromium.tests.gpu" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://:blink_web_tests/" - }, - { - "args": [ "pixel", "--show-stdout", "--browser=release", @@ -11835,42 +11729,6 @@ }, { "args": [ - "--num-retries=3", - "--no-xvfb", - "--fuzzy-diff", - "--skipped=always", - "--driver-logging", - "--test-list=../../testing/buildbot/filters/gpu.skiarenderer_vulkan_blink_web_tests.filter", - "--flag-specific=skia-vulkan-native" - ], - "isolate_name": "blink_web_tests", - "merge": { - "args": [ - "--verbose" - ], - "script": "//third_party/blink/tools/merge_web_test_results.py" - }, - "name": "vulkan_native_blink_web_tests", - "resultdb": { - "enable": true - }, - "results_handler": "layout tests", - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:2184-440.100", - "os": "Ubuntu-18.04.5|Ubuntu-18.04.6", - "pool": "chromium.tests.gpu" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://:blink_web_tests/" - }, - { - "args": [ "pixel", "--show-stdout", "--browser=release",
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 609a0d0..132c858 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -574,7 +574,7 @@ '--log-wptreport', ], 'swarming': { - 'shards': 25, + 'shards': 36, 'expiration': 18000, 'hard_timeout': 14400, }, @@ -2500,61 +2500,6 @@ }, }, - 'gpu_blink_web_tests_skia_renderer': { - 'skia_renderer_gl_blink_web_tests': { - # layout test failures are retried 3 times when '--test-list' is not - # passed, but 0 times when '--test-list' is passed. We want to always - # retry 3 times, so we explicitly specify it. - 'args': [ - '--num-retries=3', - '--no-xvfb', - '--fuzzy-diff', - '--skipped=always', - '--test-list=../../testing/buildbot/filters/gpu.skiarenderer_vulkan_blink_web_tests.filter', - '--flag-specific=skia-gl', - ], - 'isolate_name': 'blink_web_tests', - 'merge': { - 'args': [ - '--verbose', - ], - 'script': '//third_party/blink/tools/merge_web_test_results.py', - }, - 'resultdb': { - 'enable': True, - }, - 'results_handler': 'layout tests', - }, - }, - - 'gpu_blink_web_tests_vulkan': { - 'vulkan_native_blink_web_tests': { - # layout test failures are retried 3 times when '--test-list' is not - # passed, but 0 times when '--test-list' is passed. We want to always - # retry 3 times, so we explicitly specify it. - 'args': [ - '--num-retries=3', - '--no-xvfb', - '--fuzzy-diff', - '--skipped=always', - '--driver-logging', - '--test-list=../../testing/buildbot/filters/gpu.skiarenderer_vulkan_blink_web_tests.filter', - '--flag-specific=skia-vulkan-native', - ], - 'isolate_name': 'blink_web_tests', - 'merge': { - 'args': [ - '--verbose', - ], - 'script': '//third_party/blink/tools/merge_web_test_results.py', - }, - 'resultdb': { - 'enable': True, - }, - 'results_handler': 'layout tests', - }, - }, - # The command buffer perf tests are only run on Windows. # They are mostly driver and platform independent. 'gpu_command_buffer_perf_passthrough_isolated_scripts': { @@ -5354,7 +5299,7 @@ 'weblayer_shell_wpt': { 'weblayer_shell_wpt': { 'swarming': { - 'shards': 25, + 'shards': 32, 'expiration': 18000, 'hard_timeout': 14400, }, @@ -6327,11 +6272,6 @@ 'gpu_angle_white_box_gtests', ], - 'gpu_blink_web_tests': [ - 'gpu_blink_web_tests_skia_renderer', - 'gpu_blink_web_tests_vulkan', - ], - 'gpu_chromeos_telemetry_tests': [ 'gpu_webgl_conformance_telemetry_tests', ],
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 822d34eb..a52ff8d 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -4325,7 +4325,6 @@ ], 'test_suites': { 'gtest_tests': 'gpu_fyi_vulkan_gtests', - 'isolated_scripts': 'gpu_blink_web_tests', 'gpu_telemetry_tests': 'gpu_skia_renderer_telemetry_tests', }, }, @@ -4337,7 +4336,6 @@ ], 'test_suites': { 'gtest_tests': 'gpu_fyi_vulkan_gtests', - 'isolated_scripts': 'gpu_blink_web_tests', 'gpu_telemetry_tests': 'gpu_skia_renderer_telemetry_tests', }, },
diff --git a/testing/scripts/wpt_android_lib.py b/testing/scripts/wpt_android_lib.py index 50a4ee8..0082bdc 100644 --- a/testing/scripts/wpt_android_lib.py +++ b/testing/scripts/wpt_android_lib.py
@@ -118,6 +118,9 @@ '--no-pause-after-test', '--no-capture-stdio', '--no-manifest-download', + # Exclude webdriver tests for now. + "--exclude=webdriver", + "--exclude=infrastructure/webdriver", '--binary-arg=--enable-blink-features=MojoJS,MojoJSTest', '--binary-arg=--enable-blink-test-features', '--binary-arg=--disable-field-trial-config',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 57a9ef2..02d51fff 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -154,45 +154,6 @@ ] } ], - "AndroidInProductHelpPwaInstall": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "WithToolbar", - "params": { - "availability": "any", - "event_trigger": "name:pwa_install_iph_trigger;comparator:<10;window:1;storage:360", - "event_used": "name:pwa_install_menu_clicked;comparator:<3;window:90;storage:360", - "session_rate": "any", - "session_rate_impact": "none", - "x_iph_replaces_toolbar": "false", - "x_min_engagement_for_iph": "2" - }, - "enable_features": [ - "IPH_PwaInstallAvailableFeature" - ] - }, - { - "name": "WithoutToolbar", - "params": { - "availability": "any", - "event_trigger": "name:pwa_install_iph_trigger;comparator:<10;window:1;storage:360", - "event_used": "name:pwa_install_menu_clicked;comparator:<3;window:90;storage:360", - "session_rate": "any", - "session_rate_impact": "none", - "x_iph_replaces_toolbar": "true", - "x_min_engagement_for_iph": "2" - }, - "enable_features": [ - "IPH_PwaInstallAvailableFeature" - ] - } - ] - } - ], "AndroidMediaPickerVideoSupport": [ { "platforms": [ @@ -1750,6 +1711,21 @@ ] } ], + "CleanUndecryptablePasswordsLinuxDuringInitialSync": [ + { + "platforms": [ + "linux" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SyncUndecryptablePasswordsLinux" + ] + } + ] + } + ], "CombinedNavigationOptimizations": [ { "platforms": [ @@ -2249,6 +2225,7 @@ "NtpChromeCartModuleAbandonedCartDiscountParam": "true", "NtpChromeCartModuleAbandonedCartDiscountUseUtmParam": "true", "NtpChromeCartModuleHeuristicsImprovementParam": "true", + "NtpDriveModuleExperimentGroupParam": "foo:bar", "NtpModulesLoadTimeoutMillisecondsParam": "3000", "NtpModulesOrderParam": "", "discount-fetch-delay": "1h" @@ -3554,24 +3531,6 @@ ] } ], - "InstalledAppsInCbd": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "InstalledAppsInCbd" - ] - } - ] - } - ], "KeyboardAccessoryAddressIPH": [ { "platforms": [ @@ -5946,25 +5905,6 @@ ] } ], - "TabToGTSAnimation": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "zooming-min-memory-mb": "2048", - "zooming-min-sdk-version": "23" - }, - "enable_features": [ - "TabToGTSAnimation" - ] - } - ] - } - ], "TailoredSecurityIntegration": [ { "platforms": [
diff --git a/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc b/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc index 386ce09d..e7aa066 100644 --- a/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc +++ b/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc
@@ -219,6 +219,7 @@ out->always_show_focus = data.always_show_focus(); out->touch_drag_drop_enabled = data.touch_drag_drop_enabled(); out->webxr_immersive_ar_allowed = data.webxr_immersive_ar_allowed(); + out->window_placement_always_allowed = data.window_placement_always_allowed(); return true; }
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn index 32ffa12..b5d1f788 100644 --- a/third_party/blink/public/BUILD.gn +++ b/third_party/blink/public/BUILD.gn
@@ -363,6 +363,7 @@ "web/web_pepper_socket.h", "web/web_pepper_socket_client.h", "web/web_performance.h", + "web/web_picture_in_picture_window_options.h", "web/web_plugin.h", "web/web_plugin_container.h", "web/web_plugin_document.h",
diff --git a/third_party/blink/public/common/web_preferences/web_preferences.h b/third_party/blink/public/common/web_preferences/web_preferences.h index 8509f72..da04249 100644 --- a/third_party/blink/public/common/web_preferences/web_preferences.h +++ b/third_party/blink/public/common/web_preferences/web_preferences.h
@@ -352,6 +352,10 @@ // change depending on the enterprise policy if the platform supports it. bool webxr_immersive_ar_allowed = true; + // By default, window placement requires a user to set a content setting, + // but enterprise policy can automatically allow this feature for all sites. + bool window_placement_always_allowed = false; + // We try to keep the default values the same as the default values in // chrome, except for the cases where it would require lots of extra work for // the embedder to use the same default value.
diff --git a/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h b/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h index a6291be..ecce299 100644 --- a/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h +++ b/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h
@@ -762,6 +762,11 @@ return r.webxr_immersive_ar_allowed; } + static bool window_placement_always_allowed( + const blink::web_pref::WebPreferences& r) { + return r.window_placement_always_allowed; + } + static bool Read(blink::mojom::WebPreferencesDataView r, blink::web_pref::WebPreferences* out); };
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom index b79a6ed..e21f78eb 100644 --- a/third_party/blink/public/mojom/web_feature/web_feature.mojom +++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -3471,6 +3471,7 @@ kPrivateNetworkAccessWithinWorker = 4150, kClientHintsUAWoW64 = 4151, kFetchSetCookieInRequestGuardedHeaders = 4152, + kV8Window_RequestPictureInPictureWindow_Method = 4153, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/mojom/webpreferences/web_preferences.mojom b/third_party/blink/public/mojom/webpreferences/web_preferences.mojom index c09e8c49..72e130d 100644 --- a/third_party/blink/public/mojom/webpreferences/web_preferences.mojom +++ b/third_party/blink/public/mojom/webpreferences/web_preferences.mojom
@@ -435,4 +435,8 @@ // Controls whether WebXR's immersive-ar is allowed. bool webxr_immersive_ar_allowed; + + // Controls whether the window-placement permission is automatically granted + // to all sites, according to enterprise policy. + bool window_placement_always_allowed; };
diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h index 507efab2..f2b597e 100644 --- a/third_party/blink/public/web/web_local_frame_client.h +++ b/third_party/blink/public/web/web_local_frame_client.h
@@ -653,10 +653,13 @@ // Notifies the embedder that a WebAXObject is dirty and its state needs // to be serialized again. If |subtree| is true, the entire subtree is // dirty. - virtual void MarkWebAXObjectDirty( - const WebAXObject&, - bool subtree, - ax::mojom::Action event_from_action = ax::mojom::Action::kNone) {} + // |event_from| and |event_from_action| annotate this node change with info + // about the event which caused the change. For example, an event from a user + // or an event from a focus action. + virtual void MarkWebAXObjectDirty(const WebAXObject&, + bool subtree, + ax::mojom::EventFrom event_from, + ax::mojom::Action event_from_action) {} // Audio Output Devices API --------------------------------------------
diff --git a/third_party/blink/public/web/web_navigation_policy.h b/third_party/blink/public/web/web_navigation_policy.h index 330e719..d4b3e0e 100644 --- a/third_party/blink/public/web/web_navigation_policy.h +++ b/third_party/blink/public/web/web_navigation_policy.h
@@ -40,6 +40,10 @@ kWebNavigationPolicyNewForegroundTab, kWebNavigationPolicyNewWindow, kWebNavigationPolicyNewPopup, + + // The navigation request is for a Picture-in-Picture window opened via + // |window.requestPictureInPictureWindow()|. + kWebNavigationPolicyPictureInPicture, }; } // namespace blink
diff --git a/third_party/blink/public/web/web_picture_in_picture_window_options.h b/third_party/blink/public/web/web_picture_in_picture_window_options.h new file mode 100644 index 0000000..7a071c48 --- /dev/null +++ b/third_party/blink/public/web/web_picture_in_picture_window_options.h
@@ -0,0 +1,19 @@ +// Copyright 2022 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_PUBLIC_WEB_WEB_PICTURE_IN_PICTURE_WINDOW_OPTIONS_H_ +#define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_PICTURE_IN_PICTURE_WINDOW_OPTIONS_H_ + +#include "ui/gfx/geometry/size.h" + +namespace blink { + +struct WebPictureInPictureWindowOptions { + gfx::Size size; + bool constrain_aspect_ratio = false; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_PICTURE_IN_PICTURE_WINDOW_OPTIONS_H_
diff --git a/third_party/blink/public/web/web_settings.h b/third_party/blink/public/web/web_settings.h index 35e1ee68..3211c5b 100644 --- a/third_party/blink/public/web/web_settings.h +++ b/third_party/blink/public/web/web_settings.h
@@ -282,6 +282,7 @@ virtual void SetAccessibilityIncludeSvgGElement(bool) = 0; virtual void SetWebXRImmersiveArAllowed(bool) = 0; virtual void SetLitePageSubresourceRedirectOrigin(const WebString&) = 0; + virtual void SetWindowPlacementAlwaysAllowed(bool) = 0; protected: ~WebSettings() = default;
diff --git a/third_party/blink/renderer/bindings/generated_in_modules.gni b/third_party/blink/renderer/bindings/generated_in_modules.gni index 0f2ce99..acc6383 100644 --- a/third_party/blink/renderer/bindings/generated_in_modules.gni +++ b/third_party/blink/renderer/bindings/generated_in_modules.gni
@@ -725,6 +725,8 @@ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_picture_in_picture_event_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_picture_in_picture_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_picture_in_picture_options.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_picture_in_picture_window_options.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_picture_in_picture_window_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_plane_layout.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_plane_layout.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_point_2d.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni index 91f11ff..8f22afbe 100644 --- a/third_party/blink/renderer/bindings/idl_in_modules.gni +++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -588,7 +588,9 @@ "//third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_event_init.idl", "//third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_options.idl", "//third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_window.idl", + "//third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_window_options.idl", "//third_party/blink/renderer/modules/picture_in_picture/shadow_root_picture_in_picture.idl", + "//third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.idl", "//third_party/blink/renderer/modules/plugins/mime_type.idl", "//third_party/blink/renderer/modules/plugins/mime_type_array.idl", "//third_party/blink/renderer/modules/plugins/navigator_plugins.idl",
diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.cc b/third_party/blink/renderer/core/exported/web_settings_impl.cc index b541569..e13944b 100644 --- a/third_party/blink/renderer/core/exported/web_settings_impl.cc +++ b/third_party/blink/renderer/core/exported/web_settings_impl.cc
@@ -804,4 +804,8 @@ settings_->SetLitePageSubresourceRedirectOrigin(origin); } +void WebSettingsImpl::SetWindowPlacementAlwaysAllowed(bool allow) { + settings_->SetWindowPlacementAlwaysAllowed(allow); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.h b/third_party/blink/renderer/core/exported/web_settings_impl.h index 910d094..838d3f17 100644 --- a/third_party/blink/renderer/core/exported/web_settings_impl.h +++ b/third_party/blink/renderer/core/exported/web_settings_impl.h
@@ -230,6 +230,7 @@ void SetAccessibilityIncludeSvgGElement(bool) override; void SetWebXRImmersiveArAllowed(bool webxr_immersive_ar_allowed) override; void SetLitePageSubresourceRedirectOrigin(const WebString&) override; + void SetWindowPlacementAlwaysAllowed(bool) override; bool RenderVSyncNotificationEnabled() const { return render_v_sync_notification_enabled_;
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc index b95a437..861894c 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -391,6 +391,8 @@ return ui::mojom::blink::WindowOpenDisposition::NEW_WINDOW; case kNavigationPolicyNewPopup: return ui::mojom::blink::WindowOpenDisposition::NEW_POPUP; + case kNavigationPolicyPictureInPicture: + return ui::mojom::blink::WindowOpenDisposition::NEW_POPUP; } NOTREACHED() << "Unexpected NavigationPolicy"; return ui::mojom::blink::WindowOpenDisposition::IGNORE_ACTION; @@ -1789,6 +1791,8 @@ settings->SetTouchDragDropEnabled(prefs.touch_drag_drop_enabled); settings->SetTouchDragEndContextMenu(prefs.touch_dragend_context_menu); settings->SetWebXRImmersiveArAllowed(prefs.webxr_immersive_ar_allowed); + settings->SetWindowPlacementAlwaysAllowed( + prefs.window_placement_always_allowed); #if BUILDFLAG(IS_MAC) web_view_impl->SetMaximumLegibleScale(
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc index 60630f03..c5a05cb 100644 --- a/third_party/blink/renderer/core/frame/local_dom_window.cc +++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
@@ -43,6 +43,7 @@ #include "third_party/blink/public/mojom/permissions_policy/policy_disposition.mojom-blink.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/task_type.h" +#include "third_party/blink/public/web/web_picture_in_picture_window_options.h" #include "third_party/blink/renderer/bindings/core/v8/binding_security.h" #include "third_party/blink/renderer/bindings/core/v8/isolated_world_csp.h" #include "third_party/blink/renderer/bindings/core/v8/script_controller.h" @@ -2148,6 +2149,48 @@ return result.frame->DomWindow(); } +DOMWindow* LocalDOMWindow::openPictureInPictureWindow( + v8::Isolate* isolate, + const WebPictureInPictureWindowOptions& options, + ExceptionState& exception_state) { + LocalDOMWindow* incumbent_window = IncumbentDOMWindow(isolate); + LocalDOMWindow* entered_window = EnteredDOMWindow(isolate); + + // If the bindings implementation is 100% correct, the current realm and the + // entered realm should be same origin-domain. However, to be on the safe + // side and add some defense in depth, we'll check against the entry realm + // as well here. + if (!BindingSecurity::ShouldAllowAccessTo(entered_window, this, + exception_state)) { + UseCounter::Count(GetExecutionContext(), + WebFeature::kWindowOpenRealmMismatch); + return nullptr; + } + + if (!IsCurrentlyDisplayedInFrame()) + return nullptr; + if (!incumbent_window->GetFrame() || !entered_window->GetFrame()) + return nullptr; + + FrameLoadRequest frame_request(incumbent_window, + ResourceRequest(KURL(g_empty_string))); + frame_request.SetPictureInPictureWindowOptions(options); + + // We always create a new window here. + FrameTree::FindResult result = + GetFrame()->Tree().FindOrCreateFrameForNavigation(frame_request, + "_blank"); + if (!result.frame) + return nullptr; + + // A new window should always be created. + DCHECK(result.new_window); + + result.frame->Navigate(frame_request, WebFrameLoadType::kStandard); + + return result.frame->DomWindow(); +} + void LocalDOMWindow::Trace(Visitor* visitor) const { visitor->Trace(script_controller_); visitor->Trace(document_);
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.h b/third_party/blink/renderer/core/frame/local_dom_window.h index 6bcf499..d51d616 100644 --- a/third_party/blink/renderer/core/frame/local_dom_window.h +++ b/third_party/blink/renderer/core/frame/local_dom_window.h
@@ -90,6 +90,7 @@ class V8FrameRequestCallback; class V8IdleRequestCallback; class V8VoidFunction; +struct WebPictureInPictureWindowOptions; class WindowAgent; enum PageTransitionEventPersistence { @@ -364,6 +365,10 @@ const String& features, ExceptionState&); + DOMWindow* openPictureInPictureWindow(v8::Isolate*, + const WebPictureInPictureWindowOptions&, + ExceptionState&); + FrameConsole* GetFrameConsole() const; void PrintErrorMessage(const String&) const;
diff --git a/third_party/blink/renderer/core/frame/settings.json5 b/third_party/blink/renderer/core/frame/settings.json5 index 1cdd97f..f69489c 100644 --- a/third_party/blink/renderer/core/frame/settings.json5 +++ b/third_party/blink/renderer/core/frame/settings.json5
@@ -1095,5 +1095,11 @@ name: "LitePageSubresourceRedirectOrigin", type: "String", }, + // If true, this setting will automatically grant the window placement + // permission on all sites. This is used for enterprise policy. + { + name: "WindowPlacementAlwaysAllowed", + initial: false, + }, ], }
diff --git a/third_party/blink/renderer/core/html/image_document.cc b/third_party/blink/renderer/core/html/image_document.cc index 6a82687..0f2c5353 100644 --- a/third_party/blink/renderer/core/html/image_document.cc +++ b/third_party/blink/renderer/core/html/image_document.cc
@@ -408,6 +408,7 @@ void ImageDocument::UpdateImageStyle() { StringBuilder image_style; + image_style.Append("display: block;"); image_style.Append("-webkit-user-select: none;"); if (ShouldShrinkToFit()) {
diff --git a/third_party/blink/renderer/core/html/resources/html.css b/third_party/blink/renderer/core/html/resources/html.css index 7dae30bf..35a7860 100644 --- a/third_party/blink/renderer/core/html/resources/html.css +++ b/third_party/blink/renderer/core/html/resources/html.css
@@ -1204,15 +1204,11 @@ background-origin: content-box; background-repeat: no-repeat; background-size: contain; - height: 1.2em; - margin-inline-start: 24px; + height: 1.0em; + width: 1.0em; opacity: 1; outline: none; - padding-bottom: 2px; - padding-inline-start: 3px; - padding-inline-end: 3px; - padding-top: 2px; - width: 1.2em; + padding: 2px; } input[type="date" i]::-webkit-calendar-picker-indicator:focus-visible,
diff --git a/third_party/blink/renderer/core/inspector/inspector_page_agent.cc b/third_party/blink/renderer/core/inspector/inspector_page_agent.cc index e3f0115..c0ffad35 100644 --- a/third_party/blink/renderer/core/inspector/inspector_page_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_page_agent.cc
@@ -139,6 +139,8 @@ return DispositionEnum::NewWindow; case kNavigationPolicyNewPopup: return DispositionEnum::NewWindow; + case kNavigationPolicyPictureInPicture: + return DispositionEnum::NewWindow; } return DispositionEnum::CurrentTab; }
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc index b00232cd..182e522 100644 --- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
@@ -3323,6 +3323,16 @@ fragment_relative_block_offset), item_offsets.relative_offset); + // We may have failed to generate a fragment (due to running out of + // fragmentainer space). Force a breakpoint at the row, so we shift the + // item into the next fragmentainer. + if (result->Status() != NGLayoutResult::kSuccess) { + DCHECK_EQ(result->Status(), NGLayoutResult::kOutOfFragmentainerSpace); + breakpoint_row_set_index = + std::min(item_row_set_index, breakpoint_row_set_index); + continue; + } + const NGBoxFragment fragment( container_writing_direction, To<NGPhysicalBoxFragment>(result->PhysicalFragment()));
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator.cc b/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator.cc index 61408ce2..a76ed90 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_layout_overflow_calculator.cc
@@ -175,15 +175,7 @@ if (line_rect.IsEmpty()) continue; - // Currently line-boxes don't contribute overflow in the block-axis. This - // was added for web-compat reasons. - PhysicalRect child_overflow = line_rect; - if (writing_direction_.IsHorizontal()) - child_overflow.size.height = LayoutUnit(); - else - child_overflow.size.width = LayoutUnit(); - - layout_overflow_.UniteEvenIfEmpty(child_overflow); + layout_overflow_.UniteEvenIfEmpty(line_rect); continue; }
diff --git a/third_party/blink/renderer/core/loader/frame_load_request.h b/third_party/blink/renderer/core/loader/frame_load_request.h index 9e4c250..b2ef68d 100644 --- a/third_party/blink/renderer/core/loader/frame_load_request.h +++ b/third_party/blink/renderer/core/loader/frame_load_request.h
@@ -36,6 +36,7 @@ #include "third_party/blink/public/mojom/frame/triggering_event_info.mojom-blink.h" #include "third_party/blink/public/mojom/loader/request_context_frame_type.mojom-blink.h" #include "third_party/blink/public/platform/web_impression.h" +#include "third_party/blink/public/web/web_picture_in_picture_window_options.h" #include "third_party/blink/public/web/web_window_features.h" #include "third_party/blink/renderer/bindings/core/v8/source_location.h" #include "third_party/blink/renderer/core/frame/frame_types.h" @@ -154,6 +155,15 @@ window_features_ = features; } + const absl::optional<WebPictureInPictureWindowOptions>& + GetPictureInPictureWindowOptions() const { + return picture_in_picture_window_options_; + } + void SetPictureInPictureWindowOptions( + const WebPictureInPictureWindowOptions& options) { + picture_in_picture_window_options_ = options; + } + void SetNoOpener() { window_features_.noopener = true; } void SetNoReferrer() { should_send_referrer_ = kNeverSendReferrer; @@ -197,6 +207,8 @@ mojom::RequestContextFrameType frame_type_ = mojom::RequestContextFrameType::kNone; WebWindowFeatures window_features_; + absl::optional<WebPictureInPictureWindowOptions> + picture_in_picture_window_options_; absl::optional<WebImpression> impression_; absl::optional<LocalFrameToken> initiator_frame_token_; mojo::PendingRemote<mojom::blink::PolicyContainerHostKeepAliveHandle>
diff --git a/third_party/blink/renderer/core/loader/navigation_policy.cc b/third_party/blink/renderer/core/loader/navigation_policy.cc index 8ead3f4..0bf938d0 100644 --- a/third_party/blink/renderer/core/loader/navigation_policy.cc +++ b/third_party/blink/renderer/core/loader/navigation_policy.cc
@@ -192,5 +192,7 @@ kNavigationPolicyNewForegroundTab); STATIC_ASSERT_ENUM(kWebNavigationPolicyNewWindow, kNavigationPolicyNewWindow); STATIC_ASSERT_ENUM(kWebNavigationPolicyNewPopup, kNavigationPolicyNewPopup); +STATIC_ASSERT_ENUM(kWebNavigationPolicyPictureInPicture, + kNavigationPolicyPictureInPicture); } // namespace blink
diff --git a/third_party/blink/renderer/core/loader/navigation_policy.h b/third_party/blink/renderer/core/loader/navigation_policy.h index 8eaa88a..56dc9dbd 100644 --- a/third_party/blink/renderer/core/loader/navigation_policy.h +++ b/third_party/blink/renderer/core/loader/navigation_policy.h
@@ -45,6 +45,7 @@ kNavigationPolicyNewForegroundTab, kNavigationPolicyNewWindow, kNavigationPolicyNewPopup, + kNavigationPolicyPictureInPicture, }; // Returns a NavigationPolicy to use for starting a navigation
diff --git a/third_party/blink/renderer/core/page/create_window.cc b/third_party/blink/renderer/core/page/create_window.cc index 13d1a67..eb654ae201 100644 --- a/third_party/blink/renderer/core/page/create_window.cc +++ b/third_party/blink/renderer/core/page/create_window.cc
@@ -311,9 +311,15 @@ } const WebWindowFeatures& features = request.GetWindowFeatures(); - request.SetNavigationPolicy(NavigationPolicyForCreateWindow(features)); - probe::WindowOpen(&opener_window, url, frame_name, features, - LocalFrame::HasTransientUserActivation(&opener_frame)); + const auto& picture_in_picture_window_options = + request.GetPictureInPictureWindowOptions(); + if (picture_in_picture_window_options.has_value()) { + request.SetNavigationPolicy(kNavigationPolicyPictureInPicture); + } else { + request.SetNavigationPolicy(NavigationPolicyForCreateWindow(features)); + probe::WindowOpen(&opener_window, url, frame_name, features, + LocalFrame::HasTransientUserActivation(&opener_frame)); + } // Sandboxed frames cannot open new auxiliary browsing contexts. if (opener_window.IsSandboxed(
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 e5dd67b6..05da7db 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
@@ -3410,8 +3410,12 @@ WebLocalFrameImpl* webframe = WebLocalFrameImpl::FromFrame( obj->GetDocument()->AXObjectCacheOwner().GetFrame()); - if (webframe && webframe->Client()) - webframe->Client()->MarkWebAXObjectDirty(WebAXObject(obj), subtree); + if (webframe && webframe->Client()) { + webframe->Client()->MarkWebAXObjectDirty(WebAXObject(obj), subtree, + active_event_from_, + active_event_from_action_); + } + obj->UpdateCachedAttributeValuesIfNeeded(true); for (auto agent : agents_) agent->AXObjectModified(obj, subtree);
diff --git a/third_party/blink/renderer/modules/picture_in_picture/BUILD.gn b/third_party/blink/renderer/modules/picture_in_picture/BUILD.gn index 1841d2d..5b5e4c6 100644 --- a/third_party/blink/renderer/modules/picture_in_picture/BUILD.gn +++ b/third_party/blink/renderer/modules/picture_in_picture/BUILD.gn
@@ -20,5 +20,7 @@ "picture_in_picture_window.h", "shadow_root_picture_in_picture.cc", "shadow_root_picture_in_picture.h", + "window_picture_in_picture.cc", + "window_picture_in_picture.h", ] }
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc index 73c42724..77458a2 100644 --- a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc +++ b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc
@@ -15,10 +15,13 @@ #include "third_party/blink/public/common/scheme_registry.h" #include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h" #include "third_party/blink/public/mojom/permissions_policy/permissions_policy.mojom-blink.h" +#include "third_party/blink/public/web/web_picture_in_picture_window_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_picture_in_picture_options.h" +#include "third_party/blink/renderer/bindings/modules/v8/v8_picture_in_picture_window_options.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/core/dom/events/event.h" +#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/fullscreen/fullscreen.h" @@ -401,6 +404,29 @@ return (picture_in_picture_element_ == AutoPictureInPictureElement()); } +void PictureInPictureControllerImpl::CreateDocumentPictureInPictureWindow( + ScriptState* script_state, + LocalDOMWindow& opener, + PictureInPictureWindowOptions* options, + ScriptPromiseResolver* resolver, + ExceptionState& exception_state) { + WebPictureInPictureWindowOptions web_options; + web_options.size = gfx::Size(options->width(), options->height()); + web_options.constrain_aspect_ratio = options->constrainAspectRatio(); + + opener.openPictureInPictureWindow(script_state->GetIsolate(), web_options, + exception_state); + + if (exception_state.HadException()) { + resolver->Reject(); + return; + } + + // TODO(https://crbug.com/1253970): Resolve with a PictureInPictureWindow + // object. + resolver->Resolve(); +} + void PictureInPictureControllerImpl::PageVisibilityChanged() { DCHECK(GetSupplementable());
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h index bf840a7..6dcee48 100644 --- a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h +++ b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h
@@ -17,9 +17,12 @@ namespace blink { +class ExceptionState; class HTMLVideoElement; class PictureInPictureOptions; class PictureInPictureWindow; +class PictureInPictureWindowOptions; +class ScriptState; class TreeScope; // The PictureInPictureControllerImpl is keeping the state and implementing the @@ -76,6 +79,13 @@ // Returns whether exiting Auto Picture-in-Picture is allowed. bool IsExitAutoPictureInPictureAllowed() const; + // Creates a picture-in-picture window that can contain arbitrary HTML. + void CreateDocumentPictureInPictureWindow(ScriptState*, + LocalDOMWindow&, + PictureInPictureWindowOptions*, + ScriptPromiseResolver*, + ExceptionState&); + // Implementation of PictureInPictureController. void EnterPictureInPicture(HTMLElement*, PictureInPictureOptions*,
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_window_options.idl b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_window_options.idl new file mode 100644 index 0000000..f3430946 --- /dev/null +++ b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_window_options.idl
@@ -0,0 +1,10 @@ +// Copyright 2022 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. + +// https://wicg.github.io/picture-in-picture/v2/ +dictionary PictureInPictureWindowOptions { + long width; + long height; + boolean constrainAspectRatio = false; +};
diff --git a/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.cc b/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.cc new file mode 100644 index 0000000..dac1167 --- /dev/null +++ b/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.cc
@@ -0,0 +1,44 @@ +// Copyright 2022 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/picture_in_picture/window_picture_in_picture.h" + +#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" +#include "third_party/blink/renderer/core/frame/local_dom_window.h" +#include "third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h" +#include "third_party/blink/renderer/platform/bindings/exception_code.h" +#include "third_party/blink/renderer/platform/bindings/exception_state.h" + +namespace blink { + +// static +ScriptPromise WindowPictureInPicture::requestPictureInPictureWindow( + ScriptState* script_state, + LocalDOMWindow& window, + PictureInPictureWindowOptions* options, + ExceptionState& exception_state) { + // TODO(https://crbug.com/1253970): Check if PiP is allowed (e.g. user + // gesture, permissions, etc). + auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state); + auto promise = resolver->Promise(); + + if (!script_state->ContextIsValid()) { + exception_state.ThrowDOMException(DOMExceptionCode::kAbortError, + "Document not attached"); + resolver->Reject(); + return promise; + } + + // |window.document()| should always exist after document construction. + auto* document = window.document(); + DCHECK(document); + + PictureInPictureControllerImpl::From(*document) + .CreateDocumentPictureInPictureWindow(script_state, window, options, + resolver, exception_state); + + return promise; +} + +} // namespace blink
diff --git a/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.h b/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.h new file mode 100644 index 0000000..62e1674d --- /dev/null +++ b/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.h
@@ -0,0 +1,31 @@ +// Copyright 2022 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_PICTURE_IN_PICTURE_WINDOW_PICTURE_IN_PICTURE_H_ +#define THIRD_PARTY_BLINK_RENDERER_MODULES_PICTURE_IN_PICTURE_WINDOW_PICTURE_IN_PICTURE_H_ + +#include "third_party/blink/renderer/core/dom/qualified_name.h" + +namespace blink { + +class ExceptionState; +class LocalDOMWindow; +class PictureInPictureWindowOptions; +class ScriptPromise; +class ScriptState; + +class WindowPictureInPicture { + STATIC_ONLY(WindowPictureInPicture); + + public: + static ScriptPromise requestPictureInPictureWindow( + ScriptState*, + LocalDOMWindow&, + PictureInPictureWindowOptions*, + ExceptionState&); +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_PICTURE_IN_PICTURE_WINDOW_PICTURE_IN_PICTURE_H_
diff --git a/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.idl b/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.idl new file mode 100644 index 0000000..e8ac937 --- /dev/null +++ b/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.idl
@@ -0,0 +1,11 @@ +// Copyright 2022 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. + +[ + ImplementedAs=WindowPictureInPicture, + RuntimeEnabled=PictureInPictureV2 +] +partial interface Window { + [CallWith=ScriptState, RaisesException, Measure, NewObject] Promise<PictureInPictureWindow> requestPictureInPictureWindow(PictureInPictureWindowOptions options); +};
diff --git a/third_party/blink/renderer/modules/screen_enumeration/window_screens.cc b/third_party/blink/renderer/modules/screen_enumeration/window_screens.cc index aea0e9cc..1366e82 100644 --- a/third_party/blink/renderer/modules/screen_enumeration/window_screens.cc +++ b/third_party/blink/renderer/modules/screen_enumeration/window_screens.cc
@@ -10,6 +10,8 @@ #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" +#include "third_party/blink/renderer/core/frame/settings.h" +#include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/modules/permissions/permission_utils.h" #include "third_party/blink/renderer/modules/screen_enumeration/screen_details.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" @@ -61,18 +63,33 @@ return ScriptPromise(); } - ExecutionContext* context = ExecutionContext::From(script_state); - DCHECK(context->IsSecureContext()); // [SecureContext] in IDL. + LocalDOMWindow* window = LocalDOMWindow::From(script_state); + DCHECK(window->IsSecureContext()); // [SecureContext] in IDL. if (!permission_service_.is_bound()) { // See https://bit.ly/2S0zRAS for task types. ConnectToPermissionService( - context, permission_service_.BindNewPipeAndPassReceiver( - context->GetTaskRunner(TaskType::kMiscPlatformAPI))); + window, permission_service_.BindNewPipeAndPassReceiver( + window->GetTaskRunner(TaskType::kMiscPlatformAPI))); } auto permission_descriptor = CreatePermissionDescriptor( mojom::blink::PermissionName::WINDOW_PLACEMENT); auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state); + + // Automatically grant permission if that enterprise policy is set. + bool always_allowed = false; + if (auto* frame = window->GetFrame()) { + if (auto* page = frame->GetPage()) { + if (page->GetSettings().GetWindowPlacementAlwaysAllowed()) + always_allowed = true; + } + } + if (always_allowed) { + OnPermissionRequestComplete(resolver, + mojom::blink::PermissionStatus::GRANTED); + return resolver->Promise(); + } + auto callback = WTF::Bind(&WindowScreens::OnPermissionRequestComplete, WrapPersistent(this), WrapPersistent(resolver));
diff --git a/third_party/blink/renderer/platform/wtf/allocator/partitions.cc b/third_party/blink/renderer/platform/wtf/allocator/partitions.cc index 853319d..be56aef 100644 --- a/third_party/blink/renderer/platform/wtf/allocator/partitions.cc +++ b/third_party/blink/renderer/platform/wtf/allocator/partitions.cc
@@ -158,6 +158,14 @@ } #endif // defined(PA_ALLOW_PCSCAN) + if (!base::FeatureList::IsEnabled( + base::features::kPartitionAllocUseAlternateDistribution)) { +#if !BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) + fast_malloc_root_->SwitchToDenserBucketDistribution(); +#endif + buffer_root_->SwitchToDenserBucketDistribution(); + } + initialized_ = true; return initialized_; } @@ -195,6 +203,10 @@ base::internal::PCScan::RegisterNonScannableRoot(array_buffer_root_); } #endif // defined(PA_ALLOW_PCSCAN) + if (!base::FeatureList::IsEnabled( + base::features::kPartitionAllocUseAlternateDistribution)) { + array_buffer_root_->SwitchToDenserBucketDistribution(); + } } // static
diff --git a/third_party/blink/web_tests/FlagExpectations/skia-gl b/third_party/blink/web_tests/FlagExpectations/skia-gl deleted file mode 100644 index 300e5c6..0000000 --- a/third_party/blink/web_tests/FlagExpectations/skia-gl +++ /dev/null
@@ -1,57 +0,0 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10 ] -# tags: [ Release Debug ] -# results: [ Timeout Crash Pass Failure Slow Skip ] - -# Viewport image is the wrong size. -crbug.com/1009718 images/huge-image-viewport-scale.html [ Skip ] - -# Alpha Blending Video Failures -crbug.com/1094635 media/alpha-video-playback.html [ Skip ] - -# Need Intel and NVIDIA specific baselines. -crbug.com/1243824 compositing/masks/mask-with-added-filters.html [ Skip ] -crbug.com/1243824 compositing/masks/mask-with-removed-filters.html [ Skip ] -crbug.com/1243824 images/color-profile-background-image-repeat.html [ Skip ] -crbug.com/1243824 images/rgb-png-with-cmyk-color-profile.html [ Skip ] - -# Flakily producing a slightly different but visually identical image. -crbug.com/1245445 images/color-profile-group.html [ Failure Pass ] -crbug.com/1245445 images/color-profile-image-canvas-pattern.html [ Failure Pass ] -crbug.com/1245445 images/color-profile-image-canvas.html [ Failure Pass ] -crbug.com/1245445 media/color-profile-video-poster-image.html [ Failure Pass ] - -# Flakily timing out. -crbug.com/1245752 css3/background/background-repeat-round-padding.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/background-blend-mode-crossfade-image-gradient.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/background-blend-mode-default-value.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/background-blend-mode-gradient-image.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/background-blend-mode-image-color.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/background-blend-mode-image-image.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/background-blend-mode-image-svg.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/background-blend-mode-multiple-background-layers.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/background-blend-mode-single-layer-no-blending.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/background-blend-mode-tiled-gradient.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/effect-background-blend-mode-stacking.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/effect-background-blend-mode-tiled.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/effect-background-blend-mode.html [ Pass Timeout ] -crbug.com/1245752 css3/masking/mask-repeat-round-content.html [ Pass Timeout ] -crbug.com/1245752 css3/masking/mask-repeat-round-padding.html [ Pass Timeout ] -crbug.com/1245752 css3/masking/mask-repeat-space-border.html [ Pass Timeout ] -crbug.com/1245752 images/color-profile-background-image-space.html [ Pass Timeout ] -crbug.com/1245752 media/controls-layout-direction.html [ Pass Timeout ] - -# Affected by both of the above flakes. -crbug.com/1245445 crbug.com/1245752 images/color-profile-background-image-cover.html [ Failure Pass Timeout ] - -# Flaky, media controls not hiding. -crbug.com/1245418 media/video-controls-hide-on-move-outside-controls.html [ Failure Pass ] - -# One portion of the image is offset. -crbug.com/1002522 fast/canvas/canvas-toDataURL-webp.html [ Skip ] - -# Flaky on Linux. -crbug.com/1150545 virtual/android/fullscreen/video-scrolled-iframe.html [ Pass Timeout ] - -# These tests have large image differences, need investigation. -crbug.com/993384 css3/filters/effect-reference-colorspace.html [ Failure Pass ] -crbug.com/993384 css3/filters/effect-reference-subregion.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/FlagExpectations/skia-vulkan-native b/third_party/blink/web_tests/FlagExpectations/skia-vulkan-native deleted file mode 100644 index 3fe4bf6..0000000 --- a/third_party/blink/web_tests/FlagExpectations/skia-vulkan-native +++ /dev/null
@@ -1,74 +0,0 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10 ] -# tags: [ Release Debug ] -# results: [ Timeout Crash Pass Failure Slow Skip ] - -# Alpha Blending Video Failures -crbug.com/1094635 fast/canvas/canvas-pattern-video.html [ Skip ] -crbug.com/1094635 media/alpha-video-playback.html [ Skip ] -crbug.com/1094635 fast/canvas/canvas-composite-video-shadow.html [ Skip ] -crbug.com/1094635 fast/canvas/canvas-composite-video.html [ Skip ] - -# Viewport image is the wrong size. -crbug.com/1009718 images/huge-image-viewport-scale.html [ Skip ] - -# Need Intel and NVIDIA specific baselines. -crbug.com/1243824 compositing/masks/mask-with-added-filters.html [ Skip ] -crbug.com/1243824 compositing/masks/mask-with-removed-filters.html [ Skip ] -crbug.com/1243824 images/yuv-decode-eligible/color-profile-filter.html [ Skip ] - -# Flakily crashing. -crbug.com/1245420 compositing/geometry/vertical-scroll-composited.html [ Crash Pass ] -crbug.com/1245420 compositing/lots-of-img-layers.html [ Crash Pass ] -crbug.com/1245420 css3/blending/background-blend-mode-default-value.html [ Crash Pass ] -crbug.com/1245420 css3/blending/background-blend-mode-image-color.html [ Crash Pass ] -crbug.com/1245420 css3/blending/effect-background-blend-mode-tiled.html [ Crash Pass ] -crbug.com/1245420 css3/blending/mix-blend-mode-isolated-group-1.html [ Crash Pass ] -crbug.com/1245420 css3/masking/mask-repeat-round-border.html [ Crash Pass ] -crbug.com/1245420 images/yuv-decode-eligible/color-profile-border-radius.html [ Crash Pass ] -crbug.com/1245420 images/yuv-decode-eligible/color-profile-image-profile-match.html [ Crash Pass ] -crbug.com/1245420 images/yuv-decode-eligible/color-profile-image.html [ Crash Pass ] -crbug.com/1245420 media/video-layer-crash.html [ Crash Pass ] -crbug.com/1245420 virtual/android/fullscreen/model/fully-exit-fullscreen-single.html [ Crash Pass ] - -# Flakily producing a slightly different but visually identical image. -crbug.com/1245445 images/color-profile-image-canvas-pattern.html [ Failure Pass ] -crbug.com/1245445 images/color-profile-mask-image-svg.html [ Failure Pass ] -crbug.com/1245445 images/color-profile-object.html [ Failure Pass ] - -# Flakily timing out. -crbug.com/1245752 css3/blending/background-blend-mode-crossfade-image-gradient.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/background-blend-mode-single-layer-no-blending.html [ Pass Timeout ] -crbug.com/1245752 css3/blending/effect-background-blend-mode-stacking.html [ Pass Timeout ] -crbug.com/1245752 css3/masking/mask-repeat-space-border.html [ Pass Timeout ] -crbug.com/1245752 media/controls-layout-direction.html [ Pass Timeout ] - -# Affected by multiple of the above flakes. -crbug.com/1245420 crbug.com/1245752 css3/background/background-repeat-round-auto1.html [ Crash Pass Timeout ] -crbug.com/1245420 crbug.com/1245752 css3/background/background-repeat-round-content.html [ Crash Pass Timeout ] -crbug.com/1245420 crbug.com/1245752 css3/blending/background-blend-mode-gradient-image.html [ Crash Pass Timeout ] -crbug.com/1245420 crbug.com/1245445 crbug.com/1245752 css3/blending/background-blend-mode-image-image.html [ Crash Failure Pass Timeout ] -crbug.com/1245420 crbug.com/1245752 css3/blending/background-blend-mode-image-svg.html [ Crash Pass Timeout ] -crbug.com/1245420 crbug.com/1245752 css3/blending/background-blend-mode-multiple-background-layers.html [ Crash Pass Timeout ] -crbug.com/1245420 crbug.com/1245752 css3/blending/background-blend-mode-tiled-gradient.html [ Crash Pass Timeout ] -crbug.com/1245420 crbug.com/1245752 css3/blending/mix-blend-mode-isolated-group-2.html [ Crash Pass Timeout ] -crbug.com/1245420 crbug.com/1245445 images/color-profile-background-image-space.html [ Crash Failure Pass ] -crbug.com/1245420 crbug.com/1245445 images/color-profile-image-canvas.html [ Crash Failure Pass ] - -# Flaky, media controls not hiding. -crbug.com/1245418 media/video-controls-hide-on-move-outside-controls.html [ Failure Pass ] - -# One portion of the image is offset. -crbug.com/1002522 fast/canvas/canvas-toDataURL-webp.html [ Skip ] - -# Flaky on Linux. -crbug.com/1150545 virtual/android/fullscreen/video-scrolled-iframe.html [ Pass Timeout ] - -# These tests have large image differences, need investigation. -crbug.com/993384 css3/filters/effect-reference-colorspace.html [ Failure Pass ] -crbug.com/993384 css3/filters/effect-reference-subregion.html [ Failure Pass ] - -# Producing minor differences between NVIDIA and Intel GPUs with no good way to -# accept both outputs. -crbug.com/1278181 [ Linux ] images/color-profile-animate.html [ Failure ] -crbug.com/1278181 [ Linux ] images/color-profile-image-filter-all.html [ Failure ] -crbug.com/1278181 [ Linux ] images/color-profile-svg-fill-text.html [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index c5f175f..2ba8d3aa 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -1596,6 +1596,7 @@ virtual/layout_ng_grid_frag/external/wpt/css/css-break/grid/grid-item-fragmentation-034.html [ Pass ] virtual/layout_ng_grid_frag/external/wpt/css/css-break/grid/grid-item-fragmentation-037.html [ Pass ] virtual/layout_ng_grid_frag/external/wpt/css/css-break/grid/grid-item-fragmentation-038.html [ Pass ] +virtual/layout_ng_grid_frag/external/wpt/css/css-break/grid/grid-item-fragmentation-041.html [ Pass ] ### With LayoutNGPrinting enabled: @@ -4244,6 +4245,7 @@ crbug.com/614667 external/wpt/css/css-break/grid/grid-item-fragmentation-037.html [ Failure ] crbug.com/614667 external/wpt/css/css-break/grid/grid-item-fragmentation-038.html [ Failure ] crbug.com/614667 external/wpt/css/css-break/grid/grid-item-fragmentation-039.html [ Failure ] +crbug.com/614667 external/wpt/css/css-break/grid/grid-item-fragmentation-041.html [ Failure ] crbug.com/1058792 external/wpt/css/css-break/transform-007.html [ Failure ] crbug.com/1224888 external/wpt/css/css-break/transform-009.html [ Failure ] crbug.com/1156312 external/wpt/css/css-break/widows-orphans-017.html [ Failure ] @@ -7596,4 +7598,3 @@ crbug.com/1292889 [ Mac ] virtual/threaded/external/wpt/css/css-transforms/animation/perspective-origin-interpolation.html [ Failure Pass ] crbug.com/1197296 [ Mac10.12 ] virtual/unified-autoplay/external/wpt/feature-policy/feature-policy-frame-policy-timing.https.sub.html [ Pass Failure ] -crbug.com/1291568 http/tests/inspector-protocol/no-crash-with-stack-id-and-stale-while-revalidate.js [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/linebox/scrollable-overflow.tentative.html b/third_party/blink/web_tests/external/wpt/css/CSS2/linebox/scrollable-overflow.tentative.html deleted file mode 100644 index 8835455..0000000 --- a/third_party/blink/web_tests/external/wpt/css/CSS2/linebox/scrollable-overflow.tentative.html +++ /dev/null
@@ -1,10 +0,0 @@ -<!DOCTYPE html> -<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=996847"> -<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html"> -<meta name=assert content="This test checks that bottom half-leading of a line-box doesn't contribute to the scrollable overflow."> -<p>Test passes if there is a filled green square.</p> -<div style="overflow-y: auto; width: 100px; height: 100px;"> - <div style="line-height: 120px; height: 100px; background: green;"> - <span style="display: inline-block; width: 100px; height: 50px;"></span> - </div> -</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/grid/grid-item-fragmentation-041.html b/third_party/blink/web_tests/external/wpt/css/css-break/grid/grid-item-fragmentation-041.html new file mode 100644 index 0000000..f26c726 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-break/grid/grid-item-fragmentation-041.html
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#pagination"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="margin-left:-100px; columns:2; height:200px; width:200px; column-gap:0; column-fill:auto;"> + <div style="height:199px;"></div> + <div style="display: grid;"> + <div style="columns:2; width:100%; column-gap:0; background:red; line-height: 0;"> + <div style="display: inline-block; width: 100%; height: 20px; background: green;"></div> + <div style="height:180px; background:green;"></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-y-in-non-scrolling-div.html b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-y-in-non-scrolling-div.html index 0267838..22462a9 100644 --- a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-y-in-non-scrolling-div.html +++ b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-y-in-non-scrolling-div.html
@@ -18,6 +18,7 @@ #container { height: 185px; width: 600px; + line-height: 0; } .box {
diff --git a/third_party/blink/web_tests/fast/forms/date/date-text-height-appearance.html b/third_party/blink/web_tests/fast/forms/date/date-text-height-appearance.html new file mode 100644 index 0000000..7042f14 --- /dev/null +++ b/third_party/blink/web_tests/fast/forms/date/date-text-height-appearance.html
@@ -0,0 +1,49 @@ +<!DOCTYPE html> + +<p>These pairs of inputs should each have the same height:</p> + +<div id=s1> + <input type="text" value="hello"> + <input type="date" value="2022-01-01"> +</div> +<div id=s2> + <input type="text" value="hello"> + <input type="date" value="2022-01-01"> +</div> +<div id=s3> + <input type="text" value="hello"> + <input type="date" value="2022-01-01"> +</div> + +<style> +* { + margin:0; + padding:0; + border:0; + font-family: serif; + font-size:0; +} +p { + font-size: 12pt; +} +input { + display:inline-block; +} +div { + margin-top: 10px; + border: 1px solid black; + width: max-content; + height: min-content; + max-height: min-content; + background:red; +} +#s1 input { + font-size:6pt; +} +#s2 input { + font-size:12pt; +} +#s3 input { + font-size:18pt; +} +</style>
diff --git a/third_party/blink/web_tests/fast/harness/results.html b/third_party/blink/web_tests/fast/harness/results.html index 1742b7e..6305cd19 100644 --- a/third_party/blink/web_tests/fast/harness/results.html +++ b/third_party/blink/web_tests/fast/harness/results.html
@@ -204,6 +204,15 @@ padding-left: 10px; } +.download-button { + display: inline-block; + width: 15px; + height: 15px; + margin-bottom: -2px; + margin-right: 0px; + content: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDIxMi45NzMgMjEyLjk3MyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjEyLjk3MyAyMTIuOTczOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNMjA1LjQ3Myw3Ni4xNDZjLTQuMTQzLDAtNy41LDMuMzU4LTcuNSw3LjV2MTAzLjMySDE1VjgzLjY0NmMwLTQuMTQyLTMuMzU3LTcuNS03LjUtNy41UzAsNzkuNTAzLDAsODMuNjQ2djExMC44Mg0KCQljMCw0LjE0MiwzLjM1Nyw3LjUsNy41LDcuNWgxOTcuOTczYzQuMTQzLDAsNy41LTMuMzU4LDcuNS03LjVWODMuNjQ2QzIxMi45NzMsNzkuNTAzLDIwOS42MTUsNzYuMTQ2LDIwNS40NzMsNzYuMTQ2eiIvPg0KCTxwYXRoIGQ9Ik0xMDEuMTcxLDE1NC43NDZjMS40MDcsMS40MDcsMy4zMTQsMi4xOTcsNS4zMDQsMi4xOTdjMS45ODksMCwzLjg5Ni0wLjc5LDUuMzA0LTIuMTk3bDMyLjM3My0zMi4zNzQNCgkJYzIuOTI5LTIuOTI5LDIuOTI5LTcuNjc4LDAtMTAuNjA2Yy0yLjkzLTIuOTMtNy42NzgtMi45MjktMTAuNjA3LDBsLTE5LjU2OSwxOS41NjlsMC4wMDQtMTEyLjgyOGMwLTQuMTQyLTMuMzU3LTcuNS03LjUtNy41DQoJCWMtNC4xNDIsMC03LjUsMy4zNTgtNy41LDcuNWwtMC4wMDQsMTEyLjgyOWwtMTkuNTQ2LTE5LjU0N2MtMi45MjktMi45MjktNy42NzctMi45My0xMC42MDcsMGMtMi45MjksMi45MjktMi45MjksNy42NzcsMCwxMC42MDYNCgkJTDEwMS4xNzEsMTU0Ljc0NnoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K); +} + .stat-bar-count, .stat-bar-time { width: 12px; height: 8px; @@ -535,6 +544,10 @@ return this.dir + this.resultPrefix + resultName; } + resultFilename(resultName) { + return this.resultPrefix + resultName; + } + repaintOverlayLink() { return this.resultLink("-overlay.html?") + encodeURIComponent(this.testHref); } @@ -1846,6 +1859,9 @@ let html = "image: "; html += `<a class="toggle" href="${pathParser.resultLink("-actual.png")}" title="Actual result">actual</a>`; + html += `<a download="${pathParser.resultFilename("-expected.png")}" href="${pathParser.resultLink("-actual.png")}" title="Download new expectation file">`; + html += '<img class="download-button" alt="Download new expectation file" />'; + html += '</a>'; html += `<a class="toggle" href="${pathParser.resultLink("-expected.png")}" title="Expected result">expected</a>`; if (test.reference) { html += `<span style="margin-left: -2px; margin-right: 2px">(` +
diff --git a/third_party/blink/web_tests/fast/multicol/span/overflow-on-multicol-expected.html b/third_party/blink/web_tests/fast/multicol/span/overflow-on-multicol-expected.html index 7a49dca..274acfb 100644 --- a/third_party/blink/web_tests/fast/multicol/span/overflow-on-multicol-expected.html +++ b/third_party/blink/web_tests/fast/multicol/span/overflow-on-multicol-expected.html
@@ -9,10 +9,7 @@ <p>You should see the word 'PASS' below.</p> </div> <div id="target" style="overflow:scroll; line-height:2em; height:4em;"> - <!-- We need the below block with restricted height, like in the test. One might think it - doesn't matter, but because of crbug.com/450202 (which might not even be a bug), it - does. --> - <div style="height:2em;"> + <div> <br><br><br><br>PASS </div> </div>
diff --git a/third_party/blink/web_tests/fast/multicol/span/overflow-on-multicol.html b/third_party/blink/web_tests/fast/multicol/span/overflow-on-multicol.html index 882bf1f..adece596 100644 --- a/third_party/blink/web_tests/fast/multicol/span/overflow-on-multicol.html +++ b/third_party/blink/web_tests/fast/multicol/span/overflow-on-multicol.html
@@ -9,7 +9,7 @@ <p>You should see the word 'PASS' below.</p> </div> <div id="target" style="overflow:scroll; line-height:2em; height:4em; -webkit-columns:4;"> - <div style="-webkit-column-span:all; height:2em;"> + <div style="-webkit-column-span:all;"> <br><br><br><br>PASS </div> </div>
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index 7212104c..e1b913f 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png index 2923e65..32e3840 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/date/date-appearance-basic-expected.png index 4e37b1b..ad691c7 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png index 1682119..4abf678 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/month/month-appearance-basic-expected.png index 9337485..bee2022 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/month/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/month/month-picker-appearance-zoom150-expected.png index 14c5823..5fe7f61 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/month/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/month/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png index 3be45fa0..411ee99 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png index 821c9b2..88c0cb4 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png index d3f5448..d2a99c4 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/week/week-appearance-basic-expected.png index 0d584594..dca3d0bf 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/forms/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index 218dcbc3..b232c62 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index ee2b9253..4a43b68 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index ee2b9253..4a43b68 100644 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png new file mode 100644 index 0000000..88c0cb4 --- /dev/null +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png new file mode 100644 index 0000000..d2a99c4 --- /dev/null +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/calendar-picker/calendar-picker-appearance-expected.png index f8573f3..95e57228 100644 --- a/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/calendar-picker/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/calendar-picker/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png index 17be6af..6bd97078 100644 --- a/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/month/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/month/month-picker-appearance-step-expected.png index be9ff57..a4e1e2c 100644 --- a/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/month/month-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/month/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png index edcc7b09..287f311 100644 --- a/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/culling/scrolled-within-boxshadow-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/culling/scrolled-within-boxshadow-expected.png deleted file mode 100644 index f892df7..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/culling/scrolled-within-boxshadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/culling/translated-boxshadow-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/culling/translated-boxshadow-expected.png deleted file mode 100644 index f4ae91f..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/culling/translated-boxshadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/culling/unscrolled-within-boxshadow-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/culling/unscrolled-within-boxshadow-expected.png deleted file mode 100644 index f892df7..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/culling/unscrolled-within-boxshadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/fixed-background-after-style-recalc-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/fixed-background-after-style-recalc-expected.png deleted file mode 100644 index 3c5231f..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/fixed-background-after-style-recalc-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/geometry/clipping-foreground-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/geometry/clipping-foreground-expected.png deleted file mode 100644 index e60646fd..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/geometry/clipping-foreground-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/geometry/foreground-layer-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/geometry/foreground-layer-expected.png deleted file mode 100644 index f340247..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/geometry/foreground-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/geometry/vertical-scroll-composited-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/geometry/vertical-scroll-composited-expected.png deleted file mode 100644 index df3fee3..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/geometry/vertical-scroll-composited-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/iframes/composited-iframe-alignment-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/iframes/composited-iframe-alignment-expected.png deleted file mode 100644 index 18e6201..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/iframes/composited-iframe-alignment-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/lots-of-img-layers-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/lots-of-img-layers-expected.png deleted file mode 100644 index 2bd380d4..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/lots-of-img-layers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/masks/mask-with-added-filters-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/masks/mask-with-added-filters-expected.png deleted file mode 100644 index 883dfc2..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/masks/mask-with-added-filters-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/masks/mask-with-removed-filters-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/masks/mask-with-removed-filters-expected.png deleted file mode 100644 index 93aac55..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/masks/mask-with-removed-filters-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/overflow/border-radius-above-composited-subframe-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/overflow/border-radius-above-composited-subframe-expected.png deleted file mode 100644 index 9420be9..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/overflow/border-radius-above-composited-subframe-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/overflow/border-radius-composited-subframe-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/overflow/border-radius-composited-subframe-expected.png deleted file mode 100644 index 957a113..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/overflow/border-radius-composited-subframe-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/overflow/mask-with-filter-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/overflow/mask-with-filter-expected.png deleted file mode 100644 index 42ad9838..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/overflow/mask-with-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/transform-3d-scales-different-x-y-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/compositing/transform-3d-scales-different-x-y-expected.png deleted file mode 100644 index 6f9d05a..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/compositing/transform-3d-scales-different-x-y-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t090501-c414-flt-02-d-g-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t090501-c414-flt-02-d-g-expected.png deleted file mode 100644 index 41a51969..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t090501-c414-flt-02-d-g-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t090501-c414-flt-03-b-g-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t090501-c414-flt-03-b-g-expected.png deleted file mode 100644 index aa3a80df..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t090501-c414-flt-03-b-g-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t100304-c43-rpl-bbx-00-d-g-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t100304-c43-rpl-bbx-00-d-g-expected.png deleted file mode 100644 index 5cd9846..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t100304-c43-rpl-bbx-00-d-g-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t100304-c43-rpl-bbx-01-d-g-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t100304-c43-rpl-bbx-01-d-g-expected.png deleted file mode 100644 index dbed180..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css2.1/t100304-c43-rpl-bbx-01-d-g-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-auto1-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-auto1-expected.png deleted file mode 100644 index 2a13c6c..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-auto1-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-border-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-border-expected.png deleted file mode 100644 index 81c8165..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-border-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-content-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-content-expected.png deleted file mode 100644 index 540b55d..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-content-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-padding-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-padding-expected.png deleted file mode 100644 index 3ab12e4..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/background/background-repeat-round-padding-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png deleted file mode 100644 index 3b4b67b..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-default-value-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-default-value-expected.png deleted file mode 100644 index a3addc5..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-default-value-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-gradient-gradient-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-gradient-gradient-expected.png deleted file mode 100644 index 45fc8b1a..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-gradient-gradient-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-gradient-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-gradient-image-expected.png deleted file mode 100644 index 5d07654..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-gradient-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-image-color-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-image-color-expected.png deleted file mode 100644 index 9ab503d..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-image-color-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-image-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-image-image-expected.png deleted file mode 100644 index 228c5d60..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-image-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-image-svg-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-image-svg-expected.png deleted file mode 100644 index 3645797b..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-image-svg-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-multiple-background-layers-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-multiple-background-layers-expected.png deleted file mode 100644 index d261b79..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-multiple-background-layers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-single-layer-no-blending-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-single-layer-no-blending-expected.png deleted file mode 100644 index 53bd4dd..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-single-layer-no-blending-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-svg-color-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-svg-color-expected.png deleted file mode 100644 index 085df7a2..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-svg-color-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-tiled-gradient-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-tiled-gradient-expected.png deleted file mode 100644 index 9eb2088..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/background-blend-mode-tiled-gradient-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/effect-background-blend-mode-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/effect-background-blend-mode-expected.png deleted file mode 100644 index c660ac5..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/effect-background-blend-mode-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/effect-background-blend-mode-stacking-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/effect-background-blend-mode-stacking-expected.png deleted file mode 100644 index 762f1fa0..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/effect-background-blend-mode-stacking-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/effect-background-blend-mode-tiled-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/effect-background-blend-mode-tiled-expected.png deleted file mode 100644 index a739808..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/effect-background-blend-mode-tiled-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/mix-blend-mode-isolated-group-1-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/mix-blend-mode-isolated-group-1-expected.png deleted file mode 100644 index 2a4cf3a..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/mix-blend-mode-isolated-group-1-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/mix-blend-mode-isolated-group-2-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/mix-blend-mode-isolated-group-2-expected.png deleted file mode 100644 index 5e7dd22..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/mix-blend-mode-isolated-group-2-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/mix-blend-mode-isolated-group-3-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/mix-blend-mode-isolated-group-3-expected.png deleted file mode 100644 index 4cfeeac5..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/blending/mix-blend-mode-isolated-group-3-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/blur-filter-page-scroll-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/blur-filter-page-scroll-expected.png deleted file mode 100644 index 13199ce..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/blur-filter-page-scroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/blur-filter-page-scroll-parents-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/blur-filter-page-scroll-parents-expected.png deleted file mode 100644 index 40e36254..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/blur-filter-page-scroll-parents-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/blur-filter-page-scroll-self-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/blur-filter-page-scroll-self-expected.png deleted file mode 100644 index 435df40..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/blur-filter-page-scroll-self-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/crash-filter-change-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/crash-filter-change-expected.png deleted file mode 100644 index 342569f..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/crash-filter-change-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-blur-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-blur-expected.png deleted file mode 100644 index e8d6380..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-blur-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-brightness-clamping-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-brightness-clamping-expected.png deleted file mode 100644 index 7eaa94d..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-brightness-clamping-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-combined-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-combined-expected.png deleted file mode 100644 index 24b0124..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-combined-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-drop-shadow-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-drop-shadow-expected.png deleted file mode 100644 index e867f579..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-drop-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-reference-colorspace-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-reference-colorspace-expected.png deleted file mode 100644 index 8848e11..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-reference-colorspace-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-reference-subregion-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-reference-subregion-expected.png deleted file mode 100644 index 72f61363..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/effect-reference-subregion-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-change-repaint-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-change-repaint-expected.png deleted file mode 100644 index 358543cd..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-change-repaint-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-blur-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-blur-expected.png deleted file mode 100644 index 78899f9..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-blur-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-child-layers-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-child-layers-expected.png deleted file mode 100644 index c43a03d1..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-child-layers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-expected.png deleted file mode 100644 index 3487462..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-shadow-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-shadow-expected.png deleted file mode 100644 index c630f90..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/filter-repaint-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/regions-expanding-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/regions-expanding-expected.png deleted file mode 100644 index a5fe160..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/filters/regions-expanding-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-auto1-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-auto1-expected.png deleted file mode 100644 index 0a78c2e..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-auto1-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-border-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-border-expected.png deleted file mode 100644 index 16294b88..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-border-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-content-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-content-expected.png deleted file mode 100644 index 7313af2a..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-content-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-padding-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-padding-expected.png deleted file mode 100644 index a36baae..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-round-padding-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-space-border-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-space-border-expected.png deleted file mode 100644 index 3ad19647..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/css3/masking/mask-repeat-space-border-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/fast/canvas/pixelated-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/fast/canvas/pixelated-expected.png deleted file mode 100644 index 336aff93..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/fast/canvas/pixelated-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-animate-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-animate-expected.png deleted file mode 100644 index a0005890..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-animate-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-animate-rotate-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-animate-rotate-expected.png deleted file mode 100644 index f5f0fd2e..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-animate-rotate-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-cover-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-cover-expected.png deleted file mode 100644 index d0e95e9..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-cover-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-cross-fade-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-cross-fade-expected.png deleted file mode 100644 index 1708a70..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-cross-fade-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-cross-fade-png-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-cross-fade-png-expected.png deleted file mode 100644 index 1708a70..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-cross-fade-png-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-repeat-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-repeat-expected.png deleted file mode 100644 index 44db734..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-repeat-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-space-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-space-expected.png deleted file mode 100644 index 35bcf31e..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-background-image-space-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-border-fade-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-border-fade-expected.png deleted file mode 100644 index 2a828885..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-border-fade-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-border-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-border-image-expected.png deleted file mode 100644 index ddf6c04..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-border-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-group-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-group-expected.png deleted file mode 100644 index 47123e2..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-group-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-canvas-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-canvas-expected.png deleted file mode 100644 index b49e59f..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-canvas-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-canvas-pattern-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-canvas-pattern-expected.png deleted file mode 100644 index 9d72050..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-canvas-pattern-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-filter-all-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-filter-all-expected.png deleted file mode 100644 index bca87bc..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-filter-all-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-svg-resource-url-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-svg-resource-url-expected.png deleted file mode 100644 index bf5482c..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-image-svg-resource-url-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-mask-image-svg-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-mask-image-svg-expected.png deleted file mode 100644 index 8b69fc1b..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-mask-image-svg-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-object-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-object-expected.png deleted file mode 100644 index c3e811c..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-object-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-svg-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-svg-expected.png deleted file mode 100644 index 8811964..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-svg-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-svg-fill-text-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-svg-fill-text-expected.png deleted file mode 100644 index feaee0d..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/color-profile-svg-fill-text-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/optimize-contrast-canvas-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/optimize-contrast-canvas-expected.png deleted file mode 100644 index 4b949f6..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/optimize-contrast-canvas-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/optimize-contrast-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/optimize-contrast-image-expected.png deleted file mode 100644 index 4b949f6..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/optimize-contrast-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/rgb-png-with-cmyk-color-profile-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/rgb-png-with-cmyk-color-profile-expected.png deleted file mode 100644 index 198816d..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/rgb-png-with-cmyk-color-profile-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/ycbcr-with-cmyk-color-profile-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/ycbcr-with-cmyk-color-profile-expected.png deleted file mode 100644 index 5d56b945..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/ycbcr-with-cmyk-color-profile-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-border-radius-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-border-radius-expected.png deleted file mode 100644 index 6045346..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-border-radius-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-filter-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-filter-expected.png deleted file mode 100644 index 7d69255..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-image-expected.png deleted file mode 100644 index 9ae0ecc..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png deleted file mode 100644 index 3958a23e..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-layer-filter-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-layer-filter-expected.png deleted file mode 100644 index 9770ca8..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/color-profile-layer-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/webp-color-profile-lossy-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/webp-color-profile-lossy-expected.png deleted file mode 100644 index bf09329..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/images/yuv-decode-eligible/webp-color-profile-lossy-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/media/color-profile-video-poster-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/media/color-profile-video-poster-image-expected.png deleted file mode 100644 index 4545b78..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/media/color-profile-video-poster-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/media/controls-layout-direction-expected.png deleted file mode 100644 index 5c384840..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/media/controls-layout-direction-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png deleted file mode 100644 index 003529a..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/media/controls/paint-controls-webkit-appearance-none-expected.png deleted file mode 100644 index 23e8c9f..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/media/controls/paint-controls-webkit-appearance-none-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/media/video-no-audio-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/media/video-no-audio-expected.png deleted file mode 100644 index ae97b49..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/media/video-no-audio-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/media/video-poster-scale-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/media/video-poster-scale-expected.png deleted file mode 100644 index fec67ce..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/media/video-poster-scale-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png deleted file mode 100644 index 6450ac7..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/transforms/shadows-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/transforms/shadows-expected.png deleted file mode 100644 index d8fca81..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/transforms/shadows-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/transforms/svg-vs-css-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/transforms/svg-vs-css-expected.png deleted file mode 100644 index 1e81382..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/transforms/svg-vs-css-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-gl/transforms/transformed-document-element-expected.png b/third_party/blink/web_tests/flag-specific/skia-gl/transforms/transformed-document-element-expected.png deleted file mode 100644 index ccc4feb..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-gl/transforms/transformed-document-element-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/culling/scrolled-within-boxshadow-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/culling/scrolled-within-boxshadow-expected.png deleted file mode 100644 index f892df7..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/culling/scrolled-within-boxshadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/culling/translated-boxshadow-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/culling/translated-boxshadow-expected.png deleted file mode 100644 index f4ae91f..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/culling/translated-boxshadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/culling/unscrolled-within-boxshadow-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/culling/unscrolled-within-boxshadow-expected.png deleted file mode 100644 index f892df7..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/culling/unscrolled-within-boxshadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/fixed-background-after-style-recalc-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/fixed-background-after-style-recalc-expected.png deleted file mode 100644 index 3c5231f..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/fixed-background-after-style-recalc-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/geometry/clipping-foreground-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/geometry/clipping-foreground-expected.png deleted file mode 100644 index e60646fd..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/geometry/clipping-foreground-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/geometry/foreground-layer-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/geometry/foreground-layer-expected.png deleted file mode 100644 index f340247..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/geometry/foreground-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/geometry/vertical-scroll-composited-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/geometry/vertical-scroll-composited-expected.png deleted file mode 100644 index df3fee3..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/geometry/vertical-scroll-composited-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/iframes/composited-iframe-alignment-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/iframes/composited-iframe-alignment-expected.png deleted file mode 100644 index 18e6201..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/iframes/composited-iframe-alignment-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/lots-of-img-layers-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/lots-of-img-layers-expected.png deleted file mode 100644 index 2bd380d4..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/lots-of-img-layers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/masks/mask-with-added-filters-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/masks/mask-with-added-filters-expected.png deleted file mode 100644 index 883dfc2..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/masks/mask-with-added-filters-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/masks/mask-with-removed-filters-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/masks/mask-with-removed-filters-expected.png deleted file mode 100644 index 93aac55..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/masks/mask-with-removed-filters-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/overflow/border-radius-above-composited-subframe-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/overflow/border-radius-above-composited-subframe-expected.png deleted file mode 100644 index 9420be9..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/overflow/border-radius-above-composited-subframe-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/overflow/border-radius-composited-subframe-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/overflow/border-radius-composited-subframe-expected.png deleted file mode 100644 index 957a113..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/overflow/border-radius-composited-subframe-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/overflow/mask-with-filter-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/overflow/mask-with-filter-expected.png deleted file mode 100644 index 42ad9838..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/overflow/mask-with-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/transform-3d-scales-different-x-y-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/transform-3d-scales-different-x-y-expected.png deleted file mode 100644 index 6f9d05a..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/compositing/transform-3d-scales-different-x-y-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t090501-c414-flt-02-d-g-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t090501-c414-flt-02-d-g-expected.png deleted file mode 100644 index 41a51969..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t090501-c414-flt-02-d-g-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t090501-c414-flt-03-b-g-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t090501-c414-flt-03-b-g-expected.png deleted file mode 100644 index aa3a80df..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t090501-c414-flt-03-b-g-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t100304-c43-rpl-bbx-00-d-g-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t100304-c43-rpl-bbx-00-d-g-expected.png deleted file mode 100644 index 5cd9846..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t100304-c43-rpl-bbx-00-d-g-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t100304-c43-rpl-bbx-01-d-g-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t100304-c43-rpl-bbx-01-d-g-expected.png deleted file mode 100644 index dbed180..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css2.1/t100304-c43-rpl-bbx-01-d-g-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-auto1-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-auto1-expected.png deleted file mode 100644 index 2a13c6c..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-auto1-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-border-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-border-expected.png deleted file mode 100644 index 81c8165..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-border-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-content-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-content-expected.png deleted file mode 100644 index 540b55d..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-content-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-padding-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-padding-expected.png deleted file mode 100644 index 3ab12e4..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/background/background-repeat-round-padding-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png deleted file mode 100644 index 3b4b67b..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-default-value-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-default-value-expected.png deleted file mode 100644 index a3addc5..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-default-value-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-gradient-gradient-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-gradient-gradient-expected.png deleted file mode 100644 index 45fc8b1a..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-gradient-gradient-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-gradient-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-gradient-image-expected.png deleted file mode 100644 index c2634a3..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-gradient-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-image-color-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-image-color-expected.png deleted file mode 100644 index 9ab503d..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-image-color-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-image-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-image-image-expected.png deleted file mode 100644 index f0fddb9..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-image-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-image-svg-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-image-svg-expected.png deleted file mode 100644 index a9b7fbf..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-image-svg-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-multiple-background-layers-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-multiple-background-layers-expected.png deleted file mode 100644 index d261b79..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-multiple-background-layers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-single-layer-no-blending-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-single-layer-no-blending-expected.png deleted file mode 100644 index 53bd4dd..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-single-layer-no-blending-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-svg-color-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-svg-color-expected.png deleted file mode 100644 index 085df7a2..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-svg-color-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-tiled-gradient-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-tiled-gradient-expected.png deleted file mode 100644 index 9eb2088..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/background-blend-mode-tiled-gradient-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/effect-background-blend-mode-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/effect-background-blend-mode-expected.png deleted file mode 100644 index c660ac5..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/effect-background-blend-mode-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/effect-background-blend-mode-stacking-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/effect-background-blend-mode-stacking-expected.png deleted file mode 100644 index 762f1fa0..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/effect-background-blend-mode-stacking-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/effect-background-blend-mode-tiled-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/effect-background-blend-mode-tiled-expected.png deleted file mode 100644 index a739808..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/effect-background-blend-mode-tiled-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/mix-blend-mode-isolated-group-1-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/mix-blend-mode-isolated-group-1-expected.png deleted file mode 100644 index 2a4cf3a..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/mix-blend-mode-isolated-group-1-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/mix-blend-mode-isolated-group-2-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/mix-blend-mode-isolated-group-2-expected.png deleted file mode 100644 index 5e7dd22..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/mix-blend-mode-isolated-group-2-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/mix-blend-mode-isolated-group-3-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/mix-blend-mode-isolated-group-3-expected.png deleted file mode 100644 index 4cfeeac5..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/blending/mix-blend-mode-isolated-group-3-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/blur-filter-page-scroll-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/blur-filter-page-scroll-expected.png deleted file mode 100644 index 13199ce..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/blur-filter-page-scroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/blur-filter-page-scroll-parents-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/blur-filter-page-scroll-parents-expected.png deleted file mode 100644 index 40e36254..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/blur-filter-page-scroll-parents-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/blur-filter-page-scroll-self-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/blur-filter-page-scroll-self-expected.png deleted file mode 100644 index 435df40..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/blur-filter-page-scroll-self-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/crash-filter-change-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/crash-filter-change-expected.png deleted file mode 100644 index 342569f..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/crash-filter-change-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-blur-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-blur-expected.png deleted file mode 100644 index e8d6380..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-blur-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-brightness-clamping-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-brightness-clamping-expected.png deleted file mode 100644 index 7eaa94d..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-brightness-clamping-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-combined-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-combined-expected.png deleted file mode 100644 index 24b0124..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-combined-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-drop-shadow-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-drop-shadow-expected.png deleted file mode 100644 index e867f579..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-drop-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-reference-colorspace-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-reference-colorspace-expected.png deleted file mode 100644 index 8848e11..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-reference-colorspace-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-reference-subregion-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-reference-subregion-expected.png deleted file mode 100644 index 72f61363..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/effect-reference-subregion-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-change-repaint-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-change-repaint-expected.png deleted file mode 100644 index 358543cd..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-change-repaint-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-blur-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-blur-expected.png deleted file mode 100644 index 78899f9..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-blur-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-child-layers-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-child-layers-expected.png deleted file mode 100644 index c43a03d1..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-child-layers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-expected.png deleted file mode 100644 index 3487462..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-shadow-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-shadow-expected.png deleted file mode 100644 index c630f90..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/filter-repaint-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/regions-expanding-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/regions-expanding-expected.png deleted file mode 100644 index a5fe160..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/filters/regions-expanding-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-auto1-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-auto1-expected.png deleted file mode 100644 index 0a78c2e..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-auto1-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-border-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-border-expected.png deleted file mode 100644 index 16294b88..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-border-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-content-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-content-expected.png deleted file mode 100644 index 7313af2a..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-content-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-padding-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-padding-expected.png deleted file mode 100644 index a36baae..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-round-padding-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-space-border-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-space-border-expected.png deleted file mode 100644 index 3ad19647..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/css3/masking/mask-repeat-space-border-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/fast/canvas/pixelated-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/fast/canvas/pixelated-expected.png deleted file mode 100644 index 336aff93..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/fast/canvas/pixelated-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-animate-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-animate-expected.png deleted file mode 100644 index f89ed93..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-animate-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-animate-rotate-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-animate-rotate-expected.png deleted file mode 100644 index 8736e02..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-animate-rotate-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-cover-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-cover-expected.png deleted file mode 100644 index f31f678..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-cover-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-cross-fade-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-cross-fade-expected.png deleted file mode 100644 index 1708a70..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-cross-fade-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-cross-fade-png-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-cross-fade-png-expected.png deleted file mode 100644 index 1708a70..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-cross-fade-png-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-repeat-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-repeat-expected.png deleted file mode 100644 index 29fa56d..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-repeat-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-space-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-space-expected.png deleted file mode 100644 index 2549378..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-background-image-space-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-border-fade-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-border-fade-expected.png deleted file mode 100644 index ebfcbf0..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-border-fade-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-border-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-border-image-expected.png deleted file mode 100644 index ddf6c04..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-border-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-group-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-group-expected.png deleted file mode 100644 index 8561c37..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-group-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-canvas-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-canvas-expected.png deleted file mode 100644 index b49e59f..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-canvas-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-canvas-pattern-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-canvas-pattern-expected.png deleted file mode 100644 index 9d72050..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-canvas-pattern-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-filter-all-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-filter-all-expected.png deleted file mode 100644 index 9989ff0..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-filter-all-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-svg-resource-url-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-svg-resource-url-expected.png deleted file mode 100644 index bf5482c..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-image-svg-resource-url-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-mask-image-svg-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-mask-image-svg-expected.png deleted file mode 100644 index ed88c12..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-mask-image-svg-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-object-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-object-expected.png deleted file mode 100644 index 0ce0793..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-object-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-svg-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-svg-expected.png deleted file mode 100644 index 8811964..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-svg-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-svg-fill-text-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-svg-fill-text-expected.png deleted file mode 100644 index ee8d50e..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/color-profile-svg-fill-text-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/optimize-contrast-canvas-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/optimize-contrast-canvas-expected.png deleted file mode 100644 index 4b949f6..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/optimize-contrast-canvas-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/optimize-contrast-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/optimize-contrast-image-expected.png deleted file mode 100644 index 4b949f6..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/optimize-contrast-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/rgb-png-with-cmyk-color-profile-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/rgb-png-with-cmyk-color-profile-expected.png deleted file mode 100644 index ed95cd22..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/rgb-png-with-cmyk-color-profile-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/ycbcr-with-cmyk-color-profile-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/ycbcr-with-cmyk-color-profile-expected.png deleted file mode 100644 index f978852..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/ycbcr-with-cmyk-color-profile-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-border-radius-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-border-radius-expected.png deleted file mode 100644 index 6045346..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-border-radius-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-filter-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-filter-expected.png deleted file mode 100644 index 7d69255..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-image-expected.png deleted file mode 100644 index 9ae0ecc..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png deleted file mode 100644 index a770804..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-layer-filter-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-layer-filter-expected.png deleted file mode 100644 index 9770ca8..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/color-profile-layer-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/webp-color-profile-lossy-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/webp-color-profile-lossy-expected.png deleted file mode 100644 index bf09329..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/images/yuv-decode-eligible/webp-color-profile-lossy-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/color-profile-video-poster-image-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/color-profile-video-poster-image-expected.png deleted file mode 100644 index 149fc763..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/color-profile-video-poster-image-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/controls-layout-direction-expected.png deleted file mode 100644 index eb1ddc9d..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/controls-layout-direction-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png deleted file mode 100644 index 003529a..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/controls/paint-controls-webkit-appearance-none-expected.png deleted file mode 100644 index 23e8c9f..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/controls/paint-controls-webkit-appearance-none-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/video-no-audio-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/video-no-audio-expected.png deleted file mode 100644 index ae97b49..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/video-no-audio-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/video-poster-scale-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/video-poster-scale-expected.png deleted file mode 100644 index fec67ce..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/media/video-poster-scale-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png deleted file mode 100644 index 6450ac7..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/shadows-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/shadows-expected.png deleted file mode 100644 index 6978957..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/shadows-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/svg-vs-css-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/svg-vs-css-expected.png deleted file mode 100644 index 1e81382..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/svg-vs-css-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/transformed-document-element-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/transformed-document-element-expected.png deleted file mode 100644 index ccc4feb..0000000 --- a/third_party/blink/web_tests/flag-specific/skia-vulkan-native/transforms/transformed-document-element-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/no-crash-with-stack-id-and-stale-while-revalidate-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/no-crash-with-stack-id-and-stale-while-revalidate-expected.txt index 3780745..7fbdb65 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/no-crash-with-stack-id-and-stale-while-revalidate-expected.txt +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/no-crash-with-stack-id-and-stale-while-revalidate-expected.txt
@@ -1,4 +1,2 @@ Tests that checks for no crashes when stale-while-revalidate is on -Request Will be Sent for stale-script.php -Request Will be Sent for stale-script.php
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/no-crash-with-stack-id-and-stale-while-revalidate.js b/third_party/blink/web_tests/http/tests/inspector-protocol/no-crash-with-stack-id-and-stale-while-revalidate.js index c031c78..15a3be8 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/no-crash-with-stack-id-and-stale-while-revalidate.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/no-crash-with-stack-id-and-stale-while-revalidate.js
@@ -9,15 +9,8 @@ dp.Network.enable(); dp.Network.setAttachDebugStack({enabled: true}); await dp.Page.reload({ignoreCache: false}); - dp.Network.onRequestWillBeSent(request => { - const url = request.params.request.url; - if (/stale-script\.php$/.test(url)) { - testRunner.log('Request Will be Sent for ' + url.substr(url.lastIndexOf('stale-script.php'))); - } - }); let numResponses = 0; - dp.Network.onResponseReceived(request => { const url = request.params.response.url; if (/stale-script\.php$/.test(url)) {
diff --git a/third_party/blink/web_tests/http/tests/security/contentSecurityPolicy/image-document-default-src-none-expected.txt b/third_party/blink/web_tests/http/tests/security/contentSecurityPolicy/image-document-default-src-none-expected.txt index 1500b310..0ff6306 100644 --- a/third_party/blink/web_tests/http/tests/security/contentSecurityPolicy/image-document-default-src-none-expected.txt +++ b/third_party/blink/web_tests/http/tests/security/contentSecurityPolicy/image-document-default-src-none-expected.txt
@@ -1,9 +1,9 @@ CONSOLE ERROR: Refused to apply inline style because it violates the following Content Security Policy directive: "default-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-irYXJOS8dfWxS3v4lGnL1OcyQjamq/FGUi7NhXhtBOk='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present. Note also that 'style-src' was not explicitly set, so 'default-src' is used as a fallback. -CONSOLE ERROR: Refused to apply inline style because it violates the following Content Security Policy directive: "default-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-VPZ2mdsWWlqXOFgt1tAllbbJhG8t9bh6emP1o9GwJxY='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present. Note also that 'style-src' was not explicitly set, so 'default-src' is used as a fallback. +CONSOLE ERROR: Refused to apply inline style because it violates the following Content Security Policy directive: "default-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-mqLU0Zw7B/c6fYkvbRoA2V1jZ1apgellJyv17d18uTs='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present. Note also that 'style-src' was not explicitly set, so 'default-src' is used as a fallback. -CONSOLE ERROR: Refused to apply inline style because it violates the following Content Security Policy directive: "default-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-VPZ2mdsWWlqXOFgt1tAllbbJhG8t9bh6emP1o9GwJxY='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present. Note also that 'style-src' was not explicitly set, so 'default-src' is used as a fallback. +CONSOLE ERROR: Refused to apply inline style because it violates the following Content Security Policy directive: "default-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-mqLU0Zw7B/c6fYkvbRoA2V1jZ1apgellJyv17d18uTs='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present. Note also that 'style-src' was not explicitly set, so 'default-src' is used as a fallback. -CONSOLE ERROR: Refused to apply inline style because it violates the following Content Security Policy directive: "default-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-VPZ2mdsWWlqXOFgt1tAllbbJhG8t9bh6emP1o9GwJxY='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present. Note also that 'style-src' was not explicitly set, so 'default-src' is used as a fallback. +CONSOLE ERROR: Refused to apply inline style because it violates the following Content Security Policy directive: "default-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-mqLU0Zw7B/c6fYkvbRoA2V1jZ1apgellJyv17d18uTs='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present. Note also that 'style-src' was not explicitly set, so 'default-src' is used as a fallback. Ensure that we don't crash when loading an ImageDocument that sets CSP headers
diff --git a/third_party/blink/web_tests/images/huge-image-viewport-scale-expected.txt b/third_party/blink/web_tests/images/huge-image-viewport-scale-expected.txt index a394685..67b7536 100644 --- a/third_party/blink/web_tests/images/huge-image-viewport-scale-expected.txt +++ b/third_party/blink/web_tests/images/huge-image-viewport-scale-expected.txt
@@ -4,5 +4,5 @@ viewport meta: <meta name="viewport" content="width=device-width, minimum-scale=0.1"> -image style: -webkit-user-select: none;margin: auto;cursor: zoom-in;background-color: hsl(0, 0%, 90%);transition: background-color 300ms; +image style: display: block;-webkit-user-select: none;margin: auto;cursor: zoom-in;background-color: hsl(0, 0%, 90%);transition: background-color 300ms; image actual width: 100
diff --git a/third_party/blink/web_tests/platform/linux/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/linux/dark-mode/colors/web-theme-expected.png index c815c74e..0b306bc 100644 --- a/third_party/blink/web_tests/platform/linux/dark-mode/colors/web-theme-expected.png +++ b/third_party/blink/web_tests/platform/linux/dark-mode/colors/web-theme-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png index a6e40bc..7bd20a1 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png index f24d71ca..578182b 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-expected.png index f24d71ca..578182b 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png index b59938c..8dac75f 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png index 9b1a926..aa88162 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png index 22544d46..33e117121 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png index f01e557c5..889d20e5 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png index b8a5d0e..0c008f0 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index 3e84cc1a..54ed990 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png index 4876819..5c58bdc 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png index f24d71ca..578182b 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png index 2ea5278..ce34721d 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png index a6e40bc..7bd20a1 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-step-expected.png index 01af686d..393ab40 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png index de471b91..ff9d0ca 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-appearance-expected.png index b527819..db5e26e 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png index 8c24098..34ddc3b 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-expected.png index 77a3992..b445031 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-step-expected.png index 78f307ae..fbe7bbf 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-expected.png index ae914fd..cb76a157 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-step-expected.png index 30e564ad..6e8fc37 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/week-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index f24d71ca..578182b 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index 45633d5cc..0f752ccf 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index 49e2ecca..1a4c6de4 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/date/date-appearance-basic-expected.png index 7e5c1d4..8802c83 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index d3bc585..c273a1c3 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png index ba6b4d4..b24fa3a 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 5a6ae80..24bb8e0 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index 83edb14..bb9ca6b 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 8e01d4dc..7fbe1dc 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month/month-appearance-basic-expected.png index 3d16ac3..341c4d39 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png index b66bb9d..3aa0c113 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png index 44d8b2a..328fc1e 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png index 74dec6c..f5f21bab 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png index 9fbbc66..3e2923a 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index af835e7..3fad39a 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index 04e4cc0..3ce771a 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week/week-appearance-basic-expected.png index 66f3ef61..9786d43 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-basic-expected.png index 59409ba0..29681f8 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-l10n-expected.png index f2df5a39..9b834433 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-pseudo-elements-expected.png index 184aa08..ed09a89 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-pseudo-elements-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/date/date-text-height-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-text-height-appearance-expected.png new file mode 100644 index 0000000..efe37d1 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/fast/forms/date/date-text-height-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png index 2289e90..ccf4eec3 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index eb108ce..abdda3c7 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png index e84d10d..13dc832 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-basic-expected.png index 71e595e..b3afe7f 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png index 8fffff82..0ccad93 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-pseudo-elements-expected.png index 218e126d..23dc6256 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-pseudo-elements-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-disabled-today-expected.png index 2f6edd0..b1f1dc6 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-disabled-today-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-disabled-today-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-rtl-expected.png index 5a56a3d..72b65c0 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-step-expected.png index 0bda3215..155c3db9 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png index 79d7bc49..c71bc6d 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-zoom150-expected.png index 1ec0830..a91aeb3 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/month/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png index 3059687c..31a268c 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png index 010c86f9..5da1fce 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png index 6d0bf10..6f08c52 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png index 0cd7c02..d5c7a68 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png index 1f402ff..8dd2001 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png index 3ccf384b..60dd8cae7 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png index ed89690..5067c57c 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png index d09fa5a..671d4571 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png index 1ba49a1..aeeb87d9 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png index 81702759..7fbe697f 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png index ca89c85..098a9b2d 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png index 31dec7a7..a51f4dd 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png index 1ca0119..8c0be07 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-basic-expected.png index 3f0a4ee..adf754a 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-pseudo-elements-expected.png index b7b84199..4849b975 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-pseudo-elements-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/week/week-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index 782c8252..a2aecce 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index 2afee44..1359c52 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index 2be8342..2476bdf 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png index c3770e8..5e27703 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index aaf7bc96..1c67892 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png index f97847b..7bcf999 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 679fa66..08262c8 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index f6d823d..bdf0cfdd 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 28aca2e6..29ee873 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png index 0f7f0ea..bbb9d79 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png index 82ba251..1baf6ad0c 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png index ea5b105..da017fe 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png index 6f20f71..22d7702 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png index 09c9113..640a068 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index 3cbdbdec..00342f5 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index 2245ab0..531c173a 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png index 01206acd..2ca1e741 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-focus-ring-expected.png index 21603e0d..41ced69d 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png index 1cf104a..b03cf16 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-open-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-open-expected.png index c201490..805b57b 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-open-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-open-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png index 6fab181..5abf433 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png index dfb6320f..11397d2 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index 79e0cdf..4b6ce05 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index a6b76af4..303e9cfd 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index 3049d29..7bc9640b 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png index 8fa9b68..fc5498f8 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 20c2f70..88e6c9e 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png index 2802b10d..460e41e5 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 28884fd3..080bfd3 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index 3663643a..0c5f626 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 33e096c..0a3b7033e 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png index ab5013a..fc487b2 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index 6009c4d..9a6bd4a4 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index afaa478..efce4490 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png index 5b127029..243fe79 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png index 6e6b90e..7da1797 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png index 6e6b90e..7da1797 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png index f8573f3..95e57228 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index 7b8dd60..c31aa251 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png index 9a23caa1..0d8f917 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index ee2b9253..4a43b68 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png index 9a23caa1..0d8f917 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index ee2b9253..4a43b68 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png new file mode 100644 index 0000000..31a268c --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png new file mode 100644 index 0000000..5da1fce --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png new file mode 100644 index 0000000..6f08c52 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png new file mode 100644 index 0000000..8dd2001 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png new file mode 100644 index 0000000..60dd8cae7 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png new file mode 100644 index 0000000..5067c57c --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png new file mode 100644 index 0000000..671d4571 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png new file mode 100644 index 0000000..aeeb87d9 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png new file mode 100644 index 0000000..7fbe697f --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png new file mode 100644 index 0000000..098a9b2d --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png new file mode 100644 index 0000000..a51f4dd --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png new file mode 100644 index 0000000..8c0be07 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/scroll-unification/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png deleted file mode 100644 index a6d768f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png index 9b56399..b66de54 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png new file mode 100644 index 0000000..3a5beb75 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/date/date-text-height-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/date/date-text-height-appearance-expected.png new file mode 100644 index 0000000..dad32dba --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/date/date-text-height-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/month/month-appearance-basic-expected.png new file mode 100644 index 0000000..7b190b9 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/month/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/month/month-picker-appearance-step-expected.png new file mode 100644 index 0000000..e92bbaf --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/month/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/month/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/month/month-picker-appearance-zoom150-expected.png index 3f8a4bafb..d522c03 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/month/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/month/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/date-picker-month-appearance-expected.png index 80f4029..ef56db6 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/date-picker-month-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/date-picker-month-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png index 81fefe9..1dbfdcf 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png new file mode 100644 index 0000000..0a2fc8c2 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png new file mode 100644 index 0000000..678b979 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index 047777a..584f28f 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-l10n-expected.png index 6363b747..aed67c5 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-picker-appearance-step-expected.png new file mode 100644 index 0000000..8d940d2 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png new file mode 100644 index 0000000..ebb46c5 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png new file mode 100644 index 0000000..1c16251d --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/date/date-appearance-l10n-expected.png index 832eca8..abfa1f40 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/date/date-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/date/date-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png new file mode 100644 index 0000000..47c66612 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index 536ede29..84876274 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/month/month-appearance-l10n-expected.png index 8f7ee6d9..456ef20 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/month/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/month/month-picker-appearance-step-expected.png new file mode 100644 index 0000000..e92bbaf --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/month/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png new file mode 100644 index 0000000..0bcd796 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png new file mode 100644 index 0000000..ce6bd97 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png index ed7ce9b..6b9a2b9 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/month/month-appearance-l10n-expected.png index 18f2dc4..e288ec7 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/month/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/month/month-picker-appearance-step-expected.png new file mode 100644 index 0000000..8d940d2 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/month/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png new file mode 100644 index 0000000..4d4bfcbc --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/scroll-unification/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png new file mode 100644 index 0000000..5de2afc --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/forms/month/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/forms/month/month-picker-appearance-zoom150-expected.png deleted file mode 100644 index 4fc9ca7..0000000 --- a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/forms/month/month-picker-appearance-zoom150-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/mac/dark-mode/colors/web-theme-expected.png index a8e6cf6..23bbf00 100644 --- a/third_party/blink/web_tests/platform/mac/dark-mode/colors/web-theme-expected.png +++ b/third_party/blink/web_tests/platform/mac/dark-mode/colors/web-theme-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt similarity index 81% copy from third_party/blink/web_tests/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt copy to third_party/blink/web_tests/platform/mac/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt index f8f1c989..714a65a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt +++ b/third_party/blink/web_tests/platform/mac/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt
@@ -1,4 +1,4 @@ This is a testharness.js-based test. -FAIL scroll-margin on input widget assert_between_exclusive: Should honor date input scroll-margin expected a number greater than 4750 and less than 4850 but got 4720 +FAIL scroll-margin on input widget assert_between_exclusive: Should honor date input scroll-margin expected a number greater than 4750 and less than 4850 but got 4718.65625 Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png index e7aaa99..4a42584 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png index fc16c2dc..7ddafcf 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-expected.png index fc16c2dc..7ddafcf 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png index 84c3b88..4b9c454 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png index 8a23de32..8a64b0f 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png index 913e970..b11c2a9 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png index aa4e3e2..e0ceb13 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png index f48a51b2..2ee3211 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index df41e58..eb2d63e 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png index d80742b..bf4aa49 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png index fc16c2dc..7ddafcf 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png index 0df9fd24..a419cdf 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png index e7aaa99..4a42584 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-step-expected.png index ecbc986..c10d30c1 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png index 4a4cea7..e327d83 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-month-appearance-expected.png index d70acec7..89916634 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-month-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-month-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png index 2ff0013f..41cb8a66 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-expected.png index 8b08e354..f418b71 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-step-expected.png index cf866cd..31a1f20 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-expected.png index cc3b881..b65ced553 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-step-expected.png index 5f98cb2..b1636ce 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index fc16c2dc..7ddafcf 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index db1236bd..5220ee7e 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index 273c3df..232dcbbc4 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/date/date-appearance-basic-expected.png index fae63175..7e96037 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 035115e..9c35547 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png index 14470b0..8c85818e 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index b8b22e9..ec899024 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index aa3c8c6e..52ba9e9 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index cdde3703..ad76227 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month/month-appearance-basic-expected.png index 7b1f2f4..157c408 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png index fde74cb1..e15dcc0e 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png index a31ec37a..afa56a57 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png index 1d968d6e..a0c424d 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png index 11f07cb..ab62ee8 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index 2e60dea..0a2fc8c2 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index 8e718aa..171a220 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week/week-appearance-basic-expected.png index 501e900..6a0b8b9 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-basic-expected.png index 2dbf52d..4f4e092 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png index cb58e8b..a2f15ea 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png index 301e9ea..37f9ad7 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-text-height-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-text-height-appearance-expected.png new file mode 100644 index 0000000..f59c00e1 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-text-height-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png index 42d0a7e..678b979 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index 0594ff51..b174ddc 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png index d369ce88..36d2cf31 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-basic-expected.png index 7ea28f68..496aa831 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png index 1c33e7d..30aa04e 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png index b871f0e..2338f64 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-disabled-today-expected.png index 85deb2a..623452f 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-disabled-today-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-disabled-today-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-rtl-expected.png index ccb3667..379c82c6 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-step-expected.png index f9f0508..e92bbaf 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png index c0bac6c..1de545e 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-zoom150-expected.png index 3bbee40..8bb9456 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png index 2aa87fc..e9c3acc 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png index 911f3d74..a0aa077 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png index 5a3a0b8..6427aa8 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png index 7b9eb149..375e7e1 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png index 6722ef9..343192ad 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png index e359853c..ce6bd97 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png index 5985027a6..ebb46c5 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png index 87877a3..a1989ea 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png index 0356410..e8213804 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png index 4315cc1..1cdc28a 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png index a87d48661..c30c8bfc 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png index 67864ba..e97fe43 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png index fe308f7..b10879c 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/week/week-appearance-basic-expected.png index cc27574..af692fd 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/week/week-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/week/week-appearance-pseudo-elements-expected.png index 0bca035..995c592 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/week/week-appearance-pseudo-elements-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/week/week-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index 76912b4..2552bd4 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index 50d15bd..cfb480d3 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index 5b8236182..ddf1dcc 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png index ba0f38b..db52e60 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 79699e68..bc68d827 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png index 8e7e61d..91e94ef 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 0ee8d1c..4ed1ccea 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index b51a996..3e9b686 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 858a143..b4964ed9 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png index 0959094f..1fa6f82 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png index 10408733..93e1d6a 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png index 1b768dd..5300606 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png index 7292c7e8..141e63e 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png index bf4fd61..e57c91e 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index bc169ca..f98d299 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index 6338915..e338279 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png index 38b914e..ebe88e62 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-focus-ring-expected.png index 07571313..0d2c575 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png index 98eb003..bb0cfe9 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-open-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-open-expected.png index 031676b0..84632a5 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-open-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-open-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png index 6772933..0c920bd9 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png index 701c9d6..ec0a6418 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index 4e8daa7..50b063e8 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index 6784d41..981b720 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index eca3c935..1405a2a 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png index d698ff0..85c6afb 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index a9dc7ed..dbc277f 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png index 9f710e7..d8a7656 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index dd2b013..c5694b5 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index 1771e9b..e2e1a46 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 25c4d9a6..c492c32 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png index df9dc27..a08f2ba3 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index b823190..9852a0c2 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index e516f14..71049de9 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png index 187e80ac..e008dc8 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png index c6cfaca..6b7bf79f 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png index c6cfaca..6b7bf79f 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png index ea0c986..c7ab634 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index e1859b3..b1566ee4 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/win/dark-mode/colors/web-theme-expected.png index e469293..de80442 100644 --- a/third_party/blink/web_tests/platform/win/dark-mode/colors/web-theme-expected.png +++ b/third_party/blink/web_tests/platform/win/dark-mode/colors/web-theme-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt similarity index 83% rename from third_party/blink/web_tests/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt rename to third_party/blink/web_tests/platform/win/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt index f8f1c989..48717ed 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt +++ b/third_party/blink/web_tests/platform/win/external/wpt/css/css-scroll-snap/scroll-target-margin-005-expected.txt
@@ -1,4 +1,4 @@ This is a testharness.js-based test. -FAIL scroll-margin on input widget assert_between_exclusive: Should honor date input scroll-margin expected a number greater than 4750 and less than 4850 but got 4720 +FAIL scroll-margin on input widget assert_between_exclusive: Should honor date input scroll-margin expected a number greater than 4750 and less than 4850 but got 4719 Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png index 2abd583..fa142077 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png index d3953d0..51c2b82 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-expected.png index d3953d0..51c2b82 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png index f57dac18..5fe3aed 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png index 8f0279ca..bcba0f6 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png index 5dffab7..a0125ae4 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png index 73b39a49..58a98e6 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png index 5201f8aa..029a31f 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index 137ef6a..24739a8 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png index 63e9daa..dd380c21 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png index d3953d0..51c2b82 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png index 624cdab..41ca588 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png index 2abd583..fa142077 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-step-expected.png index cce1caf..7e4a611 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png index 3037044..36385e1 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-month-appearance-expected.png index ff140fab..a170dfc 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-month-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-month-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png index 878963e..c2acba1 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-expected.png index cd99842..8b6239a0 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-step-expected.png index 0709ed9..9ad068e 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-expected.png index c0b892c..8269f62 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-step-expected.png index 5fc7e18..a2e8b23 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/calendar-picker/week-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index d3953d0..51c2b82 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index 124f51a..d4604c6 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index 3ab2d54..c9a3663c 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/date/date-appearance-basic-expected.png index 62e4d24c..923130b 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 5f2df55..3773804 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png index 4e7179b..eecc3d2 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 4fefc39..3d2e915 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index 8fbbd9a..abfa71c 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 0715a88..210cca1 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month/month-appearance-basic-expected.png index 3ef329ea..9e1a5d6 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png index 3a2c6c4..b9a5360 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png index 92305ae..8d04d56 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png index d3dd9da1..10907dd 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png index 4f69a2b..5ac4d44c 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index 1c2709f..00c12c2 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index e70cdc0..4718e3b 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week/week-appearance-basic-expected.png index 384d34ad..3827c63e 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-basic-expected.png index de48939b..9aa1aad 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-l10n-expected.png index 4f8f223d..0ddee2a 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-pseudo-elements-expected.png index 7b771b9..fedaf2e5 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-pseudo-elements-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/date/date-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/date/date-text-height-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/date/date-text-height-appearance-expected.png new file mode 100644 index 0000000..8fd88a62 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/fast/forms/date/date-text-height-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png index 86f075a..9b189db 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index 66716f2..832e907ce 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png index 6bb736e..54efc06 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-basic-expected.png index 103853c5..db4067ef 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-l10n-expected.png index e83014c..b4b4af2 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-pseudo-elements-expected.png index 4358481..3e25dd7 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-pseudo-elements-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/month/month-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-disabled-today-expected.png index d6cb3ae..f554d9a 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-disabled-today-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-disabled-today-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-rtl-expected.png index 3224caa..80240c5 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-step-expected.png index 0a84ae2..cd61859 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png index e588a68..be17577e 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-zoom150-expected.png index fd97625c..b1969ca 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/month/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png index 49005e8..62cd725 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png index 8d40c3eb..61a20825 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png index 9539258..178ca29 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png index 9bf02c4..e69767e 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png index c003ac31..c1c0f45 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png index f1e2c7d..4990a07 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png index 3f7543cf..477ac19b 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png index 07a21ce6..4863c0b 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png index c34608e..c2fd011f 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png index 4b2cfbc..5020767 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png index 54e471d..a769a17 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png index a2b5d70c..09b4cce 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png index 04d05057..d08f3bb 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-basic-expected.png index d9e24145..26d2bb4 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-pseudo-elements-expected.png index cb89df1..61cb79c 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-pseudo-elements-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/week/week-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index b22e889..b5ea1a0 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index 6ced17e..6a89275 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index 53c03a8..82e9516d2 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png index 62a20c5b..e3ca519d 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index c4c9b935..c690fa89 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png index 7266afd..72a6f8d 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index f9e20f33..56c5fb2 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index 0262c356..70fea86 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 5c797fd..b14eeb1 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png index cd55d1f..3eb402a 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png index 5ac842ab..e89c2c1b 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png index 3cf6a33..034a257 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png index 861ba0a..c521efad 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png index 5920803..101d4f3 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index ae8050b8..7a2e0bc9 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index c3faa86..d1e1bb7 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png index 5f82982..d5053c32 100644 --- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-focus-ring-expected.png index b97bc4d..5e56451 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png index 28c73d05..bc926b2 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-open-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-open-expected.png index ca52697..44e0c25 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-open-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-open-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png index 075a478..a5a9548f8 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png index a49af54..e50590a 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index 304a391..d905d16b 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index e855960..5f47e67 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index e46f788a..55d05b7 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png index 2d2dff24..8bd1c22 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 9a36c7c3..ee5290f 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png index 97f27fd..0400e320 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 9cefea7..97b299a 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index 4fc483b..76cd54ff 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 98de2ad..552439f 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png index 6ad77ca4..8d80e9e 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index e68514c..879f587 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index 443ec0f..daaec91 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png index 75ca996..5fa9e6d 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png index 74f077f..592c4ea4 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-mode-default/dark-mode/colors/web-theme-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png index 74f077f..592c4ea4 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png index e2bb1948..c15cebfe 100644 --- a/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index 0aa666f..49419172 100644 --- a/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png index 361c940..61341560 100644 --- a/third_party/blink/web_tests/platform/win/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index f2d9436..546026f 100644 --- a/third_party/blink/web_tests/platform/win/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png index 361c940..61341560 100644 --- a/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index 8e5abbd..546026f 100644 --- a/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png index 18b0075..5a49087 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png index 474635c3..afb364a 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-expected.png index 474635c3..afb364a 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png index ba135e4..d0f480c0 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png index 9d01faae..2ebd5771 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png index bf1e377..2d63425 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png index a63a2434..d0316b088 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index d7290f62..13a800b 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png index bff4f72..5f7fd6c8 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png index 474635c3..afb364a 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-coarse-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png index 11a06c8..caadefde 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png index 18b0075..5a49087 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-step-expected.png index ad30dccb..eec66e7 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png index 971f5b1d..306cceb 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-month-appearance-expected.png index 0da3c55..732a3d9 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-month-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-month-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png index 6e403495..0b9f05e 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-expected.png index 09b719a5..8a6f329 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-step-expected.png index 11c6b400..b3a22bd 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-expected.png index b0d878f..d84f3f9e 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-step-expected.png index 222788b..daaa0a7ea 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/calendar-picker/week-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index 474635c3..afb364a 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index 7412d894..bb0fc3a 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index fd926ba6..38dd860 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 879da59..43c85ea 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index eb3af14..1b601ce 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index bf39923..7d718ed 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index b1dfd141..6228eaa 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month/month-appearance-basic-expected.png index 6454c142..8ee78ff 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png index 73a95cd..18170bd 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index 5493d5c..12ca136 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index 11514e8..d8a75f1 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/date/date-text-height-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/date/date-text-height-appearance-expected.png new file mode 100644 index 0000000..1fd205a --- /dev/null +++ b/third_party/blink/web_tests/platform/win7/fast/forms/date/date-text-height-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index 51ffa5c..3de79c6 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png index 0cb7ff9..2fe4e71 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/datetimelocal/datetimelocal-picker-step2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-basic-expected.png index 9c10dbe..c267e7b6 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-l10n-expected.png index 4cc6c6ae..949f71b 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-pseudo-elements-expected.png index 2e4272e..7032f70 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-pseudo-elements-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-disabled-today-expected.png index 6a9025936..7a8df7ad 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-disabled-today-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-disabled-today-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-rtl-expected.png index fb4fbb4..fb182ed 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-step-expected.png index 3d54765c..d34745b1 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-step-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-step-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png index 284610e..7077b66 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-value-not-in-interval-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-zoom150-expected.png index a6788b6..06d8a3a 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-zoom150-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/month/month-picker-appearance-zoom150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png deleted file mode 100644 index cb4e704..0000000 --- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png deleted file mode 100644 index 9390d81..0000000 --- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png index f44c015..168085d 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png index 9f0ced1..c72df20e6 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png index 9b7dc92..97d8ce7d 100644 --- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png +++ b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png deleted file mode 100644 index 41a74ca..0000000 --- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/week-suggestion-picker-appearance-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png deleted file mode 100644 index 6de1d43..0000000 --- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png deleted file mode 100644 index 423a022..0000000 --- a/third_party/blink/web_tests/platform/win7/fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index ff77d15..ac3a68a 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index ae0118e..d9f6e17 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index b3f1003..a6fa3f36 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index 32f7495..66f3346 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 88490f7..4ef71eb 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index 3a3c840..7b50fb4 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index 6e18317..9f8fc88 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png index 66372a1..fba2ade 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png index 06f2b79..6f16460 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index e4b5a4d..2edc244 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index d6d05f0..26ce1e8 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png index eb39917b..c48aa74 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-open-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-open-expected.png index 75f249a5e..02c430c 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-open-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/date/date-picker-open-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png index 954c9269..a735131d5 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png index 0e7cd628..02b6fb57 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png index 4319c97f..2801805 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png index f8c56ba4..0d01f592 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/calendar-picker/date-picker-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png index d49f620..2afd43f 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png index 869ecbc..b7a6847 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png index 51d4fa2..6b9b5352 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png index c7012f1e..dabc52f 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month-picker/month-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png index d2290b7..66e253a 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png index 59636dc..5dbcf1b2 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-es-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png index f91d5fd..2405d71c 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/week-picker/week-picker-appearance-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png index f0dbe7f..d9b9422 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index f0f9d804..22127ab 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png index fde4489..2e85da81 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index 7bc8edb..6271ad1 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png index fde4489..2e85da81 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png index 309fdc9..6271ad1 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png index f44c015..168085d 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png new file mode 100644 index 0000000..c72df20e6 --- /dev/null +++ b/third_party/blink/web_tests/platform/win7/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png new file mode 100644 index 0000000..97d8ce7d --- /dev/null +++ b/third_party/blink/web_tests/platform/win7/virtual/scroll-unification/fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar-expected.png Binary files differ
diff --git a/third_party/libxml/README.chromium b/third_party/libxml/README.chromium index 1d1d773..03822a1 100644 --- a/third_party/libxml/README.chromium +++ b/third_party/libxml/README.chromium
@@ -1,6 +1,6 @@ Name: libxml URL: http://xmlsoft.org -Version: dea91c97debeac7c1aaf9c19f79029809e23a353 +Version: eab86522163ec52602a020f62baa9f6cf87ec870 CPEPrefix: cpe:/a:xmlsoft:libxml2:2.9.12 License: MIT License File: src/Copyright @@ -12,7 +12,6 @@ Modifications: -- chromium-issue-599427.patch: workaround for VS 2015 Update 2 code-gen bug - chromium-issue-628581.patch: See https://crbug.com/628581#c18 - chromium-issue-894933.patch: Use ptrdiff_t instead of unsigned long for pointer differences in parser.c
diff --git a/third_party/libxml/chromium/chromium-issue-599427.patch b/third_party/libxml/chromium/chromium-issue-599427.patch deleted file mode 100644 index 20e26c5..0000000 --- a/third_party/libxml/chromium/chromium-issue-599427.patch +++ /dev/null
@@ -1,28 +0,0 @@ ---- a/xmlstring.c 2016-05-13 17:24:58.870079372 +0900 -+++ b/xmlstring.c 2016-04-25 13:58:09.879238595 +0900 -@@ -835,16 +835,20 @@ - while ( len-- > 0) { - if ( !*ptr ) - break; -- if ( (ch = *ptr++) & 0x80) -- while ((ch<<=1) & 0x80 ) { -- if (*ptr == 0) break; -+ if ( (ch = *ptr++) & 0x80) { -+ // Workaround for an optimization bug in VS 2015 Update 2, remove -+ // once the fix is released. crbug.com/599427 -+ // https://connect.microsoft.com/VisualStudio/feedback/details/2582138 -+ xmlChar ch2 = ch; -+ while ((ch2<<=1) & 0x80 ) { - ptr++; -- } -+ if (*ptr == 0) break; -+ } -+ } - } - return (ptr - utf); - } - -- - /** - * xmlUTF8Strndup: - * @utf: the input UTF8 *
diff --git a/third_party/libxml/chromium/roll.py b/third_party/libxml/chromium/roll.py index ef23d4c3..e936c25 100755 --- a/third_party/libxml/chromium/roll.py +++ b/third_party/libxml/chromium/roll.py
@@ -66,7 +66,6 @@ # e. Complete the review as usual PATCHES = [ - 'chromium-issue-599427.patch', 'chromium-issue-628581.patch', 'libxml2-2.9.4-security-xpath-nodetab-uaf.patch', 'chromium-issue-708434.patch',
diff --git a/third_party/libxml/linux/config.h b/third_party/libxml/linux/config.h index 25172b5..bccbf1e 100644 --- a/third_party/libxml/linux/config.h +++ b/third_party/libxml/linux/config.h
@@ -22,7 +22,8 @@ /* Define to 1 if you have the <ctype.h> header file. */ #define HAVE_CTYPE_H 1 -/* Define to 1 if you have the <dirent.h> header file. */ +/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. + */ #define HAVE_DIRENT_H 1 /* Define to 1 if you have the <dlfcn.h> header file. */ @@ -61,18 +62,9 @@ /* Define to 1 if you have the `isascii' function. */ #define HAVE_ISASCII 1 -/* Define if isinf is there */ -#define HAVE_ISINF /**/ - -/* Define if isnan is there */ -#define HAVE_ISNAN /**/ - /* Define if history library is there (-lhistory) */ /* #undef HAVE_LIBHISTORY */ -/* Define if pthread library is there (-lpthread) */ -/* #undef HAVE_LIBPTHREAD */ - /* Define if readline library is there (-lreadline) */ /* #undef HAVE_LIBREADLINE */ @@ -91,9 +83,6 @@ /* Define to 1 if you have the <math.h> header file. */ #define HAVE_MATH_H 1 -/* Define to 1 if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - /* Define to 1 if you have the `mmap' function. */ #define HAVE_MMAP 1 @@ -165,6 +154,9 @@ /* Define to 1 if you have the <stdint.h> header file. */ #define HAVE_STDINT_H 1 +/* Define to 1 if you have the <stdio.h> header file. */ +#define HAVE_STDIO_H 1 + /* Define to 1 if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 @@ -263,7 +255,9 @@ /* Type cast for the send() function 2nd arg */ #define SEND_ARG2_CAST /**/ -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ #define STDC_HEADERS 1 /* Support for IPv6 */
diff --git a/third_party/libxml/mac/config.h b/third_party/libxml/mac/config.h index 27a79ec..3341a76 100644 --- a/third_party/libxml/mac/config.h +++ b/third_party/libxml/mac/config.h
@@ -22,7 +22,8 @@ /* Define to 1 if you have the <ctype.h> header file. */ #define HAVE_CTYPE_H 1 -/* Define to 1 if you have the <dirent.h> header file. */ +/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. + */ #define HAVE_DIRENT_H 1 /* Define to 1 if you have the <dlfcn.h> header file. */ @@ -61,18 +62,9 @@ /* Define to 1 if you have the `isascii' function. */ #define HAVE_ISASCII 1 -/* Define if isinf is there */ -#define HAVE_ISINF /**/ - -/* Define if isnan is there */ -#define HAVE_ISNAN /**/ - /* Define if history library is there (-lhistory) */ /* #undef HAVE_LIBHISTORY */ -/* Define if pthread library is there (-lpthread) */ -/* #undef HAVE_LIBPTHREAD */ - /* Define if readline library is there (-lreadline) */ /* #undef HAVE_LIBREADLINE */
diff --git a/third_party/libxml/src/CMakeLists.txt b/third_party/libxml/src/CMakeLists.txt index 073869f..7e1aa08d 100644 --- a/third_party/libxml/src/CMakeLists.txt +++ b/third_party/libxml/src/CMakeLists.txt
@@ -139,7 +139,10 @@ void __attribute__((destructor)) f(void) {} int main(void) { return 0; } - " ATTRIBUTE_DESTRUCTOR) + " HAVE_ATTRIBUTE_DESTRUCTOR) + if(HAVE_ATTRIBUTE_DESTRUCTOR) + set(ATTRIBUTE_DESTRUCTOR "__attribute__((destructor))") + endif() check_c_source_compiles(" #include <netdb.h> int main() { (void) gethostbyname((const char*) \"\"); return 0; } @@ -158,39 +161,27 @@ endif() check_function_exists(class HAVE_CLASS) check_include_files(ctype.h HAVE_CTYPE_H) - check_include_files(dirent.h HAVE_DIRENT_H) check_include_files(dlfcn.h HAVE_DLFCN_H) check_library_exists(dl dlopen "" HAVE_DLOPEN) check_include_files(dl.h HAVE_DL_H) check_include_files(errno.h HAVE_ERRNO_H) check_include_files(fcntl.h HAVE_FCNTL_H) - check_function_exists(finite HAVE_FINITE) check_include_files(float.h HAVE_FLOAT_H) check_function_exists(fpclass HAVE_FPCLASS) check_function_exists(fprintf HAVE_FPRINTF) - check_function_exists(fp_class HAVE_FP_CLASS) check_function_exists(ftime HAVE_FTIME) check_function_exists(getaddrinfo HAVE_GETADDRINFO) check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) check_include_files(inttypes.h HAVE_INTTYPES_H) check_function_exists(isascii HAVE_ISASCII) - check_function_exists(isinf HAVE_ISINF) - check_function_exists(isnan HAVE_ISNAN) - check_function_exists(isnand HAVE_ISNAND) check_library_exists(history append_history "" HAVE_LIBHISTORY) - check_library_exists(lzma lzma_code "" HAVE_LIBLZMA) - check_library_exists(pthread pthread_join "" HAVE_LIBPTHREAD) check_library_exists(readline readline "" HAVE_LIBREADLINE) - check_library_exists(z gzread "" HAVE_LIBZ) check_include_files(limits.h HAVE_LIMITS_H) check_function_exists(localtime HAVE_LOCALTIME) - check_include_files(lzma.h HAVE_LZMA_H) check_include_files(malloc.h HAVE_MALLOC_H) check_include_files(math.h HAVE_MATH_H) - check_include_files(memory.h HAVE_MEMORY_H) check_function_exists(mmap HAVE_MMAP) check_function_exists(munmap HAVE_MUNMAP) - check_symbol_exists(DIR ndir.h HAVE_NDIR_H) check_include_files(netdb.h HAVE_NETDB_H) check_include_files(netinet/in.h HAVE_NETINET_IN_H) check_include_files(poll.h HAVE_POLL_H) @@ -201,7 +192,6 @@ check_function_exists(rand_r HAVE_RAND_R) check_include_files(resolv.h HAVE_RESOLV_H) check_library_exists(dld shl_load "" HAVE_SHLLOAD) - check_function_exists(signal HAVE_SIGNAL) check_include_files(signal.h HAVE_SIGNAL_H) check_function_exists(snprintf HAVE_SNPRINTF) check_function_exists(sprintf HAVE_SPRINTF) @@ -214,9 +204,7 @@ check_function_exists(strftime HAVE_STRFTIME) check_include_files(strings.h HAVE_STRINGS_H) check_include_files(string.h HAVE_STRING_H) - check_symbol_exists(DIR sys/dir.h HAVE_SYS_DIR_H) check_include_files(sys/mman.h HAVE_SYS_MMAN_H) - check_symbol_exists(DIR sys/ndir.h HAVE_SYS_NDIR_H) check_include_files(sys/select.h HAVE_SYS_SELECT_H) check_include_files(sys/socket.h HAVE_SYS_SOCKET_H) check_include_files(sys/stat.h HAVE_SYS_STAT_H)
diff --git a/third_party/libxml/src/HTMLparser.c b/third_party/libxml/src/HTMLparser.c index b56363a..82859b0 100644 --- a/third_party/libxml/src/HTMLparser.c +++ b/third_party/libxml/src/HTMLparser.c
@@ -3045,7 +3045,7 @@ NEXT; } - if (CUR != '"') { + if (CUR != quote) { htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED, "Unfinished PubidLiteral\n", NULL, NULL); } else { @@ -3958,13 +3958,25 @@ htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED, "htmlParseStartTag: invalid element name\n", NULL, NULL); + /* + * The recovery code is disabled for now as it can result in + * quadratic behavior with the push parser. htmlParseStartTag + * must consume all content up to the final '>' in order to avoid + * rescanning for this terminator. + * + * For a proper fix in line with HTML5, htmlParseStartTag and + * htmlParseElement should only be called when there's an ASCII + * alpha character following the initial '<'. Otherwise, the '<' + * should be emitted as text (unless followed by '!', '/' or '?'). + */ +#if 0 /* if recover preserve text on classic misconstructs */ if ((ctxt->recovery) && ((IS_BLANK_CH(CUR)) || (CUR == '<') || (CUR == '=') || (CUR == '>') || (((CUR >= '0') && (CUR <= '9'))))) { htmlParseCharDataInternal(ctxt, '<'); return(-1); } - +#endif /* Dump the bogus tag like browsers do */ while ((CUR != 0) && (CUR != '>') && @@ -5185,6 +5197,7 @@ input = xmlNewInputStream(ctxt); if (input == NULL) { + xmlFreeParserInputBuffer(buf); xmlFreeParserCtxt(ctxt); return(NULL); } @@ -5992,32 +6005,12 @@ } else if (cur == '<') { if ((!terminate) && (next == 0)) goto done; - /* - * Only switch to START_TAG if the next character - * starts a valid name. Otherwise, htmlParseStartTag - * might return without consuming all characters - * up to the final '>'. - */ - if ((IS_ASCII_LETTER(next)) || - (next == '_') || (next == ':') || (next == '.')) { - ctxt->instate = XML_PARSER_START_TAG; - ctxt->checkIndex = 0; + ctxt->instate = XML_PARSER_START_TAG; + ctxt->checkIndex = 0; #ifdef DEBUG_PUSH - xmlGenericError(xmlGenericErrorContext, - "HPP: entering START_TAG\n"); + xmlGenericError(xmlGenericErrorContext, + "HPP: entering START_TAG\n"); #endif - } else { - htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED, - "htmlParseTryOrFinish: " - "invalid element name\n", - NULL, NULL); - htmlCheckParagraph(ctxt); - if ((ctxt->sax != NULL) && - (ctxt->sax->characters != NULL)) - ctxt->sax->characters(ctxt->userData, - in->cur, 1); - NEXT; - } break; } else { /* @@ -6999,7 +6992,9 @@ * @encoding: the document encoding, or NULL * @options: a combination of htmlParserOption(s) * - * parse an XML from a file descriptor and build a tree. + * parse an HTML from a file descriptor and build a tree. + * NOTE that the file descriptor will not be closed when the + * reader is closed or reset. * * Returns the resulting document tree */ @@ -7008,17 +7003,17 @@ { htmlParserCtxtPtr ctxt; xmlParserInputBufferPtr input; - xmlParserInputPtr stream; + htmlParserInputPtr stream; if (fd < 0) return (NULL); - xmlInitParser(); xmlInitParser(); input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE); if (input == NULL) return (NULL); - ctxt = xmlNewParserCtxt(); + input->closecallback = NULL; + ctxt = htmlNewParserCtxt(); if (ctxt == NULL) { xmlFreeParserInputBuffer(input); return (NULL); @@ -7026,7 +7021,7 @@ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE); if (stream == NULL) { xmlFreeParserInputBuffer(input); - xmlFreeParserCtxt(ctxt); + htmlFreeParserCtxt(ctxt); return (NULL); } inputPush(ctxt, stream);
diff --git a/third_party/libxml/src/Makefile.am b/third_party/libxml/src/Makefile.am index a9284b9..eb906b07 100644 --- a/third_party/libxml/src/Makefile.am +++ b/third_party/libxml/src/Makefile.am
@@ -1273,27 +1273,27 @@ # # Install the tests program sources as examples # -BASE_DIR=$(datadir)/doc -DOC_MODULE=libxml2-$(VERSION) -EXAMPLES_DIR=$(BASE_DIR)/$(DOC_MODULE)/examples +EXAMPLES_DIR=$(docdir)/examples install-data-local: - $(MKDIR_P) $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) - -$(INSTALL) -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) + $(MKDIR_P) $(DESTDIR)$(docdir) + -$(INSTALL) -m 0644 $(srcdir)/Copyright $(DESTDIR)$(docdir) $(MKDIR_P) $(DESTDIR)$(EXAMPLES_DIR) -$(INSTALL) -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR) -$(INSTALL) -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR) -$(INSTALL) -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR) -$(INSTALL) -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR) + @echo "If the documentation is installed, please also look at html/examples for more." > $(DESTDIR)$(EXAMPLES_DIR)/README uninstall-local: + rm -f $(DESTDIR)$(EXAMPLES_DIR)/README rm -f $(DESTDIR)$(EXAMPLES_DIR)/testXPath.c rm -f $(DESTDIR)$(EXAMPLES_DIR)/testHTML.c rm -f $(DESTDIR)$(EXAMPLES_DIR)/testSAX.c rm -f $(DESTDIR)$(EXAMPLES_DIR)/xmllint.c rm -rf $(DESTDIR)$(EXAMPLES_DIR) - rm -f $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)/Copyright - rm -rf $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) + rm -f $(DESTDIR)$(docdir)/Copyright + rm -rf $(DESTDIR)$(docdir) tst: tst.c $(CC) $(CFLAGS) -Iinclude -o tst tst.c .libs/libxml2.a -lpthread -lm -lz -llzma
diff --git a/third_party/libxml/src/SAX2.c b/third_party/libxml/src/SAX2.c index 99019a9..0319246 100644 --- a/third_party/libxml/src/SAX2.c +++ b/third_party/libxml/src/SAX2.c
@@ -742,6 +742,7 @@ xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR, "SAX.xmlSAX2AttributeDecl(%s) called while not in subset\n", name, NULL); + xmlFree(name); xmlFreeEnumeration(tree); return; } @@ -1622,10 +1623,10 @@ ctxt->nodemem = -1; if (ctxt->linenumbers) { if (ctxt->input != NULL) { - if (ctxt->input->line < 65535) - ret->line = (short) ctxt->input->line; + if (ctxt->input->line < USHRT_MAX) + ret->line = (unsigned short) ctxt->input->line; else - ret->line = 65535; + ret->line = USHRT_MAX; } } @@ -1886,10 +1887,10 @@ if (ctxt->linenumbers) { if (ctxt->input != NULL) { - if (ctxt->input->line < 65535) - ret->line = (short) ctxt->input->line; + if (ctxt->input->line < USHRT_MAX) + ret->line = (unsigned short) ctxt->input->line; else { - ret->line = 65535; + ret->line = USHRT_MAX; if (ctxt->options & XML_PARSE_BIG_LINES) ret->psvi = (void *) (ptrdiff_t) ctxt->input->line; } @@ -2266,10 +2267,10 @@ } if (ctxt->linenumbers) { if (ctxt->input != NULL) { - if (ctxt->input->line < 65535) - ret->line = (short) ctxt->input->line; + if (ctxt->input->line < USHRT_MAX) + ret->line = (unsigned short) ctxt->input->line; else - ret->line = 65535; + ret->line = USHRT_MAX; } } @@ -2688,10 +2689,10 @@ if (ctxt->linenumbers) { if (ctxt->input != NULL) { - if (ctxt->input->line < 65535) - ret->line = (short) ctxt->input->line; + if (ctxt->input->line < USHRT_MAX) + ret->line = (unsigned short) ctxt->input->line; else - ret->line = 65535; + ret->line = USHRT_MAX; } } if (ctxt->inSubset == 1) { @@ -2748,10 +2749,10 @@ if (ret == NULL) return; if (ctxt->linenumbers) { if (ctxt->input != NULL) { - if (ctxt->input->line < 65535) - ret->line = (short) ctxt->input->line; + if (ctxt->input->line < USHRT_MAX) + ret->line = (unsigned short) ctxt->input->line; else - ret->line = 65535; + ret->line = USHRT_MAX; } }
diff --git a/third_party/libxml/src/aclocal.m4 b/third_party/libxml/src/aclocal.m4 index a671949..d6ebff5 100644 --- a/third_party/libxml/src/aclocal.m4 +++ b/third_party/libxml/src/aclocal.m4
@@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.3 -*- Autoconf -*- +# generated automatically by aclocal 1.16.5 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -296,7 +296,7 @@ AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -311,7 +311,7 @@ [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.3], [], +m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -327,14 +327,14 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.3])dnl +[AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -386,7 +386,7 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -417,7 +417,7 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -608,7 +608,7 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -676,7 +676,7 @@ # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -704,6 +704,10 @@ # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl +m4_ifdef([_$0_ALREADY_INIT], + [m4_fatal([$0 expanded multiple times +]m4_defn([_$0_ALREADY_INIT]))], + [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -740,7 +744,7 @@ [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl @@ -792,6 +796,20 @@ [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) +# Variables for tags utilities; see am/tags.am +if test -z "$CTAGS"; then + CTAGS=ctags +fi +AC_SUBST([CTAGS]) +if test -z "$ETAGS"; then + ETAGS=etags +fi +AC_SUBST([ETAGS]) +if test -z "$CSCOPE"; then + CSCOPE=cscope +fi +AC_SUBST([CSCOPE]) + AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This @@ -873,7 +891,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -894,7 +912,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -916,7 +934,7 @@ # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -951,7 +969,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -994,7 +1012,7 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1028,7 +1046,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1057,7 +1075,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1104,7 +1122,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1123,7 +1141,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1204,7 +1222,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1264,7 +1282,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1292,7 +1310,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1311,7 +1329,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it,
diff --git a/third_party/libxml/src/config.h.cmake.in b/third_party/libxml/src/config.h.cmake.in index 22b3c92..e093563 100644 --- a/third_party/libxml/src/config.h.cmake.in +++ b/third_party/libxml/src/config.h.cmake.in
@@ -2,7 +2,7 @@ /* config.h.in. Generated from configure.ac by autoheader. */ /* Define if __attribute__((destructor)) is accepted */ -#cmakedefine ATTRIBUTE_DESTRUCTOR 1 +#cmakedefine ATTRIBUTE_DESTRUCTOR @ATTRIBUTE_DESTRUCTOR@ /* Type cast for the gethostbyname() argument */ #cmakedefine GETHOSTBYNAME_ARG_CAST @GETHOSTBYNAME_ARG_CAST@ @@ -19,9 +19,6 @@ /* Define to 1 if you have the <ctype.h> header file. */ #cmakedefine HAVE_CTYPE_H 1 -/* Define to 1 if you have the <dirent.h> header file. */ -#cmakedefine HAVE_DIRENT_H 1 - /* Define to 1 if you have the <dlfcn.h> header file. */ #cmakedefine HAVE_DLFCN_H 1 @@ -58,18 +55,9 @@ /* Define to 1 if you have the `isascii' function. */ #cmakedefine HAVE_ISASCII 1 -/* Define if isinf is there */ -#cmakedefine HAVE_ISINF 1 - -/* Define if isnan is there */ -#cmakedefine HAVE_ISNAN 1 - /* Define if history library is there (-lhistory) */ #cmakedefine HAVE_LIBHISTORY 1 -/* Define if pthread library is there (-lpthread) */ -#cmakedefine HAVE_LIBPTHREAD 1 - /* Define if readline library is there (-lreadline) */ #cmakedefine HAVE_LIBREADLINE 1 @@ -79,18 +67,12 @@ /* Define to 1 if you have the `localtime' function. */ #cmakedefine HAVE_LOCALTIME 1 -/* Define to 1 if you have the <lzma.h> header file. */ -#cmakedefine HAVE_LZMA_H 1 - /* Define to 1 if you have the <malloc.h> header file. */ #cmakedefine HAVE_MALLOC_H 1 /* Define to 1 if you have the <math.h> header file. */ #cmakedefine HAVE_MATH_H 1 -/* Define to 1 if you have the <memory.h> header file. */ -#cmakedefine HAVE_MEMORY_H 1 - /* Define to 1 if you have the `mmap' function. */ #cmakedefine HAVE_MMAP 1 @@ -102,9 +84,6 @@ # undef /**/ HAVE_MMAP #endif -/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ -#cmakedefine HAVE_NDIR_H 1 - /* Define to 1 if you have the <netdb.h> header file. */ #cmakedefine HAVE_NETDB_H 1 @@ -135,9 +114,6 @@ /* Have shl_load based dso */ #cmakedefine HAVE_SHLLOAD 1 -/* Define to 1 if you have the `signal' function. */ -#cmakedefine HAVE_SIGNAL 1 - /* Define to 1 if you have the <signal.h> header file. */ #cmakedefine HAVE_SIGNAL_H 1 @@ -174,17 +150,9 @@ /* Define to 1 if you have the <string.h> header file. */ #cmakedefine HAVE_STRING_H 1 -/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. - */ -#cmakedefine HAVE_SYS_DIR_H 1 - /* Define to 1 if you have the <sys/mman.h> header file. */ #cmakedefine HAVE_SYS_MMAN_H 1 -/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. - */ -#cmakedefine HAVE_SYS_NDIR_H 1 - /* Define to 1 if you have the <sys/select.h> header file. */ #cmakedefine HAVE_SYS_SELECT_H 1
diff --git a/third_party/libxml/src/config.h.in b/third_party/libxml/src/config.h.in index a55d4e1..ed6ddec 100644 --- a/third_party/libxml/src/config.h.in +++ b/third_party/libxml/src/config.h.in
@@ -21,7 +21,8 @@ /* Define to 1 if you have the <ctype.h> header file. */ #undef HAVE_CTYPE_H -/* Define to 1 if you have the <dirent.h> header file. */ +/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. + */ #undef HAVE_DIRENT_H /* Define to 1 if you have the <dlfcn.h> header file. */ @@ -60,18 +61,9 @@ /* Define to 1 if you have the `isascii' function. */ #undef HAVE_ISASCII -/* Define if isinf is there */ -#undef HAVE_ISINF - -/* Define if isnan is there */ -#undef HAVE_ISNAN - /* Define if history library is there (-lhistory) */ #undef HAVE_LIBHISTORY -/* Define if pthread library is there (-lpthread) */ -#undef HAVE_LIBPTHREAD - /* Define if readline library is there (-lreadline) */ #undef HAVE_LIBREADLINE
diff --git a/third_party/libxml/src/configure.ac b/third_party/libxml/src/configure.ac index 5b161a54..45e1df4 100644 --- a/third_party/libxml/src/configure.ac +++ b/third_party/libxml/src/configure.ac
@@ -124,13 +124,12 @@ [ --with-html add the HTML support (on)]) dnl Specific dir for HTML output ? AC_ARG_WITH(html-dir, AS_HELP_STRING([--with-html-dir=path], - [path to base html directory, default $datadir/doc/html]), - [HTML_DIR=$withval], [HTML_DIR='$(datadir)/doc']) + [path to base html directory, default $docdir/html]), + [HTML_DIR=$withval], [HTML_DIR='$(docdir)/html']) AC_ARG_WITH(html-subdir, AS_HELP_STRING([--with-html-subdir=path], - [directory used under html-dir, default $PACKAGE-$VERSION/html]), - [test "x$withval" != "x" && HTML_DIR="$HTML_DIR/$withval"], - [HTML_DIR="$HTML_DIR/\$(PACKAGE)-\$(VERSION)/html"]) + [directory used under html-dir, default '']), + [test "x$withval" != "x" && HTML_DIR="$HTML_DIR/$withval"]) AC_SUBST(HTML_DIR) AC_ARG_WITH(http, [ --with-http add the HTTP support (on)]) @@ -475,7 +474,6 @@ AC_CHECK_HEADERS([fcntl.h]) AC_CHECK_HEADERS([unistd.h]) AC_CHECK_HEADERS([ctype.h]) -AC_CHECK_HEADERS([dirent.h]) AC_CHECK_HEADERS([errno.h]) AC_CHECK_HEADERS([malloc.h]) AC_CHECK_HEADERS([stdarg.h]) @@ -741,13 +739,6 @@ dnl ******************************End IPv6 checks****************************** -dnl Checks for isnan in libm if not in libc -AC_CHECK_FUNC(isnan, AC_DEFINE([HAVE_ISNAN],[], [Define if isnan is there]) , AC_CHECK_LIB(m, isnan, - [AC_DEFINE([HAVE_ISNAN],[], [Define if isnan is there])])) - -AC_CHECK_FUNC(isinf, AC_DEFINE([HAVE_ISINF], [], [Define if isinf is there]) , AC_CHECK_LIB(m, isinf, - [AC_DEFINE([HAVE_ISINF], [], [Define if isinf is there])])) - XML_LIBDIR='-L${libdir}' XML_INCLUDEDIR='-I${includedir}/libxml2' @@ -1063,7 +1054,6 @@ AC_CHECK_HEADER(pthread.h, AC_CHECK_LIB(pthread, pthread_join,[ THREAD_LIBS="-lpthread" - AC_DEFINE([HAVE_LIBPTHREAD], [], [Define if pthread library is there (-lpthread)]) AC_DEFINE([HAVE_PTHREAD_H], [], [Define if <pthread.h> is there]) WITH_THREADS="1"])) fi @@ -1701,8 +1691,6 @@ AC_SUBST(ICU_LIBS) AC_SUBST(XML_INCLUDEDIR) AC_SUBST(HTML_DIR) -AC_SUBST(HAVE_ISNAN) -AC_SUBST(HAVE_ISINF) AC_SUBST(PYTHON) AC_SUBST(PYTHON_VERSION) AC_SUBST(PYTHON_INCLUDES)
diff --git a/third_party/libxml/src/encoding.c b/third_party/libxml/src/encoding.c index 5e50c15..3741c94 100644 --- a/third_party/libxml/src/encoding.c +++ b/third_party/libxml/src/encoding.c
@@ -527,7 +527,7 @@ in++; } if ((c & 0xFC00) == 0xD800) { /* surrogates */ - if (in >= inend) { /* (in > inend) shouldn't happens */ + if (in >= inend) { /* handle split mutli-byte characters */ break; } if (xmlLittleEndian) { @@ -744,38 +744,39 @@ { unsigned char* outstart = out; const unsigned char* processed = inb; - unsigned char* outend = out + *outlen; + unsigned char* outend; unsigned short* in = (unsigned short*) inb; unsigned short* inend; unsigned int c, d, inlen; unsigned char *tmp; int bits; + if (*outlen == 0) { + *inlenb = 0; + return(0); + } + outend = out + *outlen; if ((*inlenb % 2) == 1) (*inlenb)--; inlen = *inlenb / 2; inend= in + inlen; - while (in < inend) { + while ((in < inend) && (out - outstart + 5 < *outlen)) { if (xmlLittleEndian) { tmp = (unsigned char *) in; c = *tmp++; - c = c << 8; - c = c | (unsigned int) *tmp; + c = (c << 8) | (unsigned int) *tmp; in++; } else { c= *in++; } if ((c & 0xFC00) == 0xD800) { /* surrogates */ - if (in >= inend) { /* (in > inend) shouldn't happens */ - *outlen = out - outstart; - *inlenb = processed - inb; - return(-2); + if (in >= inend) { /* handle split mutli-byte characters */ + break; } if (xmlLittleEndian) { tmp = (unsigned char *) in; d = *tmp++; - d = d << 8; - d = d | (unsigned int) *tmp; + d = (d << 8) | (unsigned int) *tmp; in++; } else { d= *in++; @@ -1822,7 +1823,7 @@ size_t icv_inlen, icv_outlen; const char *icv_in = (const char *) in; char *icv_out = (char *) out; - int ret; + size_t ret; if ((out == NULL) || (outlen == NULL) || (inlen == NULL) || (in == NULL)) { if (outlen != NULL) *outlen = 0; @@ -1833,7 +1834,7 @@ ret = iconv(cd, (ICONV_CONST char **) &icv_in, &icv_inlen, &icv_out, &icv_outlen); *inlen -= icv_inlen; *outlen -= icv_outlen; - if ((icv_inlen != 0) || (ret == -1)) { + if ((icv_inlen != 0) || (ret == (size_t) -1)) { #ifdef EILSEQ if (errno == EILSEQ) { return -2; @@ -2495,7 +2496,7 @@ */ toconv = xmlBufUse(in); if (toconv == 0) - return (0); + return (writtentot); if (toconv > 64 * 1024) toconv = 64 * 1024; if (toconv * 4 >= written) {
diff --git a/third_party/libxml/src/fuzz/Makefile.in b/third_party/libxml/src/fuzz/Makefile.in index 47f1edb3..8e724f7 100644 --- a/third_party/libxml/src/fuzz/Makefile.in +++ b/third_party/libxml/src/fuzz/Makefile.in
@@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.3 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -250,8 +250,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ @@ -270,6 +268,8 @@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ CYGWIN_EXTRA_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@ CYGWIN_EXTRA_PYTHON_LIBADD = @CYGWIN_EXTRA_PYTHON_LIBADD@ @@ -284,13 +284,12 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ EXTRA_CFLAGS = @EXTRA_CFLAGS@ FGREP = @FGREP@ FTP_OBJ = @FTP_OBJ@ GREP = @GREP@ -HAVE_ISINF = @HAVE_ISINF@ -HAVE_ISNAN = @HAVE_ISNAN@ HTML_DIR = @HTML_DIR@ HTML_OBJ = @HTML_OBJ@ HTTP_OBJ = @HTTP_OBJ@ @@ -705,7 +704,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am
diff --git a/third_party/libxml/src/hash.c b/third_party/libxml/src/hash.c index afa094e..7b82d2f 100644 --- a/third_party/libxml/src/hash.c +++ b/third_party/libxml/src/hash.c
@@ -86,7 +86,7 @@ xmlHashComputeKey(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3) { unsigned long value = 0L; - char ch; + unsigned long ch; #ifdef HASH_RANDOMIZATION value = table->random_seed; @@ -94,19 +94,19 @@ if (name != NULL) { value += 30 * (*name); while ((ch = *name++) != 0) { - value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + value = value ^ ((value << 5) + (value >> 3) + ch); } } value = value ^ ((value << 5) + (value >> 3)); if (name2 != NULL) { while ((ch = *name2++) != 0) { - value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + value = value ^ ((value << 5) + (value >> 3) + ch); } } value = value ^ ((value << 5) + (value >> 3)); if (name3 != NULL) { while ((ch = *name3++) != 0) { - value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + value = value ^ ((value << 5) + (value >> 3) + ch); } } return (value % table->size); @@ -121,7 +121,7 @@ const xmlChar *prefix2, const xmlChar *name2, const xmlChar *prefix3, const xmlChar *name3) { unsigned long value = 0L; - char ch; + unsigned long ch; #ifdef HASH_RANDOMIZATION value = table->random_seed; @@ -133,37 +133,37 @@ if (prefix != NULL) { while ((ch = *prefix++) != 0) { - value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + value = value ^ ((value << 5) + (value >> 3) + ch); } value = value ^ ((value << 5) + (value >> 3) + (unsigned long)':'); } if (name != NULL) { while ((ch = *name++) != 0) { - value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + value = value ^ ((value << 5) + (value >> 3) + ch); } } value = value ^ ((value << 5) + (value >> 3)); if (prefix2 != NULL) { while ((ch = *prefix2++) != 0) { - value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + value = value ^ ((value << 5) + (value >> 3) + ch); } value = value ^ ((value << 5) + (value >> 3) + (unsigned long)':'); } if (name2 != NULL) { while ((ch = *name2++) != 0) { - value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + value = value ^ ((value << 5) + (value >> 3) + ch); } } value = value ^ ((value << 5) + (value >> 3)); if (prefix3 != NULL) { while ((ch = *prefix3++) != 0) { - value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + value = value ^ ((value << 5) + (value >> 3) + ch); } value = value ^ ((value << 5) + (value >> 3) + (unsigned long)':'); } if (name3 != NULL) { while ((ch = *name3++) != 0) { - value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + value = value ^ ((value << 5) + (value >> 3) + ch); } } return (value % table->size);
diff --git a/third_party/libxml/src/libxml2.spec b/third_party/libxml/src/libxml2.spec index b3eca4f..8a8165b 100644 --- a/third_party/libxml/src/libxml2.spec +++ b/third_party/libxml/src/libxml2.spec
@@ -204,6 +204,6 @@ %endif # with_python3 %changelog -* Tue Aug 3 2021 Daniel Veillard <veillard@redhat.com> +* Mon Jan 31 2022 Daniel Veillard <veillard@redhat.com> - upstream release 2.9.12 see http://xmlsoft.org/news.html
diff --git a/third_party/libxml/src/macos/src/config-mac.h b/third_party/libxml/src/macos/src/config-mac.h index ca6f9939..c82d2b9a 100644 --- a/third_party/libxml/src/macos/src/config-mac.h +++ b/third_party/libxml/src/macos/src/config-mac.h
@@ -9,15 +9,11 @@ #define PACKAGE #define VERSION -#undef HAVE_LIBZ #undef HAVE_LIBM -#undef HAVE_ISINF -#undef HAVE_ISNAN #undef HAVE_LIBHISTORY #undef HAVE_LIBREADLINE #define XML_SOCKLEN_T socklen_t -#define HAVE_LIBPTHREAD #define HAVE_PTHREAD_H #define LIBXML_THREAD_ENABLED @@ -30,9 +26,6 @@ /* Define if you have the printf function. */ #define HAVE_PRINTF -/* Define if you have the signal function. */ -#define HAVE_SIGNAL - /* Define if you have the snprintf function. */ #define HAVE_SNPRINTF @@ -63,9 +56,6 @@ /* Define if you have the <ctype.h> header file. */ #define HAVE_CTYPE_H -/* Define if you have the <dirent.h> header file. */ -#define HAVE_DIRENT_H - /* Define if you have the <dlfcn.h> header file. */ #define HAVE_DLFCN_H @@ -84,9 +74,6 @@ /* Define if you have the <math.h> header file. */ #define HAVE_MATH_H -/* Define if you have the <ndir.h> header file. */ -#define HAVE_NDIR_H - /* Define if you have the <netdb.h> header file. */ #define HAVE_NETDB_H @@ -105,15 +92,9 @@ /* Define if you have the <string.h> header file. */ #define HAVE_STRING_H -/* Define if you have the <sys/dir.h> header file. */ -#define HAVE_SYS_DIR_H - /* Define if you have the <sys/mman.h> header file. */ #undef HAVE_SYS_MMAN_H -/* Define if you have the <sys/ndir.h> header file. */ -#undef HAVE_SYS_NDIR_H - /* Define if you have the <sys/select.h> header file. */ #define HAVE_SYS_SELECT_H
diff --git a/third_party/libxml/src/parser.c b/third_party/libxml/src/parser.c index d5b72e4f..304f3be 100644 --- a/third_party/libxml/src/parser.c +++ b/third_party/libxml/src/parser.c
@@ -2201,7 +2201,8 @@ * It's Okay to use CUR/NEXT here since all the blanks are on * the ASCII range. */ - if (ctxt->instate != XML_PARSER_DTD) { + if (((ctxt->inputNr == 1) && (ctxt->instate != XML_PARSER_DTD)) || + (ctxt->instate == XML_PARSER_START)) { const xmlChar *cur; /* * if we are in the document content, go really fast @@ -4594,6 +4595,9 @@ } } COPY_BUF(l,buf,nbchar,cur); + /* move current position before possible calling of ctxt->sax->characters */ + NEXTL(l); + cur = CUR_CHAR(l); if (nbchar >= XML_PARSER_BIG_BUFFER_SIZE) { buf[nbchar] = 0; @@ -4627,8 +4631,6 @@ if (ctxt->instate == XML_PARSER_EOF) return; } - NEXTL(l); - cur = CUR_CHAR(l); } if (nbchar != 0) { buf[nbchar] = 0; @@ -12643,6 +12645,7 @@ xmlFree(ctxt->sax); ctxt->sax = (xmlSAXHandlerPtr) xmlMalloc(sizeof(xmlSAXHandler)); if (ctxt->sax == NULL) { + xmlFreeParserInputBuffer(buf); xmlErrMemory(ctxt, NULL); xmlFreeParserCtxt(ctxt); return(NULL);
diff --git a/third_party/libxml/src/parserInternals.c b/third_party/libxml/src/parserInternals.c index a731c16..08c6faf 100644 --- a/third_party/libxml/src/parserInternals.c +++ b/third_party/libxml/src/parserInternals.c
@@ -1551,8 +1551,10 @@ } inputStream = xmlNewInputStream(ctxt); - if (inputStream == NULL) + if (inputStream == NULL) { + xmlFreeParserInputBuffer(buf); return(NULL); + } inputStream->buf = buf; inputStream = xmlCheckHTTPInput(ctxt, inputStream);
diff --git a/third_party/libxml/src/runtest.c b/third_party/libxml/src/runtest.c index 0f178cb..62b362d 100644 --- a/third_party/libxml/src/runtest.c +++ b/third_party/libxml/src/runtest.c
@@ -1231,7 +1231,7 @@ if (quiet) return; for (i = 0;(i<len) && (i < 30);i++) - output[i] = ch[i]; + output[i] = (char) ch[i]; output[i] = 0; fprintf(SAXdebug, "SAX.characters(%s, %d)\n", output, len); @@ -1273,7 +1273,7 @@ if (quiet) return; for (i = 0;(i<len) && (i < 30);i++) - output[i] = ch[i]; + output[i] = (char) ch[i]; output[i] = 0; fprintf(SAXdebug, "SAX.ignorableWhitespace(%s, %d)\n", output, len); } @@ -2132,6 +2132,75 @@ return(0); } +/** + * fdParseTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file using the xmlReadFd API and check for errors. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +fdParseTest(const char *filename, const char *result, const char *err, + int options) { + xmlDocPtr doc; + const char *base = NULL; + int size, res = 0; + + nb_tests++; + int fd = open(filename, RD_FLAGS); +#ifdef LIBXML_HTML_ENABLED + if (options & XML_PARSE_HTML) { + doc = htmlReadFd(fd, filename, NULL, options); + } else +#endif + { + xmlGetWarningsDefaultValue = 1; + doc = xmlReadFd(fd, filename, NULL, options); + } + close(fd); + xmlGetWarningsDefaultValue = 0; + if (result) { + if (doc == NULL) { + base = ""; + size = 0; + } else { +#ifdef LIBXML_HTML_ENABLED + if (options & XML_PARSE_HTML) { + htmlDocDumpMemory(doc, (xmlChar **) &base, &size); + } else +#endif + xmlDocDumpMemory(doc, (xmlChar **) &base, &size); + } + res = compareFileMem(result, base, size); + } + if (doc != NULL) { + if (base != NULL) + xmlFree((char *)base); + xmlFreeDoc(doc); + } + if (res != 0) { + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + return(-1); + } + if (err != NULL) { + res = compareFileMem(err, testErrors, testErrorsSize); + if (res != 0) { + fprintf(stderr, "Error for %s failed\n", filename); + return(-1); + } + } else if (options & XML_PARSE_DTDVALID) { + if (testErrorsSize != 0) + fprintf(stderr, "Validation for %s failed\n", filename); + } + + return(0); +} + + + #ifdef LIBXML_READER_ENABLED /************************************************************************ * * @@ -4249,6 +4318,9 @@ { "Error cases regression tests", errParseTest, "./test/errors/*.xml", "result/errors/", "", ".err", 0 }, + { "Error cases regression tests from file descriptor", + fdParseTest, "./test/errors/*.xml", "result/errors/", "", ".err", + 0 }, { "Error cases regression tests with entity substitution", errParseTest, "./test/errors/*.xml", "result/errors/", NULL, ".ent", XML_PARSE_NOENT }, @@ -4292,6 +4364,9 @@ { "HTML regression tests" , errParseTest, "./test/HTML/*", "result/HTML/", "", ".err", XML_PARSE_HTML }, + { "HTML regression tests from file descriptor", + fdParseTest, "./test/HTML/*", "result/HTML/", "", ".err", + XML_PARSE_HTML }, #ifdef LIBXML_PUSH_ENABLED { "Push HTML regression tests" , pushParseTest, "./test/HTML/*", "result/HTML/", "", ".err",
diff --git a/third_party/libxml/src/testchar.c b/third_party/libxml/src/testchar.c index 6866a17..51e4acf 100644 --- a/third_party/libxml/src/testchar.c +++ b/third_party/libxml/src/testchar.c
@@ -32,7 +32,7 @@ lastError = 0; xmlCtxtReset(ctxt); - data[0] = i; + data[0] = (char) i; res = xmlReadMemory(document, len, "test", NULL, 0); @@ -73,8 +73,8 @@ lastError = 0; xmlCtxtReset(ctxt); - data[0] = i; - data[1] = j; + data[0] = (char) i; + data[1] = (char) j; res = xmlReadMemory(document, len, "test", NULL, 0); @@ -248,7 +248,7 @@ data[2] = 0; data[3] = 0; for (i = 0;i <= 0xFF;i++) { - data[0] = i; + data[0] = (char) i; ctxt->charset = XML_CHAR_ENCODING_UTF8; lastError = 0; @@ -275,8 +275,8 @@ data[3] = 0; for (i = 0x80;i <= 0xFF;i++) { for (j = 0;j <= 0xFF;j++) { - data[0] = i; - data[1] = j; + data[0] = (char) i; + data[1] = (char) j; ctxt->charset = XML_CHAR_ENCODING_UTF8; lastError = 0; @@ -353,8 +353,8 @@ for (i = 0xE0;i <= 0xFF;i++) { for (j = 0;j <= 0xFF;j++) { for (k = 0;k < 6;k++) { - data[0] = i; - data[1] = j; + data[0] = (char) i; + data[1] = (char) j; K = lows[k]; data[2] = (char) K; value = (K & 0x3F) + ((j & 0x3F) << 6) + ((i & 0xF) << 12); @@ -440,8 +440,8 @@ for (j = 0;j <= 0xFF;j++) { for (k = 0;k < 6;k++) { for (l = 0;l < 6;l++) { - data[0] = i; - data[1] = j; + data[0] = (char) i; + data[1] = (char) j; K = lows[k]; data[2] = (char) K; L = lows[l];
diff --git a/third_party/libxml/src/tree.c b/third_party/libxml/src/tree.c index c707f598..50b6763 100644 --- a/third_party/libxml/src/tree.c +++ b/third_party/libxml/src/tree.c
@@ -1596,6 +1596,10 @@ */ if (!xmlBufIsEmpty(buf)) { node = xmlNewDocText(doc, NULL); + if (node == NULL) { + if (val != NULL) xmlFree(val); + goto out; + } node->content = xmlBufDetach(buf); if (last == NULL) {
diff --git a/third_party/libxml/src/uri.c b/third_party/libxml/src/uri.c index 8204825..ccc26aa5 100644 --- a/third_party/libxml/src/uri.c +++ b/third_party/libxml/src/uri.c
@@ -1638,23 +1638,24 @@ out = ret; while(len > 0) { if ((len > 2) && (*in == '%') && (is_hex(in[1])) && (is_hex(in[2]))) { + int c = 0; in++; if ((*in >= '0') && (*in <= '9')) - *out = (*in - '0'); + c = (*in - '0'); else if ((*in >= 'a') && (*in <= 'f')) - *out = (*in - 'a') + 10; + c = (*in - 'a') + 10; else if ((*in >= 'A') && (*in <= 'F')) - *out = (*in - 'A') + 10; + c = (*in - 'A') + 10; in++; if ((*in >= '0') && (*in <= '9')) - *out = *out * 16 + (*in - '0'); + c = c * 16 + (*in - '0'); else if ((*in >= 'a') && (*in <= 'f')) - *out = *out * 16 + (*in - 'a') + 10; + c = c * 16 + (*in - 'a') + 10; else if ((*in >= 'A') && (*in <= 'F')) - *out = *out * 16 + (*in - 'A') + 10; + c = c * 16 + (*in - 'A') + 10; in++; len -= 3; - out++; + *out++ = (char) c; } else { *out++ = *in++; len--;
diff --git a/third_party/libxml/src/win32/configure.js b/third_party/libxml/src/win32/configure.js index cec64c53..8f03b464 100644 --- a/third_party/libxml/src/win32/configure.js +++ b/third_party/libxml/src/win32/configure.js
@@ -408,6 +408,14 @@ of.WriteLine(s.replace(/\@prefix\@/, buildPrefix)); } else if (s.search(/\@WITH_THREADS\@/) != -1) { of.WriteLine(s.replace(/\@WITH_THREADS\@/, withThreads == "no"? "0" : "1")); + } else if (s.search(/\@WITH_ZLIB\@/) != -1) { + of.WriteLine(s.replace(/\@WITH_ZLIB\@/, withZlib? "1" : "0")); + } else if (s.search(/\@WITH_LZMA\@/) != -1) { + of.WriteLine(s.replace(/\@WITH_LZMA\@/, withLzma? "1" : "0")); + } else if (s.search(/\@WITH_ICONV\@/) != -1) { + of.WriteLine(s.replace(/\@WITH_ICONV\@/, withIconv? "1" : "0")); + } else if (s.search(/\@WITH_ICU\@/) != -1) { + of.WriteLine(s.replace(/\@WITH_ICU\@/, withIcu? "1" : "0")); } else of.WriteLine(ln); }
diff --git a/third_party/libxml/src/xmlIO.c b/third_party/libxml/src/xmlIO.c index f20c0fa0..007144c 100644 --- a/third_party/libxml/src/xmlIO.c +++ b/third_party/libxml/src/xmlIO.c
@@ -2735,6 +2735,8 @@ ret->writecallback = xmlGzfileWrite; ret->closecallback = xmlGzfileClose; } + else + xmlGzfileClose(context); return(ret); } }
diff --git a/third_party/libxml/src/xmlmemory.c b/third_party/libxml/src/xmlmemory.c index c51f49a..e0b2531 100644 --- a/third_party/libxml/src/xmlmemory.c +++ b/third_party/libxml/src/xmlmemory.c
@@ -78,7 +78,7 @@ * Each of the blocks allocated begin with a header containing information */ -#define MEMTAG 0x5aa5 +#define MEMTAG 0x5aa5U #define MALLOC_TYPE 1 #define REALLOC_TYPE 2
diff --git a/third_party/libxml/src/xmlstring.c b/third_party/libxml/src/xmlstring.c index 62d3053..5a6875f5 100644 --- a/third_party/libxml/src/xmlstring.c +++ b/third_party/libxml/src/xmlstring.c
@@ -18,6 +18,7 @@ #include <stdlib.h> #include <string.h> +#include <limits.h> #include <libxml/xmlmemory.h> #include <libxml/parserInternals.h> #include <libxml/xmlstring.h> @@ -42,7 +43,7 @@ xmlChar *ret; if ((cur == NULL) || (len < 0)) return(NULL); - ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar)); + ret = (xmlChar *) xmlMallocAtomic(((size_t) len + 1) * sizeof(xmlChar)); if (ret == NULL) { xmlErrMemory(NULL, NULL); return(NULL); @@ -87,7 +88,7 @@ xmlChar *ret; if ((cur == NULL) || (len < 0)) return(NULL); - ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar)); + ret = (xmlChar *) xmlMallocAtomic(((size_t) len + 1) * sizeof(xmlChar)); if (ret == NULL) { xmlErrMemory(NULL, NULL); return(NULL); @@ -423,14 +424,14 @@ int xmlStrlen(const xmlChar *str) { - int len = 0; + size_t len = 0; if (str == NULL) return(0); while (*str != 0) { /* non input consuming */ str++; len++; } - return(len); + return(len > INT_MAX ? 0 : len); } /** @@ -460,9 +461,9 @@ return(xmlStrndup(add, len)); size = xmlStrlen(cur); - if (size < 0) + if ((size < 0) || (size > INT_MAX - len)) return(NULL); - ret = (xmlChar *) xmlRealloc(cur, (size + len + 1) * sizeof(xmlChar)); + ret = (xmlChar *) xmlRealloc(cur, ((size_t) size + len + 1) * sizeof(xmlChar)); if (ret == NULL) { xmlErrMemory(NULL, NULL); return(cur); @@ -500,9 +501,9 @@ return(xmlStrndup(str2, len)); size = xmlStrlen(str1); - if (size < 0) + if ((size < 0) || (size > INT_MAX - len)) return(NULL); - ret = (xmlChar *) xmlMalloc((size + len + 1) * sizeof(xmlChar)); + ret = (xmlChar *) xmlMalloc(((size_t) size + len + 1) * sizeof(xmlChar)); if (ret == NULL) { xmlErrMemory(NULL, NULL); return(xmlStrndup(str1, size)); @@ -667,7 +668,7 @@ */ int xmlUTF8Strlen(const xmlChar *utf) { - int ret = 0; + size_t ret = 0; if (utf == NULL) return(-1); @@ -694,7 +695,7 @@ } ret++; } - return(ret); + return(ret > INT_MAX ? 0 : ret); } /** @@ -796,26 +797,28 @@ * 1110xxxx 10xxxxxx 10xxxxxx valid 3-byte * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx valid 4-byte */ - for (ix = 0; (c = utf[ix]);) { /* string is 0-terminated */ + while ((c = utf[0])) { /* string is 0-terminated */ + ix = 0; if ((c & 0x80) == 0x00) { /* 1-byte code, starts with 10 */ - ix++; + ix = 1; } else if ((c & 0xe0) == 0xc0) {/* 2-byte code, starts with 110 */ - if ((utf[ix+1] & 0xc0 ) != 0x80) + if ((utf[1] & 0xc0 ) != 0x80) return 0; - ix += 2; + ix = 2; } else if ((c & 0xf0) == 0xe0) {/* 3-byte code, starts with 1110 */ - if (((utf[ix+1] & 0xc0) != 0x80) || - ((utf[ix+2] & 0xc0) != 0x80)) + if (((utf[1] & 0xc0) != 0x80) || + ((utf[2] & 0xc0) != 0x80)) return 0; - ix += 3; + ix = 3; } else if ((c & 0xf8) == 0xf0) {/* 4-byte code, starts with 11110 */ - if (((utf[ix+1] & 0xc0) != 0x80) || - ((utf[ix+2] & 0xc0) != 0x80) || - ((utf[ix+3] & 0xc0) != 0x80)) + if (((utf[1] & 0xc0) != 0x80) || + ((utf[2] & 0xc0) != 0x80) || + ((utf[3] & 0xc0) != 0x80)) return 0; - ix += 4; + ix = 4; } else /* unknown encoding */ return 0; + utf += ix; } return(1); } @@ -834,8 +837,9 @@ int xmlUTF8Strsize(const xmlChar *utf, int len) { - const xmlChar *ptr=utf; - xmlChar ch; + const xmlChar *ptr=utf; + int ch; + size_t ret; if (utf == NULL) return(0); @@ -846,20 +850,17 @@ while ( len-- > 0) { if ( !*ptr ) break; - if ( (ch = *ptr++) & 0x80) { - // Workaround for an optimization bug in VS 2015 Update 2, remove - // once the fix is released. crbug.com/599427 - // https://connect.microsoft.com/VisualStudio/feedback/details/2582138 - xmlChar ch2 = ch; - while ((ch2<<=1) & 0x80 ) { + if ( (ch = *ptr++) & 0x80) + while ((ch<<=1) & 0x80 ) { + if (*ptr == 0) break; ptr++; - if (*ptr == 0) break; - } - } + } } - return (ptr - utf); + ret = ptr - utf; + return (ret > INT_MAX ? 0 : ret); } + /** * xmlUTF8Strndup: * @utf: the input UTF8 * @@ -876,11 +877,8 @@ if ((utf == NULL) || (len < 0)) return(NULL); i = xmlUTF8Strsize(utf, len); - ret = (xmlChar *) xmlMallocAtomic((i + 1) * sizeof(xmlChar)); + ret = (xmlChar *) xmlMallocAtomic(((size_t) i + 1) * sizeof(xmlChar)); if (ret == NULL) { - xmlGenericError(xmlGenericErrorContext, - "malloc of %ld byte failed\n", - (len + 1) * (long)sizeof(xmlChar)); return(NULL); } memcpy(ret, utf, i * sizeof(xmlChar)); @@ -900,7 +898,7 @@ */ const xmlChar * xmlUTF8Strpos(const xmlChar *utf, int pos) { - xmlChar ch; + int ch; if (utf == NULL) return(NULL); if (pos < 0) @@ -932,14 +930,15 @@ */ int xmlUTF8Strloc(const xmlChar *utf, const xmlChar *utfchar) { - int i, size; - xmlChar ch; + size_t i; + int size; + int ch; if (utf==NULL || utfchar==NULL) return -1; size = xmlUTF8Strsize(utfchar, 1); for(i=0; (ch=*utf) != 0; i++) { if (xmlStrncmp(utf, utfchar, size)==0) - return(i); + return(i > INT_MAX ? 0 : i); utf++; if ( ch & 0x80 ) { /* if not simple ascii, verify proper format */ @@ -969,8 +968,8 @@ xmlChar * xmlUTF8Strsub(const xmlChar *utf, int start, int len) { - int i; - xmlChar ch; + int i; + int ch; if (utf == NULL) return(NULL); if (start < 0) return(NULL); @@ -1026,6 +1025,8 @@ if (count == 0) return(*msg); + if ((count > INT_MAX) || (msgLen > INT_MAX - count)) + return(NULL); resultLen = msgLen + count + 1; result = (xmlChar *) xmlMallocAtomic(resultLen * sizeof(xmlChar)); if (result == NULL) {
diff --git a/third_party/libxml/src/xpath.c b/third_party/libxml/src/xpath.c index d9e9408..6735395 100644 --- a/third_party/libxml/src/xpath.c +++ b/third_party/libxml/src/xpath.c
@@ -11120,7 +11120,9 @@ name = NULL; if (CUR != ')') { name = xmlXPathParseLiteral(ctxt); - CHECK_ERROR NULL; + if (name == NULL) { + XP_ERRORNULL(XPATH_EXPR_ERROR); + } *test = NODE_TEST_PI; SKIP_BLANKS; }
diff --git a/tools/binary_size/libsupersize/apkanalyzer.py b/tools/binary_size/libsupersize/apkanalyzer.py index 2285241..28f1b90 100644 --- a/tools/binary_size/libsupersize/apkanalyzer.py +++ b/tools/binary_size/libsupersize/apkanalyzer.py
@@ -61,16 +61,6 @@ return data -def _ExpectedDexTotalSize(apk_path): - dex_total = 0 - with zipfile.ZipFile(apk_path) as z: - for zip_info in z.infolist(): - if not zip_info.filename.endswith('.dex'): - continue - dex_total += zip_info.file_size - return dex_total - - # VisibleForTesting def UndoHierarchicalSizing(data): """Subtracts child node sizes from parent nodes. @@ -280,22 +270,20 @@ source_path=source_path) -def CreateDexSymbols(apk_path, mapping_path, size_info_prefix): +def CreateDexSymbols(apk_path, mapping_path, size_info_prefix, dex_total_size): source_map = _ParseJarInfoFile(size_info_prefix + '.jar.info') nodes = _RunApkAnalyzer(apk_path, mapping_path) nodes = UndoHierarchicalSizing(nodes) - dex_expected_size = _ExpectedDexTotalSize(apk_path) total_node_size = sum([x[2] for x in nodes]) # TODO(agrieve): Figure out why this log is triggering for # ChromeModernPublic.apk (https://crbug.com/851535). - # Reporting: dex_expected_size=6546088 total_node_size=6559549 - if dex_expected_size < total_node_size: + # Reporting: dex_total_size=6546088 total_node_size=6559549 + if dex_total_size < total_node_size: logging.error( - 'Node size too large, check for node processing errors. ' - 'dex_expected_size=%d total_node_size=%d', dex_expected_size, - total_node_size) + 'Node size too large, check for node processing errors. ' + 'dex_total_size=%d total_node_size=%d', dex_total_size, total_node_size) # Use (DEX_METHODS, DEX) buckets to speed up sorting. symbols = ([], []) lambda_normalizer = LambdaNormalizer()
diff --git a/tools/binary_size/libsupersize/archive.py b/tools/binary_size/libsupersize/archive.py index fb19276a..f8095e6e 100644 --- a/tools/binary_size/libsupersize/archive.py +++ b/tools/binary_size/libsupersize/archive.py
@@ -6,7 +6,6 @@ import argparse import collections import dataclasses -import functools import logging import os import posixpath @@ -227,41 +226,38 @@ return sorted(ret, key=lambda x: (x != 'base', x)) -def CreateMetadata(*, build_config, apk_spec, native_spec, source_directory, - output_directory): - """Creates metadata dict while updating |build_config|. +def CreateBuildConfig(output_directory, source_directory): + """Creates the dict to use for SizeInfo.build_info.""" + logging.debug('Constructing build_config') + build_config = {} + if output_directory: + gn_args = _ParseGnArgs(os.path.join(output_directory, 'args.gn')) + build_config[models.BUILD_CONFIG_GN_ARGS] = gn_args + + git_rev = _DetectGitRevision(source_directory) + if git_rev: + build_config[models.BUILD_CONFIG_GIT_REVISION] = git_rev + + return build_config + + +def CreateMetadata(*, apk_spec, native_spec, output_directory): + """Creates metadata dict. Returns: A dict of models.METADATA_* -> values. Performs "best effort" extraction using available data. """ logging.debug('Constructing metadata') - - def update_build_config(key, value): - if key in build_config: - old_value = build_config[key] - if value != old_value: - raise ValueError('Inconsistent {}: {} (was {})'.format( - key, value, old_value)) - else: - build_config[key] = value - metadata = {} # Ensure all paths are relative to output directory to make them hermetic. if output_directory: shorten_path = lambda path: os.path.relpath(path, output_directory) - gn_args = _ParseGnArgs(os.path.join(output_directory, 'args.gn')) - update_build_config(models.BUILD_CONFIG_GN_ARGS, gn_args) else: # If output directory is unavailable, just store basenames. shorten_path = os.path.basename - # Deduce GIT revision (cached via @lru_cache). - git_rev = _DetectGitRevision(source_directory) - if git_rev: - update_build_config(models.BUILD_CONFIG_GIT_REVISION, git_rev) - if apk_spec: metadata[models.METADATA_APK_SIZE] = os.path.getsize(apk_spec.apk_path) if apk_spec.minimal_apks_path: @@ -313,17 +309,14 @@ logging.info('Analyzing classes.dex for %s', apk_spec.split_name or apk_spec.apk_path) - def compute_dex_size(): - with zipfile.ZipFile(apk_spec.apk_path) as z: - return sum(i.file_size for i in z.infolist() - if i.filename.endswith('.dex')) + with zipfile.ZipFile(apk_spec.apk_path) as z: + dex_total_size = sum(i.file_size for i in z.infolist() + if i.filename.endswith('.dex')) - dex_size_result = parallel.CallOnThread(compute_dex_size) raw_symbols = apkanalyzer.CreateDexSymbols(apk_spec.apk_path, apk_spec.mapping_path, - apk_spec.size_info_prefix) - dex_size = dex_size_result.get() - + apk_spec.size_info_prefix, + dex_total_size) sizes = collections.Counter() for s in raw_symbols: sizes[s.section_name] += s.pss @@ -331,11 +324,11 @@ dex_method_size = round(sizes[models.SECTION_DEX_METHOD]) dex_other_size = round(sizes[models.SECTION_DEX]) - unattributed_dex = dex_size - dex_method_size - dex_other_size + unattributed_dex = dex_total_size - dex_method_size - dex_other_size # Compare against -5 instead of 0 to guard against round-off errors. assert unattributed_dex >= -5, ( 'sum(dex_symbols.size) > filesize(classes.dex). {} vs {}'.format( - dex_method_size + dex_other_size, dex_size)) + dex_method_size + dex_other_size, dex_total_size)) if unattributed_dex > 0: raw_symbols.append( @@ -349,7 +342,7 @@ # "dex other" responsible for any unattributed bytes. section_ranges = { models.SECTION_DEX_METHOD: (0, dex_method_size), - models.SECTION_DEX: (0, dex_size - dex_method_size), + models.SECTION_DEX: (0, dex_total_size - dex_method_size), } return section_ranges, raw_symbols @@ -458,7 +451,6 @@ return models.SizeInfo(build_config, container_list, all_raw_symbols) -@functools.lru_cache def _DetectGitRevision(directory): """Runs git rev-parse to get the SHA1 hash of the current revision. @@ -477,7 +469,6 @@ return None -@functools.lru_cache def _ParseGnArgs(args_path): """Returns a list of normalized "key=value" strings.""" args = {} @@ -1050,7 +1041,7 @@ except Exception as e: on_config_error(f'Bad --container-filter input: {e}') - build_config = {} + build_config = None seen_container_names = set() raw_symbols_list = [] pak_id_map = pakfile.PakIdMap() @@ -1058,6 +1049,10 @@ # Iterate over each container. for (sub_args, apk_spec, pak_spec, native_specs, container_name, resources_pathmap_path) in _IterSubArgs(top_args, on_config_error): + if build_config is None: + # TODO(agrieve): Move this out of the loop. + build_config = CreateBuildConfig(sub_args.output_directory, + sub_args.source_directory) if not native_specs: native_specs = [None] @@ -1071,10 +1066,8 @@ continue logging.info('Starting on container %s', container_name) - metadata = CreateMetadata(build_config=build_config, - apk_spec=apk_spec, + metadata = CreateMetadata(apk_spec=apk_spec, native_spec=native_spec, - source_directory=sub_args.source_directory, output_directory=sub_args.output_directory) raw_symbols = CreateContainerSymbols( container_name=container_name,
diff --git a/tools/binary_size/libsupersize/integration_test.py b/tools/binary_size/libsupersize/integration_test.py index 6ff07fb..a3eb729 100755 --- a/tools/binary_size/libsupersize/integration_test.py +++ b/tools/binary_size/libsupersize/integration_test.py
@@ -259,15 +259,14 @@ yield container_name, apk_spec, pak_spec, native_spec raw_symbols_list = [] - build_config = {} with test_util.AddMocksToPath(): + build_config = archive.CreateBuildConfig(output_directory, + _TEST_SOURCE_DIR) pak_id_map = pakfile.PakIdMap() for container_name, apk_spec, pak_spec, native_spec in iter_specs(): - metadata = archive.CreateMetadata(build_config=build_config, - apk_spec=apk_spec, + metadata = archive.CreateMetadata(apk_spec=apk_spec, native_spec=native_spec, - source_directory=_TEST_SOURCE_DIR, output_directory=output_directory) raw_symbols = archive.CreateContainerSymbols( container_name=container_name,
diff --git a/tools/mac/power/README.md b/tools/mac/power/README.md index 1e16e6d..256d9c4 100644 --- a/tools/mac/power/README.md +++ b/tools/mac/power/README.md
@@ -56,6 +56,12 @@ <user> ALL = (ALL) NOPASSWD:ALL ``` +## power_sampler + +A compiled binary of power_sampler is required to run power measurements. It can be compiled using this command: +`autoninja -C out/Release tools/mac/power:power_sampler` + + ## DTrace Running benchmark.py in profile mode uses `dtrace` to analyse the chromium processes. By default `dtrace` does not work well with [SIP](https://support.apple.com/en-us/HT204899). Disabling SIP as a whole is not recommended and instead should be done only for dtrace using these steps: @@ -73,7 +79,7 @@ * Profile the code that runs and/or is causing wake-ups. (chromium only) ``` -./benchmark.py --scenarios idle_on_wiki:chrome +./benchmark.py --scenarios idle_on_wiki:chrome idle_on_wiki:safari ./benchmark.py --profile_mode cpu_time --scenarios idle_on_wiki:chromium ```
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index cf72432..3cb8b00 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -28461,6 +28461,7 @@ <int value="948" label="FirstPartySetsEnabled"/> <int value="949" label="UserAgentForceMajorVersionToMinorPosition"/> <int value="950" label="AllHttpAuthSchemesAllowedForOrigins"/> + <int value="951" label="WindowPlacementAlwaysAllowed"/> </enum> <enum name="EnterprisePolicyDeviceIdValidity"> @@ -36986,6 +36987,7 @@ <int value="4150" label="PrivateNetworkAccessWithinWorker"/> <int value="4151" label="ClientHintsUAWoW64"/> <int value="4152" label="FetchSetCookieInRequestGuardedHeaders"/> + <int value="4153" label="V8Window_RequestPictureInPictureWindow_Method"/> </enum> <enum name="FeaturePolicyAllowlistType"> @@ -83161,7 +83163,7 @@ <int value="12" label="AccountReconcilor::Reconcile"/> <int value="13" label="DiceResponseHandler::Signin"/> <int value="14" label="DiceResponseHandler::Signout"/> - <int value="15" label="DiceTurnOnSyncHelper::Abort"/> + <int value="15" label="TurnOnSyncHelper::Abort"/> <int value="16" label="MachineLogon::CredentialProvider"/> <int value="17" label="TokenService::ExtractCredentials"/> <int value="18"
diff --git a/tools/metrics/histograms/metadata/bookmarks/histograms.xml b/tools/metrics/histograms/metadata/bookmarks/histograms.xml index f6590be..e5d85c3 100644 --- a/tools/metrics/histograms/metadata/bookmarks/histograms.xml +++ b/tools/metrics/histograms/metadata/bookmarks/histograms.xml
@@ -155,23 +155,6 @@ </summary> </histogram> -<histogram name="Bookmarks.Count.OnProfileLoad.DuplicateUrl" units="bookmarks" - expires_after="2021-04-04"> - <obsolete> - Replaced with Bookmarks.Count.OnProfileLoad.DuplicateUrl2 as of 11/2020 to - provide more granular buckets above 10K duplicates - </obsolete> - <owner>mamir@chromium.org</owner> - <owner>mastiz@chromium.org</owner> - <component>UI>Browser>Bookmarks</component> - <summary> - The number of bookmarks a user has saved with a URL that is also present in - at least one other bookmark. This excludes folders (which don't have a URL). - Recorded when bookmarks are loaded into storage from disk if there is at - least one duplicate. - </summary> -</histogram> - <histogram name="Bookmarks.Count.OnProfileLoad.Duplicate{UniquenessCriterion}" units="bookmarks" expires_after="2022-06-30"> <owner>mastiz@chromium.org</owner> @@ -231,47 +214,6 @@ </summary> </histogram> -<histogram name="Bookmarks.CreateBookmarkIndexTime" units="ms" - expires_after="M88"> - <obsolete> - Removed in M88. - </obsolete> - <owner>mastiz@chromium.org</owner> - <owner>sky@chromium.org</owner> - <component>UI>Browser>Bookmarks</component> - <summary> - Time taken to build the bookmark index. Logged upon profile load when the - bookmarks JSON file is read. - </summary> -</histogram> - -<histogram name="Bookmarks.DecodeTime" units="ms" expires_after="M88"> - <obsolete> - Removed in M88. - </obsolete> - <owner>mastiz@chromium.org</owner> - <owner>sky@chromium.org</owner> - <component>UI>Browser>Bookmarks</component> - <summary> - Time taken to decode the bookmarks JSON file. Logged upon profile load when - the bookmarks JSON file is read. - </summary> -</histogram> - -<histogram name="Bookmarks.DuplicateAndEmptyTitleDetectionTime" units="ms" - expires_after="2019-09-24"> - <obsolete> - Removed in M88. - </obsolete> - <owner>mamir@chromium.org</owner> - <owner>mastiz@chromium.org</owner> - <component>UI>Browser>Bookmarks</component> - <summary> - Time to compute values to be logged for UMA metrics - Bookmarks.Count.OnProfileLoad.*. - </summary> -</histogram> - <histogram name="Bookmarks.EntryPoint" enum="BookmarksEntryPoint" expires_after="2022-06-05"> <owner>ianwen@chromium.org</owner> @@ -313,27 +255,6 @@ </summary> </histogram> -<histogram name="Bookmarks.OpenBookmarkTimeInterval.{BookmarkType}" units="ms" - expires_after="2022-02-15"> - <obsolete> - Deprecated March 2021 - </obsolete> - <owner>dtrainor@chromium.org</owner> - <owner>xingliu@chromium.org</owner> - <component>UI>Browser>Bookmarks</component> - <summary> - Logs the duration in milliseconds between bookmark creation time and - bookmark open time based on device local time. Recorded when {BookmarkType} - is opened. Bookmark folder is not considered. The creation and open can - happen on different runs of Chrome. - </summary> - <token key="BookmarkType"> - <variant name="Normal" summary="a normal bookmark."/> - <variant name="Partner" summary="a partner bookmark."/> - <variant name="ReadingList" summary="a reading list article."/> - </token> -</histogram> - <histogram name="Bookmarks.OpenBookmarkTimeInterval2.{BookmarkType}" units="ms" expires_after="2022-02-15"> <owner>dtrainor@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml index 9356bd5..21883d9 100644 --- a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml
@@ -108,50 +108,6 @@ </summary> </histogram> -<histogram name="ChromeOS.Settings.Languages.Browser.Interaction" - enum="SettingsLanguagesPageBrowserInteraction" expires_after="2021-08-01"> - <obsolete> - Deprecated as of M88, as the languages browser settings page has been - replaced with the languages OS settings page. - </obsolete> - <owner>myy@chromium.org</owner> - <owner>essential-inputs-team@google.com</owner> - <summary> - Records when users interact with an element in the Chrome OS's Languages - browser settings page. - </summary> -</histogram> - -<histogram name="ChromeOS.Settings.Languages.Browser.OfferToTranslateCheckbox" - enum="BooleanChecked" expires_after="2021-05-30"> - <obsolete> - Deprecated as of M88, as the languages browser settings page has been - replaced with the languages OS settings page. - </obsolete> - <owner>myy@chromium.org</owner> - <owner>essential-inputs-team@google.com</owner> - <summary> - Records when users check/uncheck "Offer to translate pages in this - language" checkbox. - </summary> -</histogram> - -<histogram base="true" name="ChromeOS.Settings.Languages.Browser.Toggle" - enum="BooleanToggled" expires_after="2021-05-30"> - <obsolete> - Deprecated as of M88, as the languages browser settings page has been - replaced with the languages OS settings page. - </obsolete> -<!-- Name completed by histogram_suffixes name="SettingsLanguagesPageToggle" --> - - <owner>myy@chromium.org</owner> - <owner>essential-inputs-team@google.com</owner> - <summary> - Records when users interact with a toggle in the Chrome OS's Languages - browser settings page. - </summary> -</histogram> - <histogram name="ChromeOS.Settings.Languages.Interaction" enum="SettingsLanguagesPageInteraction" expires_after="2022-04-10"> <owner>myy@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml index 172efbb2..e5bd7f4 100644 --- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -9946,7 +9946,6 @@ <suffix name="SpellCheck" label="Spell check"/> <suffix name="Translate" label="Offer to translate pages in a language you don't read"/> - <affected-histogram name="ChromeOS.Settings.Languages.Browser.Toggle"/> <affected-histogram name="ChromeOS.Settings.Languages.Toggle"/> </histogram_suffixes>
diff --git a/tools/metrics/histograms/metadata/navigation/histograms.xml b/tools/metrics/histograms/metadata/navigation/histograms.xml index 5ea6fae3..673106d 100644 --- a/tools/metrics/histograms/metadata/navigation/histograms.xml +++ b/tools/metrics/histograms/metadata/navigation/histograms.xml
@@ -1065,7 +1065,7 @@ </histogram> <histogram name="Navigation.ThrottleDeferTime.{Event}" units="ms" - expires_after="2022-03-11"> + expires_after="2022-09-11"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -1076,7 +1076,7 @@ </histogram> <histogram name="Navigation.ThrottleExecutionTime.{Event}" units="ms" - expires_after="2022-03-11"> + expires_after="2022-09-11"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/optimization/histograms.xml b/tools/metrics/histograms/metadata/optimization/histograms.xml index 53840d5..9d7ca021 100644 --- a/tools/metrics/histograms/metadata/optimization/histograms.xml +++ b/tools/metrics/histograms/metadata/optimization/histograms.xml
@@ -57,19 +57,6 @@ summary="Validates bloom filer allowlist/blocklist based hints"/> <variant name="CompressPublicImages" summary="Compresses public images"/> <variant name="DeferAllScript" summary="Defers execution of script"/> - <variant name="DelayAsyncScriptExecution" - summary="Delays execution of async scripts"> - <obsolete> - Removed in M94. - </obsolete> - </variant> - <variant name="DelayCompetingLowPriorityRequests" - summary="Delays low priority requests behind in-flight 'important' - requests"> - <obsolete> - Removed in M94. - </obsolete> - </variant> <variant name="FastHostHints" summary="Provides information about hosts that historically provide a fast and responsive user experience"/> @@ -78,12 +65,6 @@ page"/> <variant name="LitePage" summary="HTTP server preview (served from the Data Reduction Proxy)"/> - <variant name="LitePageRedirect" - summary="HTTPS server preview (served from the litepages service)"> - <obsolete> - Removed in M84. - </obsolete> - </variant> <variant name="LiteVideo" summary="Provides information on how to throttle media requests to reduce the adaptive bit rates of media streams."/> @@ -99,24 +80,12 @@ summary="Provides trust data related to the merchant -- version 2."/> <variant name="MetadataFetchValidation" summary="Validates metadata fetch on navigation"/> - <variant name="NoScript" - summary="Disables the fetching and execution of JavaScript"> - <obsolete> - Removed in M89. - </obsolete> - </variant> <variant name="PageEntities" summary="Provides the entities that are present on the page"/> <variant name="PerformanceHints" summary="Provides aggregated performance information about the page"/> <variant name="PriceTracking" summary="Returns price related data for shopping websites"/> - <variant name="ResourceLoading" - summary="Applies a set of resource loading hints to load the page"> - <obsolete> - Removed in M89. - </obsolete> - </variant> <variant name="ShoppingPagePredictor" summary="Determines if a page is shopping related or not"/> </variants> @@ -127,11 +96,6 @@ </variants> <variants name="RequestContext"> - <variant name="BatchUpdate" summary="Batch update."> - <obsolete> - Obsolete as of 10/2021. - </obsolete> - </variant> <variant name="BatchUpdateActiveTabs" summary="Batch update of hints for active tabs"/> <variant name="BatchUpdateGoogleSRP" @@ -458,25 +422,6 @@ </histogram> <histogram - name="OptimizationGuide.ModelExecutor.ModelLoadingDuration.{OptimizationTarget}" - units="ms" expires_after="M106"> - <obsolete> - Replaced by - OptimizationGuide.ModelExecutor.ModelLoadingDuration2.{OptimizationTarget} - in M99 becuase the metrics recorded here were incorrect and should not be - used. - </obsolete> - <owner>robertogden@chromium.org</owner> - <owner>chrome-intelligence-core@google.com</owner> - <summary> - Records the time duration it took to load a model file (un)successfully for - {OptimizationTarget}. Recorded once per model load attempt for - {OptimizationTarget}. - </summary> - <token key="OptimizationTarget" variants="OptimizationTarget"/> -</histogram> - -<histogram name="OptimizationGuide.ModelExecutor.ModelLoadingDuration2.{OptimizationTarget}" units="ms" expires_after="M106"> <owner>robertogden@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml index bdb14219..e646c29 100644 --- a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml +++ b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
@@ -157,28 +157,6 @@ </summary> </histogram> -<histogram name="SafeBrowsing.BlockingPage.ResourceType" - enum="ContentResourceType2" expires_after="2022-02-06"> - <obsolete> - Removed from code in M94. Replaced with - SafeBrowsing.BlockingPage.RequestDestination. - </obsolete> - <owner>xinghuilu@chromium.org</owner> - <owner>chrome-safebrowsing-alerts@google.com</owner> - <summary> - Logs the resource type that triggers the safe browsing blocking page. Logged - each time a safe browsing blocking page is created. This metric is useful to - show the priority of checking each resource type in real time. Note that - this metric may be bias towards mainframe, because the default resource type - is set to mainframe. - - Starting M89, this metric is derived from - network::mojom::RequestDestination. kPrefetch, kFavicon, kXhr, kPing, - kNavigationPreloadMainFrame, and kNavigationPreloadSubFrame are all mapped - to kSubResource. - </summary> -</histogram> - <histogram name="SafeBrowsing.BrowserThrottle.IsCheckCompletedOnProcessResponse" enum="BooleanCompleted" expires_after="2022-07-11">
diff --git a/tools/metrics/histograms/metadata/settings/histograms.xml b/tools/metrics/histograms/metadata/settings/histograms.xml index a8200ea..ad4e39a 100644 --- a/tools/metrics/histograms/metadata/settings/histograms.xml +++ b/tools/metrics/histograms/metadata/settings/histograms.xml
@@ -160,13 +160,13 @@ </histogram> <histogram name="Settings.PinUnlockSetup" enum="LockScreenProgress" - expires_after="2022-04-10"> - <owner>rsorokin@chromium.org</owner> - <owner>jessejames@chromium.org</owner> - <owner>cros-oac@google.com</owner> + expires_after="2022-06-10"> + <owner>anastasiian@chromium.org</owner> + <owner>teresachow@google.com</owner> + <owner>cros-lurs@google.com</owner> <summary> The users progress through the pin unlock setup wizard. Each type - corresponds to the user completeing a different stage of the setup wizard. + corresponds to the user completing a different stage of the setup wizard. </summary> </histogram>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 34f8bd81..de8478d 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,8 +5,8 @@ "remote_path": "perfetto_binaries/trace_processor_shell/linux_arm64/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell" }, "win": { - "hash": "54c262715852a43d1be2fd25f64d8727d6969d98", - "remote_path": "perfetto_binaries/trace_processor_shell/win/00b152a26effb7ba2ec1f2d1fdace9116ea470e4/trace_processor_shell.exe" + "hash": "6c0f92df430b8793a010905f73a4d1e7219d2fe7", + "remote_path": "perfetto_binaries/trace_processor_shell/win/bb04c2aa467ce4cb326836c2ebf73d862bb7ed37/trace_processor_shell.exe" }, "linux_arm": { "hash": "58893933be305d3bfe0a72ebebcacde2ac3ca893", @@ -14,7 +14,7 @@ }, "mac": { "hash": "1f298d105f2b7ac6bc376cfb74430f839ca6d625", - "remote_path": "perfetto_binaries/trace_processor_shell/mac/00b152a26effb7ba2ec1f2d1fdace9116ea470e4/trace_processor_shell" + "remote_path": "perfetto_binaries/trace_processor_shell/mac/bb04c2aa467ce4cb326836c2ebf73d862bb7ed37/trace_processor_shell" }, "mac_arm64": { "hash": "c0397e87456ad6c6a7aa0133e5b81c97adbab4ab", @@ -22,7 +22,7 @@ }, "linux": { "hash": "9ed307b2d52a0af8d2e30ff51e34cdcd1a224f26", - "remote_path": "perfetto_binaries/trace_processor_shell/linux/00b152a26effb7ba2ec1f2d1fdace9116ea470e4/trace_processor_shell" + "remote_path": "perfetto_binaries/trace_processor_shell/linux/bb04c2aa467ce4cb326836c2ebf73d862bb7ed37/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/rust/build.py b/tools/rust/build.py index a1c7d8fe..e6a36c9 100755 --- a/tools/rust/build.py +++ b/tools/rust/build.py
@@ -48,8 +48,8 @@ from update import (CHROMIUM_DIR, CLANG_REVISION, CLANG_SUB_REVISION, LLVM_BUILD_DIR, GetDefaultHostOs, RmTree, UpdatePackage) -# Trunk on 1/26/2021 -RUST_REVISION = 'a7f3757' +# Trunk on 1/31/2021 +RUST_REVISION = '24b8bb1' RUST_SUB_REVISION = 1 PACKAGE_VERSION = '%s-%s-%s-%s' % (RUST_REVISION, RUST_SUB_REVISION,
diff --git a/tools/style_variable_generator/colors_test_expected.cc.generated b/tools/style_variable_generator/colors_test_expected.cc.generated new file mode 100644 index 0000000..8b0e18ba --- /dev/null +++ b/tools/style_variable_generator/colors_test_expected.cc.generated
@@ -0,0 +1,60 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file is generated from: +// colors_test.json5 +// colors_test_palette.json5 + +#include "tools/style_variable_generator/colors_test_expected.h" + +#include "third_party/skia/include/core/SkColor.h" + +namespace colors_test_expected { + +SkAlpha GetOpacity(OpacityName opacity_name, bool is_dark_mode) { + switch (opacity_name) { + case OpacityName::kDisabledOpacity: + return 0x60; + case OpacityName::kReferenceOpacity: + if (is_dark_mode) { + return 0xFF; + } else { + return GetOpacity(OpacityName::kDisabledOpacity, is_dark_mode); + } + } +} + +SkColor ResolveColor(ColorName color_name, + bool is_dark_mode, + bool use_debug_colors) { + switch (color_name) { + case ColorName::kGoogleGrey900: + return SkColorSetRGB(0x20, 0x21, 0x24); + case ColorName::kTextColorPrimary: + if (use_debug_colors) + return ResolveColor(ColorName::kToggleColor, is_dark_mode, use_debug_colors); + if (is_dark_mode) + return SkColorSetRGB(0xFF, 0xFF, 0xFF); + return ResolveColor(ColorName::kGoogleGrey900, is_dark_mode, use_debug_colors); + case ColorName::kToggleColor: + if (use_debug_colors) + return SkColorSetRGB(0xFF, 0xFF, 0xFF); + if (is_dark_mode) + return SkColorSetA(ResolveColor(ColorName::kTextColorPrimary, is_dark_mode, use_debug_colors), GetOpacity(OpacityName::kDisabledOpacity, is_dark_mode)); + return SkColorSetA(ResolveColor(ColorName::kTextColorPrimary, is_dark_mode, use_debug_colors), 0x19); + case ColorName::kBgColorElevation1: + if (is_dark_mode) + return SkColorSetRGB(0x29, 0x2A, 0x2D); + return SkColorSetRGB(0xFF, 0xFF, 0xFF); + } +} + +char kDebugOverrideCssString[] = "html:not(body) {\n" + " --cros-text-color-primary-rgb: var(--cros-toggle-color-rgb);\n" + " --cros-text-color-primary: var(--cros-toggle-color);\n" + " --cros-toggle-color-rgb: 255, 255, 255;\n" + " --cros-toggle-color: rgb(var(--cros-toggle-color-rgb));\n" + "}\n"; + +} // namespace colors_test_expected
diff --git a/tools/style_variable_generator/colors_test_expected.h.generated b/tools/style_variable_generator/colors_test_expected.h.generated index a6cd52a..8bd1f723 100644 --- a/tools/style_variable_generator/colors_test_expected.h.generated +++ b/tools/style_variable_generator/colors_test_expected.h.generated
@@ -9,7 +9,6 @@ #ifndef TOOLS_STYLE_VARIABLE_GENERATOR_COLORS_TEST_EXPECTED_H_ #define TOOLS_STYLE_VARIABLE_GENERATOR_COLORS_TEST_EXPECTED_H_ -#include "base/strings/strcat.h" #include "third_party/skia/include/core/SkColor.h" namespace colors_test_expected { @@ -26,50 +25,14 @@ kReferenceOpacity, }; -constexpr SkAlpha GetOpacity(OpacityName opacity_name, bool is_dark_mode) { - switch (opacity_name) { - case OpacityName::kDisabledOpacity: - return 0x60; - case OpacityName::kReferenceOpacity: - if (is_dark_mode) { - return 0xFF; - } else { - return GetOpacity(OpacityName::kDisabledOpacity, is_dark_mode); - } - } -} +SkAlpha GetOpacity(OpacityName opacity_name, + bool is_dark_mode); -constexpr SkColor ResolveColor(ColorName color_name, - bool is_dark_mode, - bool use_debug_colors) { - switch (color_name) { - case ColorName::kGoogleGrey900: - return SkColorSetRGB(0x20, 0x21, 0x24); - case ColorName::kTextColorPrimary: - if (use_debug_colors) - return ResolveColor(ColorName::kToggleColor, is_dark_mode, use_debug_colors); - if (is_dark_mode) - return SkColorSetRGB(0xFF, 0xFF, 0xFF); - return ResolveColor(ColorName::kGoogleGrey900, is_dark_mode, use_debug_colors); - case ColorName::kToggleColor: - if (use_debug_colors) - return SkColorSetRGB(0xFF, 0xFF, 0xFF); - if (is_dark_mode) - return SkColorSetA(ResolveColor(ColorName::kTextColorPrimary, is_dark_mode, use_debug_colors), GetOpacity(OpacityName::kDisabledOpacity, is_dark_mode)); - return SkColorSetA(ResolveColor(ColorName::kTextColorPrimary, is_dark_mode, use_debug_colors), 0x19); - case ColorName::kBgColorElevation1: - if (is_dark_mode) - return SkColorSetRGB(0x29, 0x2A, 0x2D); - return SkColorSetRGB(0xFF, 0xFF, 0xFF); - } -} +SkColor ResolveColor(ColorName color_name, + bool is_dark_mode, + bool use_debug_colors); -constexpr char kDebugOverrideCssString[] = "html:not(body) {\n" - " --cros-text-color-primary-rgb: var(--cros-toggle-color-rgb);\n" - " --cros-text-color-primary: var(--cros-toggle-color);\n" - " --cros-toggle-color-rgb: 255, 255, 255;\n" - " --cros-toggle-color: rgb(var(--cros-toggle-color-rgb));\n" - "}\n"; +extern char kDebugOverrideCssString[]; } // namespace colors_test_expected #endif // TOOLS_STYLE_VARIABLE_GENERATOR_COLORS_TEST_EXPECTED_H_
diff --git a/tools/style_variable_generator/main.py b/tools/style_variable_generator/main.py index 3768487..40811999 100755 --- a/tools/style_variable_generator/main.py +++ b/tools/style_variable_generator/main.py
@@ -12,7 +12,7 @@ from style_variable_generator.css_generator import CSSStyleGenerator from style_variable_generator.ts_generator import TSStyleGenerator from style_variable_generator.proto_generator import ProtoStyleGenerator, ProtoJSONStyleGenerator -from style_variable_generator.views_generator import ViewsStyleGenerator +from style_variable_generator.views_generator import ViewsCCStyleGenerator, ViewsHStyleGenerator from style_variable_generator.base_generator import Modes @@ -32,8 +32,8 @@ description='Generate style variables from JSON5 color file.') generators = [ - CSSStyleGenerator, ViewsStyleGenerator, ProtoStyleGenerator, - ProtoJSONStyleGenerator, TSStyleGenerator + CSSStyleGenerator, ViewsCCStyleGenerator, ViewsHStyleGenerator, + ProtoStyleGenerator, ProtoJSONStyleGenerator, TSStyleGenerator ] parser.add_argument('--generator',
diff --git a/tools/style_variable_generator/style_variable_generator.gni b/tools/style_variable_generator/style_variable_generator.gni index 1ccaca7..dde4d70 100644 --- a/tools/style_variable_generator/style_variable_generator.gni +++ b/tools/style_variable_generator/style_variable_generator.gni
@@ -56,7 +56,7 @@ ] + rebase_path(sources, root_build_dir) } - action("${target_name}_views_generator") { + action("${target_name}_views_h_generator") { script = script_file forward_variables_from(invoker, [ @@ -71,15 +71,44 @@ out_file = "$target_gen_dir/${original_target_name}.h" outputs = [ out_file ] args = [ - "--generator=Views", + "--generator=ViewsH", + "--out-file", + rebase_path("$out_file", root_build_dir), + ] + rebase_path(sources, root_build_dir) + } + + action("${target_name}_views_cc_generator") { + script = script_file + forward_variables_from(invoker, + [ + "deps", + "sources", + ]) + + inputs = common_inputs + [ + "//tools/style_variable_generator/views_generator.py", + "//tools/style_variable_generator/views_generator_cc.tmpl", + ] + out_file = "$target_gen_dir/${original_target_name}.cc" + outputs = [ out_file ] + args = [ + "--generator=ViewsCC", "--out-file", rebase_path("$out_file", root_build_dir), ] + rebase_path(sources, root_build_dir) } source_set("${target_name}_views") { - sources = [ "$target_gen_dir/${original_target_name}.h" ] - deps = [ ":${original_target_name}_views_generator" ] + sources = [ + "$target_gen_dir/${original_target_name}.cc", + "$target_gen_dir/${original_target_name}.h", + ] + deps = [ + ":${original_target_name}_views_cc_generator", + ":${original_target_name}_views_h_generator", + "//base", + "//skia", + ] } action("${target_name}_proto") {
diff --git a/tools/style_variable_generator/style_variable_generator_test.py b/tools/style_variable_generator/style_variable_generator_test.py index b536109..c37f6e96 100755 --- a/tools/style_variable_generator/style_variable_generator_test.py +++ b/tools/style_variable_generator/style_variable_generator_test.py
@@ -10,7 +10,7 @@ from style_variable_generator.base_generator import Modes from style_variable_generator.css_generator import CSSStyleGenerator from style_variable_generator.proto_generator import ProtoStyleGenerator, ProtoJSONStyleGenerator -from style_variable_generator.views_generator import ViewsStyleGenerator +from style_variable_generator.views_generator import ViewsHStyleGenerator, ViewsCCStyleGenerator from style_variable_generator.ts_generator import TSStyleGenerator import unittest @@ -28,14 +28,22 @@ self.expected_output_file) -class ViewsStyleGeneratorTest(unittest.TestCase, BaseStyleGeneratorTest): +class ViewsStyleHGeneratorTest(unittest.TestCase, BaseStyleGeneratorTest): def setUp(self): - self.generator = ViewsStyleGenerator() + self.generator = ViewsHStyleGenerator() self.generator.AddJSONFilesToModel( ['colors_test_palette.json5', 'colors_test.json5']) self.expected_output_file = 'colors_test_expected.h.generated' +class ViewsStyleCCGeneratorTest(unittest.TestCase, BaseStyleGeneratorTest): + def setUp(self): + self.generator = ViewsCCStyleGenerator() + self.generator.AddJSONFilesToModel( + ['colors_test_palette.json5', 'colors_test.json5']) + self.expected_output_file = 'colors_test_expected.cc.generated' + + class CSSStyleGeneratorTest(unittest.TestCase, BaseStyleGeneratorTest): def setUp(self): self.generator = CSSStyleGenerator() @@ -105,7 +113,8 @@ self.assertEqualToFile(self.generator.Render(), expected_file_name) def testTypographyAndUntypedCSS(self): - expected_file_name = 'colors_test_typography_and_untyped_css_expected.ts' + expected_file_name = ( + 'colors_test_typography_and_untyped_css_expected.ts') self.generator.AddJSONFilesToModel( ['typography_test.json5', 'untyped_css_test.json5']) self.generator.generator_options = {'include_style_sheet': 'true'}
diff --git a/tools/style_variable_generator/views_generator.py b/tools/style_variable_generator/views_generator.py index d0cb4d94..8fe3fb58 100644 --- a/tools/style_variable_generator/views_generator.py +++ b/tools/style_variable_generator/views_generator.py
@@ -4,22 +4,17 @@ import os import math +import re from style_variable_generator.base_generator import Color, Modes, VariableType from style_variable_generator.css_generator import CSSStyleGenerator class ViewsStyleGenerator(CSSStyleGenerator): '''Generator for Views Variables''' - @staticmethod def GetName(): return 'Views' - def Render(self): - self.Validate() - return self.ApplyTemplate(self, 'views_generator_h.tmpl', - self.GetParameters()) - def GetParameters(self): return { 'colors': self._CreateColorList(), @@ -41,6 +36,7 @@ 'Modes': Modes, 'out_file_path': None, 'namespace_name': None, + 'header_file': None, 'in_files': sorted(self.in_file_to_context.keys()), 'css_color_var': self.CSSColorVar, } @@ -48,6 +44,10 @@ globals['out_file_path'] = self.out_file_path globals['namespace_name'] = os.path.splitext( os.path.basename(self.out_file_path))[0] + header_file = self.out_file_path.replace(".cc", ".h") + header_file = re.sub(r'.*gen/', '', header_file) + globals['header_file'] = header_file + return globals def _CreateColorList(self): @@ -91,3 +91,31 @@ c.opacity), c.r, c.g, c.b) else: return 'SkColorSetRGB(0x%X, 0x%X, 0x%X)' % (c.r, c.g, c.b) + + +class ViewsCCStyleGenerator(ViewsStyleGenerator): + @staticmethod + def GetName(): + return 'ViewsCC' + + def GetContextKey(self): + return ViewsStyleGenerator.GetName() + + def Render(self): + self.Validate() + return self.ApplyTemplate(self, 'views_generator_cc.tmpl', + self.GetParameters()) + + +class ViewsHStyleGenerator(ViewsStyleGenerator): + @staticmethod + def GetName(): + return 'ViewsH' + + def GetContextKey(self): + return ViewsStyleGenerator.GetName() + + def Render(self): + self.Validate() + return self.ApplyTemplate(self, 'views_generator_h.tmpl', + self.GetParameters())
diff --git a/tools/style_variable_generator/views_generator_cc.tmpl b/tools/style_variable_generator/views_generator_cc.tmpl new file mode 100644 index 0000000..386a1d08 --- /dev/null +++ b/tools/style_variable_generator/views_generator_cc.tmpl
@@ -0,0 +1,67 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file is generated from: +{%- for path in in_files %} +// {{path}} +{%- endfor %} + +#include "{{header_file}}" + +#include "third_party/skia/include/core/SkColor.h" + +namespace {{namespace_name}} { + +{%- if opacities %} + +SkAlpha GetOpacity(OpacityName opacity_name, bool is_dark_mode) { + switch (opacity_name) { +{%- for name, mode_values in opacities.items() %} + case OpacityName::{{name | to_const_name}}: +{%- if mode_values[Modes.DARK] %} + if (is_dark_mode) { + return {{mode_values[Modes.DARK] | cpp_opacity}}; + } else { + return {{mode_values[Modes.LIGHT] | cpp_opacity}}; + } +{%- else %} + return {{mode_values[Modes.LIGHT] | cpp_opacity}}; +{%- endif %} +{%- endfor %} + } +} + +{%- endif %} + +SkColor ResolveColor(ColorName color_name, + bool is_dark_mode, + bool use_debug_colors) { + switch (color_name) { +{%- for obj in colors %} + case ColorName::{{obj.name | to_const_name}}: +{%- if obj.mode_values[Modes.DEBUG] %} + if (use_debug_colors) + return {{obj.mode_values[Modes.DEBUG] | cpp_color}}; + +{%- endif %} +{%- if obj.mode_values[Modes.DARK] %} + if (is_dark_mode) + return {{obj.mode_values[Modes.DARK] | cpp_color}}; + +{%- endif %} + return {{obj.mode_values[Modes.LIGHT] | cpp_color}}; +{%- endfor %} + } +} + +char kDebugOverrideCssString[] = "html:not(body) {\n" +{%- for obj in colors %} +{%- if obj.mode_values[Modes.DEBUG] %} + " {{obj.name | to_css_var_name}}-rgb: {{obj.mode_values[Modes.DEBUG] | css_color_rgb}};\n" + " {{obj.name | to_css_var_name}}: {{css_color_var(obj.name, obj.mode_values[Modes.DEBUG])}};\n" +{%- endif %} +{%- endfor %} + "}\n"; + +} // namespace {{namespace_name}}
diff --git a/tools/style_variable_generator/views_generator_h.tmpl b/tools/style_variable_generator/views_generator_h.tmpl index 4d5ef4c..cfdfab1 100644 --- a/tools/style_variable_generator/views_generator_h.tmpl +++ b/tools/style_variable_generator/views_generator_h.tmpl
@@ -14,7 +14,6 @@ #ifndef {{header_guard}} #define {{header_guard}} -#include "base/strings/strcat.h" #include "third_party/skia/include/core/SkColor.h" namespace {{namespace_name}} { @@ -33,53 +32,15 @@ {%- endfor %} }; -constexpr SkAlpha GetOpacity(OpacityName opacity_name, bool is_dark_mode) { - switch (opacity_name) { -{%- for name, mode_values in opacities.items() %} - case OpacityName::{{name | to_const_name}}: -{%- if mode_values[Modes.DARK] %} - if (is_dark_mode) { - return {{mode_values[Modes.DARK] | cpp_opacity}}; - } else { - return {{mode_values[Modes.LIGHT] | cpp_opacity}}; - } -{%- else %} - return {{mode_values[Modes.LIGHT] | cpp_opacity}}; -{%- endif %} -{%- endfor %} - } -} +SkAlpha GetOpacity(OpacityName opacity_name, + bool is_dark_mode); {%- endif %} -constexpr SkColor ResolveColor(ColorName color_name, - bool is_dark_mode, - bool use_debug_colors) { - switch (color_name) { -{%- for obj in colors %} - case ColorName::{{obj.name | to_const_name}}: -{%- if obj.mode_values[Modes.DEBUG] %} - if (use_debug_colors) - return {{obj.mode_values[Modes.DEBUG] | cpp_color}}; +SkColor ResolveColor(ColorName color_name, + bool is_dark_mode, + bool use_debug_colors); -{%- endif %} -{%- if obj.mode_values[Modes.DARK] %} - if (is_dark_mode) - return {{obj.mode_values[Modes.DARK] | cpp_color}}; - -{%- endif %} - return {{obj.mode_values[Modes.LIGHT] | cpp_color}}; -{%- endfor %} - } -} - -constexpr char kDebugOverrideCssString[] = "html:not(body) {\n" -{%- for obj in colors %} -{%- if obj.mode_values[Modes.DEBUG] %} - " {{obj.name | to_css_var_name}}-rgb: {{obj.mode_values[Modes.DEBUG] | css_color_rgb}};\n" - " {{obj.name | to_css_var_name}}: {{css_color_var(obj.name, obj.mode_values[Modes.DEBUG])}};\n" -{%- endif %} -{%- endfor %} - "}\n"; +extern char kDebugOverrideCssString[]; } // namespace {{namespace_name}} #endif // {{header_guard}}
diff --git a/ui/lottie/animation.cc b/ui/lottie/animation.cc index e500da9..edfab73 100644 --- a/ui/lottie/animation.cc +++ b/ui/lottie/animation.cc
@@ -6,6 +6,7 @@ #include "base/bind.h" #include "base/check.h" +#include "base/numerics/safe_conversions.h" #include "base/trace_event/trace_event.h" #include "cc/paint/skottie_wrapper.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -41,8 +42,8 @@ base::TimeDelta completed_cycles_duration = completed_cycles_ * cycle_duration_; if (progress_ >= completed_cycles_duration + cycle_duration_) { - completed_cycles_++; - completed_cycles_duration += cycle_duration_; + completed_cycles_ = base::ClampFloor(progress_ / cycle_duration_); + completed_cycles_duration = cycle_duration_ * completed_cycles_; } current_cycle_progress_ =
diff --git a/ui/lottie/animation_unittest.cc b/ui/lottie/animation_unittest.cc index 3ff4750..712239ed 100644 --- a/ui/lottie/animation_unittest.cc +++ b/ui/lottie/animation_unittest.cc
@@ -1053,4 +1053,22 @@ FloatEq(kCanvasImageScale)); } +TEST_F(AnimationTest, HandlesTimeStepGreaterThanAnimationDuration) { + AdvanceClock(base::Milliseconds(300)); + + animation_->Start(Animation::Style::kLoop); + + animation_->Paint(canvas(), NowTicks(), animation_->GetOriginalSize()); + + ASSERT_FLOAT_EQ(animation_->GetCurrentProgress(), 0); + + AdvanceClock(kAnimationDuration / 2); + animation_->Paint(canvas(), NowTicks(), animation_->GetOriginalSize()); + EXPECT_FLOAT_EQ(animation_->GetCurrentProgress(), 0.5f); + + AdvanceClock(kAnimationDuration * 5); + animation_->Paint(canvas(), NowTicks(), animation_->GetOriginalSize()); + EXPECT_FLOAT_EQ(animation_->GetCurrentProgress(), 0.5f); +} + } // namespace lottie
diff --git a/ui/views/view.h b/ui/views/view.h index bc6f04c..094f0c6d 100644 --- a/ui/views/view.h +++ b/ui/views/view.h
@@ -621,6 +621,9 @@ // Transformations ----------------------------------------------------------- // Methods for setting transformations for a view (e.g. rotation, scaling). + // Care should be taken not to transform a view in such a way that its bounds + // lie outside those of its parent, or else the default ViewTargeterDelegate + // implementation will not pass mouse events to the view. gfx::Transform GetTransform() const;